From 6cc963a76ceec2206c97af45ef1caff88ce68c7c Mon Sep 17 00:00:00 2001 From: Umputun Date: Mon, 17 Dec 2018 01:58:09 -0600 Subject: [PATCH] extract readonly check from controllers --- backend/app/rest/api/rest_private.go | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/backend/app/rest/api/rest_private.go b/backend/app/rest/api/rest_private.go index 0a2de0ec..a1fe8bd9 100644 --- a/backend/app/rest/api/rest_private.go +++ b/backend/app/rest/api/rest_private.go @@ -51,11 +51,9 @@ func (s *Rest) createCommentCtrl(w http.ResponseWriter, r *http.Request) { return } - if s.ReadOnlyAge > 0 { - if info, e := s.DataService.Info(comment.Locator, s.ReadOnlyAge); e == nil && info.ReadOnly { - rest.SendErrorJSON(w, r, http.StatusForbidden, errors.New("rejected"), "old post, read-only") - return - } + if s.isReadOnly(comment.Locator) { + rest.SendErrorJSON(w, r, http.StatusForbidden, errors.New("rejected"), "old post, read-only") + return } id, err := s.DataService.Create(comment) @@ -149,12 +147,11 @@ func (s *Rest) voteCtrl(w http.ResponseWriter, r *http.Request) { vote := r.URL.Query().Get("vote") == "1" - if s.ReadOnlyAge > 0 { - if info, e := s.DataService.Info(locator, s.ReadOnlyAge); e == nil && info.ReadOnly { - rest.SendErrorJSON(w, r, http.StatusForbidden, errors.New("rejected"), "old post, read-only") - return - } + if s.isReadOnly(locator) { + rest.SendErrorJSON(w, r, http.StatusForbidden, errors.New("rejected"), "old post, read-only") + return } + // check if user blocked if s.adminService.checkBlocked(locator.SiteID, user) { rest.SendErrorJSON(w, r, http.StatusForbidden, errors.New("rejected"), "user blocked") @@ -196,7 +193,6 @@ func (s *Rest) userAllDataCtrl(w http.ResponseWriter, r *http.Request) { } var merr error - merr = multierror.Append(merr, write([]byte(`{"info": `))) // send user prefix merr = multierror.Append(merr, write(userB)) // send user info merr = multierror.Append(merr, write([]byte(`, "comments":`))) // send comments prefix @@ -254,3 +250,12 @@ func (s *Rest) deleteMeCtrl(w http.ResponseWriter, r *http.Request) { link := fmt.Sprintf("%s/web/deleteme.html?token=%s", s.RemarkURL, tokenStr) render.JSON(w, r, JSON{"site": siteID, "user_id": user.ID, "token": tokenStr, "link": link}) } + +func (s *Rest) isReadOnly(locator store.Locator) bool { + if s.ReadOnlyAge > 0 { + if info, e := s.DataService.Info(locator, s.ReadOnlyAge); e == nil && info.ReadOnly { + return true + } + } + return false +}