comparison pkg/controllers/token.go @ 414:c1047fd04a3a

Moved project specific Go packages to new pkg folder.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 15 Aug 2018 17:30:50 +0200
parents controllers/token.go@154e0f5bff0a
children c70ddc6eb168
comparison
equal deleted inserted replaced
413:a9440a4826aa 414:c1047fd04a3a
1 package controllers
2
3 import (
4 "encoding/json"
5 "fmt"
6 "log"
7 "net/http"
8
9 "gemma.intevation.de/gemma/pkg/auth"
10 )
11
12 func sendJSON(rw http.ResponseWriter, data interface{}) {
13 rw.Header().Set("Content-Type", "application/json")
14 if err := json.NewEncoder(rw).Encode(data); err != nil {
15 log.Printf("error: %v\n", err)
16 }
17 }
18
19 func renew(rw http.ResponseWriter, req *http.Request) {
20 token, _ := auth.GetToken(req)
21 newToken, err := auth.ConnPool.Renew(token)
22 switch {
23 case err == auth.ErrNoSuchToken:
24 http.NotFound(rw, req)
25 return
26 case err != nil:
27 http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError)
28 return
29 }
30
31 session, _ := auth.GetSession(req)
32
33 var result = struct {
34 Token string `json:"token"`
35 Expires int64 `json:"expires"`
36 User string `json:"user"`
37 Roles []string `json:"roles"`
38 }{
39 Token: newToken,
40 Expires: session.ExpiresAt,
41 User: session.User,
42 Roles: session.Roles,
43 }
44
45 sendJSON(rw, &result)
46 }
47
48 func logout(rw http.ResponseWriter, req *http.Request) {
49 token, _ := auth.GetToken(req)
50 deleted := auth.ConnPool.Delete(token)
51 if !deleted {
52 http.NotFound(rw, req)
53 return
54 }
55 rw.Header().Set("Content-Type", "text/plain")
56 fmt.Fprintln(rw, "token deleted")
57 }
58
59 func login(rw http.ResponseWriter, req *http.Request) {
60
61 var (
62 user = req.FormValue("user")
63 password = req.FormValue("password")
64 )
65
66 if user == "" || password == "" {
67 http.Error(rw, "Invalid credentials", http.StatusBadRequest)
68 return
69 }
70
71 token, session, err := auth.GenerateSession(user, password)
72 if err != nil {
73 http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusUnauthorized)
74 return
75 }
76
77 var result = struct {
78 Token string `json:"token"`
79 Expires int64 `json:"expires"`
80 User string `json:"user"`
81 Roles []string `json:"roles"`
82 }{
83 Token: token,
84 Expires: session.ExpiresAt,
85 User: session.User,
86 Roles: session.Roles,
87 }
88
89 sendJSON(rw, &result)
90 }