comparison pkg/controllers/user.go @ 822:8926c413db21

Started implementation of test mail end point. This is intended to test the sending of system notification emails. TODO: more sensible content.
author Sascha Wilde <wilde@intevation.de>
date Thu, 27 Sep 2018 18:52:41 +0200
parents 8a0737aa6ab6
children f3adc0f3a20a
comparison
equal deleted inserted replaced
821:d32516051d08 822:8926c413db21
6 "net/http" 6 "net/http"
7 7
8 "github.com/gorilla/mux" 8 "github.com/gorilla/mux"
9 9
10 "gemma.intevation.de/gemma/pkg/auth" 10 "gemma.intevation.de/gemma/pkg/auth"
11 "gemma.intevation.de/gemma/pkg/misc"
11 "gemma.intevation.de/gemma/pkg/models" 12 "gemma.intevation.de/gemma/pkg/models"
12 ) 13 )
13 14
14 const ( 15 const (
15 createUserSQL = `INSERT INTO users.list_users 16 createUserSQL = `INSERT INTO users.list_users
294 } 295 }
295 296
296 jr.Result = result 297 jr.Result = result
297 return 298 return
298 } 299 }
300
301 func sendTestMail(
302 _ interface{},
303 req *http.Request,
304 db *sql.Conn,
305 ) (jr JSONResult, err error) {
306
307 user := models.UserName(mux.Vars(req)["user"])
308 if !user.IsValid() {
309 err = JSONError{http.StatusBadRequest, "error: user invalid"}
310 return
311 }
312
313 userData := &models.User{
314 User: user,
315 Extent: &models.BoundingBox{},
316 }
317
318 err = db.QueryRowContext(req.Context(), listUserSQL, user).Scan(
319 &userData.Role,
320 &userData.Country,
321 &userData.Email,
322 &userData.Extent.X1, &userData.Extent.Y1,
323 &userData.Extent.X2, &userData.Extent.Y2,
324 )
325
326 switch {
327 case err == sql.ErrNoRows:
328 err = JSONError{
329 Code: http.StatusNotFound,
330 Message: fmt.Sprintf("Cannot find user %s.", user),
331 }
332 return
333 case err != nil:
334 return
335 }
336
337 var body string
338
339 if userData.Role == "sys_admin" {
340 body = "Test for Sys Admin Notification"
341 } else if userData.Role == "waterway_admin" {
342 body = "Test for Water Way Admin Notification"
343 } else {
344 err = JSONError{
345 Code: http.StatusBadRequest,
346 Message: "Test mails can only be generated for admin roles.",
347 }
348 return
349 }
350 err = misc.SendMail(string(userData.Email), "Test Email", body)
351 if err != nil {
352 return
353 }
354
355 jr.Result = &struct {
356 Message string `json:"message"`
357 }{"Sending test mail."}
358
359 return
360 }