comparison pkg/controllers/user.go @ 486:b2dc9c2f69e0 metamorph-for-all

First stab to use the metamorphic db to do all database stuff.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Fri, 24 Aug 2018 13:56:06 +0200
parents fc37e7072022
children 8a0737aa6ab6
comparison
equal deleted inserted replaced
485:7a8644e9e50e 486:b2dc9c2f69e0
52 WHERE username = $1` 52 WHERE username = $1`
53 ) 53 )
54 54
55 func deleteUser( 55 func deleteUser(
56 _ interface{}, req *http.Request, 56 _ interface{}, req *http.Request,
57 db *sql.DB, 57 db *sql.Conn,
58 ) (jr JSONResult, err error) { 58 ) (jr JSONResult, err error) {
59 59
60 user := mux.Vars(req)["user"] 60 user := mux.Vars(req)["user"]
61 if !models.UserName(user).IsValid() { 61 if !models.UserName(user).IsValid() {
62 err = JSONError{http.StatusBadRequest, "error: user invalid"} 62 err = JSONError{http.StatusBadRequest, "error: user invalid"}
69 return 69 return
70 } 70 }
71 71
72 var res sql.Result 72 var res sql.Result
73 73
74 if res, err = db.Exec(deleteUserSQL, user); err != nil { 74 if res, err = db.ExecContext(req.Context(), deleteUserSQL, user); err != nil {
75 return 75 return
76 } 76 }
77 77
78 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 { 78 if n, err2 := res.RowsAffected(); err2 == nil && n == 0 {
79 err = JSONError{ 79 err = JSONError{
89 jr = JSONResult{Code: http.StatusNoContent} 89 jr = JSONResult{Code: http.StatusNoContent}
90 return 90 return
91 } 91 }
92 92
93 func updateUser( 93 func updateUser(
94 input interface{}, req *http.Request, 94 input interface{},
95 db *sql.DB, 95 req *http.Request,
96 db *sql.Conn,
96 ) (jr JSONResult, err error) { 97 ) (jr JSONResult, err error) {
97 98
98 user := models.UserName(mux.Vars(req)["user"]) 99 user := models.UserName(mux.Vars(req)["user"])
99 if !user.IsValid() { 100 if !user.IsValid() {
100 err = JSONError{http.StatusBadRequest, "error: user invalid"} 101 err = JSONError{http.StatusBadRequest, "error: user invalid"}
104 newUser := input.(*models.User) 105 newUser := input.(*models.User)
105 var res sql.Result 106 var res sql.Result
106 107
107 if s, _ := auth.GetSession(req); s.Roles.Has("sys_admin") { 108 if s, _ := auth.GetSession(req); s.Roles.Has("sys_admin") {
108 if newUser.Extent == nil { 109 if newUser.Extent == nil {
109 res, err = db.Exec( 110 res, err = db.ExecContext(
111 req.Context(),
110 updateUserSQL, 112 updateUserSQL,
111 user, 113 user,
112 newUser.Role, 114 newUser.Role,
113 newUser.User, 115 newUser.User,
114 newUser.Password, 116 newUser.Password,
115 newUser.Country, 117 newUser.Country,
116 newUser.Email, 118 newUser.Email,
117 ) 119 )
118 } else { 120 } else {
119 res, err = db.Exec( 121 res, err = db.ExecContext(
122 req.Context(),
120 updateUserExtentSQL, 123 updateUserExtentSQL,
121 user, 124 user,
122 newUser.Role, 125 newUser.Role,
123 newUser.User, 126 newUser.User,
124 newUser.Password, 127 newUser.Password,
131 } else { 134 } else {
132 if newUser.Extent == nil { 135 if newUser.Extent == nil {
133 err = JSONError{http.StatusBadRequest, "extent is mandatory"} 136 err = JSONError{http.StatusBadRequest, "extent is mandatory"}
134 return 137 return
135 } 138 }
136 res, err = db.Exec( 139 res, err = db.ExecContext(
140 req.Context(),
137 updateUserUnprivSQL, 141 updateUserUnprivSQL,
138 user, 142 user,
139 newUser.Password, 143 newUser.Password,
140 newUser.Extent.X1, newUser.Extent.Y1, 144 newUser.Extent.X1, newUser.Extent.Y1,
141 newUser.Extent.X2, newUser.Extent.Y2, 145 newUser.Extent.X2, newUser.Extent.Y2,
168 } 172 }
169 return 173 return
170 } 174 }
171 175
172 func createUser( 176 func createUser(
173 input interface{}, req *http.Request, 177 input interface{},
174 db *sql.DB, 178 req *http.Request,
179 db *sql.Conn,
175 ) (jr JSONResult, err error) { 180 ) (jr JSONResult, err error) {
176 181
177 user := input.(*models.User) 182 user := input.(*models.User)
178 183
179 if user.Extent == nil { 184 if user.Extent == nil {
180 _, err = db.Exec( 185 _, err = db.ExecContext(
186 req.Context(),
181 createUserSQL, 187 createUserSQL,
182 user.Role, 188 user.Role,
183 user.User, 189 user.User,
184 user.Password, 190 user.Password,
185 user.Country, 191 user.Country,
186 user.Email, 192 user.Email,
187 ) 193 )
188 } else { 194 } else {
189 _, err = db.Exec( 195 _, err = db.ExecContext(
196 req.Context(),
190 createUserExtentSQL, 197 createUserExtentSQL,
191 user.Role, 198 user.Role,
192 user.User, 199 user.User,
193 user.Password, 200 user.Password,
194 user.Country, 201 user.Country,
210 } 217 }
211 return 218 return
212 } 219 }
213 220
214 func listUsers( 221 func listUsers(
215 _ interface{}, req *http.Request, 222 _ interface{},
216 db *sql.DB, 223 req *http.Request,
224 db *sql.Conn,
217 ) (jr JSONResult, err error) { 225 ) (jr JSONResult, err error) {
218 226
219 var rows *sql.Rows 227 var rows *sql.Rows
220 228
221 rows, err = db.Query(listUsersSQL) 229 rows, err = db.QueryContext(req.Context(), listUsersSQL)
222 if err != nil { 230 if err != nil {
223 return 231 return
224 } 232 }
225 defer rows.Close() 233 defer rows.Close()
226 234
248 } 256 }
249 return 257 return
250 } 258 }
251 259
252 func listUser( 260 func listUser(
253 _ interface{}, req *http.Request, 261 _ interface{},
254 db *sql.DB, 262 req *http.Request,
263 db *sql.Conn,
255 ) (jr JSONResult, err error) { 264 ) (jr JSONResult, err error) {
256 265
257 user := models.UserName(mux.Vars(req)["user"]) 266 user := models.UserName(mux.Vars(req)["user"])
258 if !user.IsValid() { 267 if !user.IsValid() {
259 err = JSONError{http.StatusBadRequest, "error: user invalid"} 268 err = JSONError{http.StatusBadRequest, "error: user invalid"}
263 result := &models.User{ 272 result := &models.User{
264 User: user, 273 User: user,
265 Extent: &models.BoundingBox{}, 274 Extent: &models.BoundingBox{},
266 } 275 }
267 276
268 err = db.QueryRow(listUserSQL, user).Scan( 277 err = db.QueryRowContext(req.Context(), listUserSQL, user).Scan(
269 &result.Role, 278 &result.Role,
270 &result.Country, 279 &result.Country,
271 &result.Email, 280 &result.Email,
272 &result.Extent.X1, &result.Extent.Y1, 281 &result.Extent.X1, &result.Extent.Y1,
273 &result.Extent.X2, &result.Extent.Y2, 282 &result.Extent.X2, &result.Extent.Y2,