Mercurial > gemma
view cmd/tokenserver/main.go @ 126:89cf2e7672ff
Implemented an explicit token deletion under endpoint /api/logout.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 28 Jun 2018 13:09:38 +0200 |
parents | a98a282f00e1 |
children | 44794c641277 |
line wrap: on
line source
package main import ( "flag" "fmt" "log" "net/http" "path/filepath" "gemma.intevation.de/gemma/auth" ) func logout(rw http.ResponseWriter, req *http.Request) { token, _ := auth.GetToken(req) deleted := auth.ConnPool.Delete(token) if !deleted { http.NotFound(rw, req) } rw.Header().Set("Content-Type", "text/plain") fmt.Fprintln(rw, "token deleted") } func token(rw http.ResponseWriter, req *http.Request) { user := req.FormValue("user") password := req.FormValue("password") token, err := auth.GenerateToken(user, password) if err != nil { http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) return } rw.Header().Set("Content-Type", "text/plain") fmt.Fprintf(rw, "%s\n", token) } func main() { port := flag.Int("port", 8000, "port to listen at.") host := flag.String("host", "localhost", "host to listen at.") flag.Parse() p, _ := filepath.Abs("./web") mux := http.NewServeMux() mux.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir(p)))) mux.HandleFunc("/api/token", token) mux.Handle("/api/logout", auth.JWTMiddleware(http.HandlerFunc(token))) addr := fmt.Sprintf("%s:%d", *host, *port) log.Fatalln(http.ListenAndServe(addr, mux)) }