diff pkg/controllers/user.go @ 4244:4394daeea96a json-handler-middleware

Moved JSONHandler into middleware package.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 22 Aug 2019 11:26:48 +0200
parents d776110b4db0
children e020e6e34ad7
line wrap: on
line diff
--- a/pkg/controllers/user.go	Thu Aug 22 10:54:08 2019 +0200
+++ b/pkg/controllers/user.go	Thu Aug 22 11:26:48 2019 +0200
@@ -31,6 +31,8 @@
 	"gemma.intevation.de/gemma/pkg/models"
 	"gemma.intevation.de/gemma/pkg/pgxutils"
 	"gemma.intevation.de/gemma/pkg/scheduler"
+
+	mw "gemma.intevation.de/gemma/pkg/middleware"
 )
 
 const (
@@ -97,23 +99,23 @@
 (inkluding import errors) and details on the concerned import.`))
 )
 
-func deleteUser(req *http.Request) (jr JSONResult, err error) {
+func deleteUser(req *http.Request) (jr mw.JSONResult, err error) {
 
 	user := mux.Vars(req)["user"]
 	if !models.UserName(user).IsValid() {
-		err = JSONError{http.StatusBadRequest, "error: user invalid"}
+		err = mw.JSONError{http.StatusBadRequest, "error: user invalid"}
 		return
 	}
 
 	session, _ := auth.GetSession(req)
 	if session.User == user {
-		err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"}
+		err = mw.JSONError{http.StatusBadRequest, "error: cannot delete yourself"}
 		return
 	}
 
 	ctx := req.Context()
 
-	db := JSONConn(req)
+	db := mw.JSONConn(req)
 
 	// Remove scheduled tasks.
 	ids, err2 := scheduler.ScheduledUserIDs(ctx, db, user)
@@ -132,7 +134,7 @@
 	}
 
 	if n, err2 := res.RowsAffected(); err2 == nil && n == 0 {
-		err = JSONError{
+		err = mw.JSONError{
 			Code:    http.StatusNotFound,
 			Message: fmt.Sprintf("Cannot find user %s.", user),
 		}
@@ -142,22 +144,22 @@
 	// Running in a go routine should not be necessary.
 	go func() { auth.Sessions.Logout(user) }()
 
-	jr = JSONResult{Code: http.StatusNoContent}
+	jr = mw.JSONResult{Code: http.StatusNoContent}
 	return
 }
 
-func updateUser(req *http.Request) (jr JSONResult, err error) {
+func updateUser(req *http.Request) (jr mw.JSONResult, err error) {
 
 	user := models.UserName(mux.Vars(req)["user"])
 	if !user.IsValid() {
-		err = JSONError{http.StatusBadRequest, "error: user invalid"}
+		err = mw.JSONError{http.StatusBadRequest, "error: user invalid"}
 		return
 	}
 
-	newUser := JSONInput(req).(*models.User)
+	newUser := mw.JSONInput(req).(*models.User)
 	var res sql.Result
 
-	db := JSONConn(req)
+	db := mw.JSONConn(req)
 
 	if s, _ := auth.GetSession(req); s.Roles.Has("sys_admin") {
 		if newUser.Extent == nil {
@@ -187,7 +189,7 @@
 		}
 	} else {
 		if newUser.Extent == nil {
-			err = JSONError{http.StatusBadRequest, "extent is mandatory"}
+			err = mw.JSONError{http.StatusBadRequest, "extent is mandatory"}
 			return
 		}
 		res, err = db.ExecContext(
@@ -206,7 +208,7 @@
 	}
 
 	if n, err2 := res.RowsAffected(); err2 == nil && n == 0 {
-		err = JSONError{
+		err = mw.JSONError{
 			Code:    http.StatusNotFound,
 			Message: fmt.Sprintf("Cannot find user %s.", user),
 		}
@@ -218,7 +220,7 @@
 		go func() { auth.Sessions.Logout(string(user)) }()
 	}
 
-	jr = JSONResult{
+	jr = mw.JSONResult{
 		Code: http.StatusCreated,
 		Result: struct {
 			Result string `json:"result"`
@@ -227,11 +229,11 @@
 	return
 }
 
-func createUser(req *http.Request) (jr JSONResult, err error) {
+func createUser(req *http.Request) (jr mw.JSONResult, err error) {
 
-	user := JSONInput(req).(*models.User)
+	user := mw.JSONInput(req).(*models.User)
 
-	db := JSONConn(req)
+	db := mw.JSONConn(req)
 
 	if user.Extent == nil {
 		_, err = db.ExecContext(
@@ -259,11 +261,11 @@
 
 	if err != nil {
 		m, c := pgxutils.ReadableError{Err: err}.MessageAndCode()
-		err = JSONError{Code: c, Message: m}
+		err = mw.JSONError{Code: c, Message: m}
 		return
 	}
 
-	jr = JSONResult{
+	jr = mw.JSONResult{
 		Code: http.StatusCreated,
 		Result: struct {
 			Result string `json:"result"`
@@ -272,11 +274,11 @@
 	return
 }
 
-func listUsers(req *http.Request) (jr JSONResult, err error) {
+func listUsers(req *http.Request) (jr mw.JSONResult, err error) {
 
 	var rows *sql.Rows
 
-	rows, err = JSONConn(req).QueryContext(req.Context(), listUsersSQL)
+	rows, err = mw.JSONConn(req).QueryContext(req.Context(), listUsersSQL)
 	if err != nil {
 		return
 	}
@@ -299,7 +301,7 @@
 		users = append(users, user)
 	}
 
-	jr = JSONResult{
+	jr = mw.JSONResult{
 		Result: struct {
 			Users []*models.User `json:"users"`
 		}{users},
@@ -307,11 +309,11 @@
 	return
 }
 
-func listUser(req *http.Request) (jr JSONResult, err error) {
+func listUser(req *http.Request) (jr mw.JSONResult, err error) {
 
 	user := models.UserName(mux.Vars(req)["user"])
 	if !user.IsValid() {
-		err = JSONError{http.StatusBadRequest, "error: user invalid"}
+		err = mw.JSONError{http.StatusBadRequest, "error: user invalid"}
 		return
 	}
 
@@ -320,7 +322,7 @@
 		Extent: &models.BoundingBox{},
 	}
 
-	err = JSONConn(req).QueryRowContext(req.Context(), listUserSQL, user).Scan(
+	err = mw.JSONConn(req).QueryRowContext(req.Context(), listUserSQL, user).Scan(
 		&result.Role,
 		&result.Country,
 		&result.Email,
@@ -330,7 +332,7 @@
 
 	switch {
 	case err == sql.ErrNoRows:
-		err = JSONError{
+		err = mw.JSONError{
 			Code:    http.StatusNotFound,
 			Message: fmt.Sprintf("Cannot find user %s.", user),
 		}
@@ -343,11 +345,11 @@
 	return
 }
 
-func sendTestMail(req *http.Request) (jr JSONResult, err error) {
+func sendTestMail(req *http.Request) (jr mw.JSONResult, err error) {
 
 	user := models.UserName(mux.Vars(req)["user"])
 	if !user.IsValid() {
-		err = JSONError{http.StatusBadRequest, "error: user invalid"}
+		err = mw.JSONError{http.StatusBadRequest, "error: user invalid"}
 		return
 	}
 
@@ -356,7 +358,7 @@
 		Extent: &models.BoundingBox{},
 	}
 
-	err = JSONConn(req).QueryRowContext(req.Context(), listUserSQL, user).Scan(
+	err = mw.JSONConn(req).QueryRowContext(req.Context(), listUserSQL, user).Scan(
 		&userData.Role,
 		&userData.Country,
 		&userData.Email,
@@ -366,7 +368,7 @@
 
 	switch {
 	case err == sql.ErrNoRows:
-		err = JSONError{
+		err = mw.JSONError{
 			Code:    http.StatusNotFound,
 			Message: fmt.Sprintf("Cannot find user %s.", user),
 		}
@@ -395,7 +397,7 @@
 		subject = "Gemma: Waterway Admin Notification TEST"
 		bodyTmpl = testWWAdminNotifyMailTmpl
 	} else {
-		err = JSONError{
+		err = mw.JSONError{
 			Code:    http.StatusBadRequest,
 			Message: "Test mails can only be generated for admin roles.",
 		}