Mercurial > gemma
view controllers/token.go @ 242:24eb518b0394
/users delete should be handled by HTTP DELETE not PUT.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 26 Jul 2018 18:22:40 +0200 |
parents | 694f959ba3e7 |
children | a42f55ea0a20 |
line wrap: on
line source
package controllers import ( "encoding/json" "fmt" "log" "net/http" "gemma.intevation.de/gemma/auth" ) func renew(rw http.ResponseWriter, req *http.Request) { token, _ := auth.GetToken(req) newToken, err := auth.ConnPool.Renew(token) switch { case err == auth.ErrNoSuchToken: http.NotFound(rw, req) return case err != nil: http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) return } session, _ := auth.GetSession(req) var result = struct { Token string `json:"token"` Expires int64 `json:"expires"` User string `json:"user"` Roles []string `json:"roles"` }{ Token: newToken, Expires: session.ExpiresAt, User: session.User, Roles: session.Roles, } rw.Header().Set("Content-Type", "text/plain") if err := json.NewEncoder(rw).Encode(&result); err != nil { log.Printf("error: %v\n", err) } } func logout(rw http.ResponseWriter, req *http.Request) { token, _ := auth.GetToken(req) deleted := auth.ConnPool.Delete(token) if !deleted { http.NotFound(rw, req) return } rw.Header().Set("Content-Type", "text/plain") fmt.Fprintln(rw, "token deleted") } func login(rw http.ResponseWriter, req *http.Request) { user := req.FormValue("user") password := req.FormValue("password") token, session, err := auth.GenerateSession(user, password) if err != nil { http.Error(rw, fmt.Sprintf("error: %v", err), http.StatusInternalServerError) return } var result = struct { Token string `json:"token"` Expires int64 `json:"expires"` User string `json:"user"` Roles []string `json:"roles"` }{ Token: token, Expires: session.ExpiresAt, User: session.User, Roles: session.Roles, } rw.Header().Set("Content-Type", "application/json") if err := json.NewEncoder(rw).Encode(&result); err != nil { log.Printf("error: %v\n", err) } }