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