annotate cmd/tokenserver/main.go @ 200:8426a92fda00

Persistent session store: Implmented Renew.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 22 Jul 2018 09:25:25 +0200
parents fe3a88f00b0a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package main
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import (
151
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
4 "context"
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 "flag"
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 "fmt"
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 "log"
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8 "net/http"
151
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
9 "os"
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
10 "os/signal"
3
1597506a2241 merge with vue-cli
Thomas Junk <thomas.junk@intevation.de>
parents: 2
diff changeset
11 "path/filepath"
151
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
12 "syscall"
2
9c6f68a8e8b2 Demo generation of tokens.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 1
diff changeset
13
125
a98a282f00e1 Wired token generator and connection pool to token server.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 15
diff changeset
14 "gemma.intevation.de/gemma/auth"
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 )
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
128
441a8ee637c5 Added claims checker + example.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 127
diff changeset
17 func sysAdmin(rw http.ResponseWriter, req *http.Request) {
134
0c56c56a1c44 Removed the JWT layer from the session management.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
18 session, _ := auth.GetSession(req)
128
441a8ee637c5 Added claims checker + example.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 127
diff changeset
19 rw.Header().Set("Content-Type", "text/plain")
134
0c56c56a1c44 Removed the JWT layer from the session management.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
20 fmt.Fprintf(rw, "%s is a sys_admin\n", session.User)
128
441a8ee637c5 Added claims checker + example.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 127
diff changeset
21 }
441a8ee637c5 Added claims checker + example.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 127
diff changeset
22
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 func main() {
3
1597506a2241 merge with vue-cli
Thomas Junk <thomas.junk@intevation.de>
parents: 2
diff changeset
24 port := flag.Int("port", 8000, "port to listen at.")
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 host := flag.String("host", "localhost", "host to listen at.")
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 flag.Parse()
3
1597506a2241 merge with vue-cli
Thomas Junk <thomas.junk@intevation.de>
parents: 2
diff changeset
27 p, _ := filepath.Abs("./web")
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 mux := http.NewServeMux()
3
1597506a2241 merge with vue-cli
Thomas Junk <thomas.junk@intevation.de>
parents: 2
diff changeset
29 mux.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir(p))))
15
05d828374256 Reverted to previous setup of /api prefixing only the token route
Thomas Junk <thomas.junk@intevation.de>
parents: 14
diff changeset
30 mux.HandleFunc("/api/token", token)
134
0c56c56a1c44 Removed the JWT layer from the session management.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
31 mux.Handle("/api/logout", auth.SessionMiddleware(http.HandlerFunc(token)))
0c56c56a1c44 Removed the JWT layer from the session management.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
32 mux.Handle("/api/renew", auth.SessionMiddleware(http.HandlerFunc(renew)))
128
441a8ee637c5 Added claims checker + example.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 127
diff changeset
33 mux.Handle("/api/sys_admin",
134
0c56c56a1c44 Removed the JWT layer from the session management.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
34 auth.SessionMiddleware(
0c56c56a1c44 Removed the JWT layer from the session management.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 128
diff changeset
35 auth.SessionChecker(http.HandlerFunc(sysAdmin), auth.HasRole("sys_admin"))))
186
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 151
diff changeset
36 mux.Handle("/api/create_user",
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 151
diff changeset
37 auth.SessionMiddleware(
fe3a88f00b0a Experimental user creation support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 151
diff changeset
38 auth.SessionChecker(http.HandlerFunc(createUser), auth.HasRole("sys_admin"))))
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 addr := fmt.Sprintf("%s:%d", *host, *port)
151
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
41
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
42 server := http.Server{Addr: addr, Handler: mux}
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
43
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
44 done := make(chan error)
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
45
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
46 go func() {
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
47 defer close(done)
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
48 done <- server.ListenAndServe()
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
49 }()
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
50
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
51 sigChan := make(chan os.Signal)
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
52 signal.Notify(sigChan, os.Interrupt, os.Kill, syscall.SIGTERM)
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
53
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
54 select {
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
55 case err := <-done:
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
56 if err != nil && err != http.ErrServerClosed {
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
57 log.Fatalf("error: %v\n", err)
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
58 }
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
59 case <-sigChan:
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
60 }
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
61
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
62 server.Shutdown(context.Background())
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
63
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
64 <-done
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
65
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
66 if err := auth.ConnPool.Shutdown(); err != nil {
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
67 log.Fatalf("error: %v\n", err)
3349bfc2a047 Shutdown server gracefully.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 134
diff changeset
68 }
1
0e1d0c00bc74 Useless webserver to test go-gettablity.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 }