comparison controllers/user.go @ 240:9012e4045da4

Implemented /user delete controller.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 26 Jul 2018 17:56:02 +0200
parents 3771788d3dae
children 3b688fe04c39
comparison
equal deleted inserted replaced
239:713234a04a87 240:9012e4045da4
6 "errors" 6 "errors"
7 "net/http" 7 "net/http"
8 "regexp" 8 "regexp"
9 "strings" 9 "strings"
10 10
11 "gemma.intevation.de/gemma/auth"
11 "github.com/gorilla/mux" 12 "github.com/gorilla/mux"
12 ) 13 )
13 14
14 type ( 15 type (
15 Email string 16 Email string
39 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)` 40 ST_MakeBox2D(ST_Point($5, $6), ST_Point($7, $8)), $9)`
40 41
41 updateUserSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5, NULL, $6)` 42 updateUserSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5, NULL, $6)`
42 updateUserExtentSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5, 43 updateUserExtentSQL = `SELECT sys_admin.update_user($1, $2, $3, $4, $5,
43 ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10)` 44 ST_MakeBox2D(ST_Point($6, $7), ST_Point($8, $9)), $10)`
45
46 deleteUserSQL = `SELECT sys_admin.delete_user($1)`
44 ) 47 )
45 48
46 var ( 49 var (
47 // https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression 50 // https://stackoverflow.com/questions/201323/how-to-validate-an-email-address-using-a-regular-expression
48 emailRe = regexp.MustCompile( 51 emailRe = regexp.MustCompile(
115 } 118 }
116 } 119 }
117 return errNoValidRole 120 return errNoValidRole
118 } 121 }
119 122
123 func deleteUser(
124 rw http.ResponseWriter, req *http.Request,
125 input interface{}, db *sql.DB,
126 ) (jr JSONResult, err error) {
127
128 user := mux.Vars(req)["user"]
129 if user == "" {
130 err = JSONError{http.StatusBadRequest, "error: user empty"}
131 return
132 }
133
134 session, _ := auth.GetSession(req)
135 if session.User == user {
136 err = JSONError{http.StatusBadRequest, "error: cannot delete yourself"}
137 return
138 }
139
140 if _, err = db.Exec(deleteUserSQL, user); err != nil {
141 return
142 }
143
144 // Running in a go routine should not be necessary.
145 go func() { auth.ConnPool.Logout(user) }()
146
147 jr = JSONResult{Code: http.StatusNoContent}
148 return
149 }
150
120 func updateUser( 151 func updateUser(
121 rw http.ResponseWriter, req *http.Request, 152 rw http.ResponseWriter, req *http.Request,
122 input interface{}, 153 input interface{}, db *sql.DB,
123 db *sql.DB,
124 ) (jr JSONResult, err error) { 154 ) (jr JSONResult, err error) {
125 155
126 user := mux.Vars(req)["user"] 156 user := mux.Vars(req)["user"]
127 if user == "" { 157 if user == "" {
128 err = JSONError{http.StatusBadRequest, "error: user empty"} 158 err = JSONError{http.StatusBadRequest, "error: user empty"}
170 return 200 return
171 } 201 }
172 202
173 func createUser( 203 func createUser(
174 rw http.ResponseWriter, req *http.Request, 204 rw http.ResponseWriter, req *http.Request,
175 input interface{}, 205 input interface{}, db *sql.DB,
176 db *sql.DB,
177 ) (jr JSONResult, err error) { 206 ) (jr JSONResult, err error) {
178 207
179 user := input.(*User) 208 user := input.(*User)
180 209
181 if user.Extent == nil { 210 if user.Extent == nil {