Mercurial > gemma
comparison controllers/token.go @ 226:63dd5216eee4
Refactored gemma server to be more REST-like.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 26 Jul 2018 12:24:30 +0200 |
parents | cmd/gemma/token.go@cd6ad5eaef8d |
children | 694f959ba3e7 |
comparison
equal
deleted
inserted
replaced
225:8b9cae6d3a21 | 226:63dd5216eee4 |
---|---|
1 package controllers | |
2 | |
3 import ( | |
4 "encoding/json" | |
5 "fmt" | |
6 "log" | |
7 "net/http" | |
8 | |
9 "gemma.intevation.de/gemma/auth" | |
10 ) | |
11 | |
12 func renew(rw http.ResponseWriter, req *http.Request) { | |
13 token, _ := auth.GetToken(req) | |
14 newToken, err := auth.ConnPool.Renew(token) | |
15 switch { | |
16 case err == auth.ErrNoSuchToken: | |
17 http.NotFound(rw, req) | |
18 return | |
19 case err != nil: | |
20 http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) | |
21 return | |
22 } | |
23 | |
24 session, _ := auth.GetSession(req) | |
25 | |
26 var result = struct { | |
27 Token string `json:"token"` | |
28 Expires int64 `json:"expires"` | |
29 User string `json:"user"` | |
30 Roles []string `json:"roles"` | |
31 }{ | |
32 Token: newToken, | |
33 Expires: session.ExpiresAt, | |
34 User: session.User, | |
35 Roles: session.Roles, | |
36 } | |
37 | |
38 rw.Header().Set("Content-Type", "text/plain") | |
39 if err := json.NewEncoder(rw).Encode(&result); err != nil { | |
40 log.Printf("error: %v\n", err) | |
41 } | |
42 } | |
43 | |
44 func logout(rw http.ResponseWriter, req *http.Request) { | |
45 token, _ := auth.GetToken(req) | |
46 deleted := auth.ConnPool.Delete(token) | |
47 if !deleted { | |
48 http.NotFound(rw, req) | |
49 return | |
50 } | |
51 rw.Header().Set("Content-Type", "text/plain") | |
52 fmt.Fprintln(rw, "token deleted") | |
53 } | |
54 | |
55 func token(rw http.ResponseWriter, req *http.Request) { | |
56 user := req.FormValue("user") | |
57 password := req.FormValue("password") | |
58 | |
59 token, session, err := auth.GenerateSession(user, password) | |
60 | |
61 if err != nil { | |
62 http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) | |
63 return | |
64 } | |
65 | |
66 var result = struct { | |
67 Token string `json:"token"` | |
68 Expires int64 `json:"expires"` | |
69 User string `json:"user"` | |
70 Roles []string `json:"roles"` | |
71 }{ | |
72 Token: token, | |
73 Expires: session.ExpiresAt, | |
74 User: session.User, | |
75 Roles: session.Roles, | |
76 } | |
77 | |
78 rw.Header().Set("Content-Type", "application/json") | |
79 if err := json.NewEncoder(rw).Encode(&result); err != nil { | |
80 log.Printf("error: %v\n", err) | |
81 } | |
82 } |