comparison cmd/tokenserver/token.go @ 186:fe3a88f00b0a

Experimental user creation support.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 19 Jul 2018 18:33:52 +0200
parents
children
comparison
equal deleted inserted replaced
185:a9d9c2b1d08c 186:fe3a88f00b0a
1 package main
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 }