Mercurial > gemma
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 } |