func (a *GraphicalAuthDecorator) RegisterRoutes(mux *bone.Mux) error { tmpl, err := template.ParseFiles( a.uiDir+"/templates/login.html", a.uiDir+"/templates/layout.html", ) if err != nil { return err } fileserver := http.FileServer(http.Dir(a.uiDir + "/static/")) mux.Get("/_static/", http.StripPrefix("/_static/", fileserver)) mux.GetFunc(a.config.GraphicalConfig.LoginRoute, func(res http.ResponseWriter, req *http.Request) { result := LoginResult{} if len(req.URL.Query()["redirect"]) > 0 { result.Redirect = req.URL.Query()["redirect"][0] } err := tmpl.ExecuteTemplate(res, "layout", &result) if err != nil { res.WriteHeader(http.StatusInternalServerError) res.Write([]byte(err.Error())) } }) mux.PostFunc("/_gateway/authenticate", func(res http.ResponseWriter, req *http.Request) { username := req.PostFormValue("username") password := req.PostFormValue("password") redirect := req.PostFormValue("redirect") result := LoginResult{Redirect: redirect} if username == "" { result.Errors.UserEmpty = true } if password == "" { result.Errors.PasswordEmpty = true } if result.HasErrors() { tmpl.ExecuteTemplate(res, "layout", &result) return } token, err := a.authHandler.Authenticate(username, password) if err != nil { result.Errors.InvalidCredentials = true res.WriteHeader(http.StatusUnauthorized) tmpl.ExecuteTemplate(res, "layout", &result) return } a.authHandler.storage.WriteToken(res, token) if redirect != "" { res.Header().Set("Location", redirect) res.WriteHeader(303) res.Write([]byte("Successfully authenticated. Redirecting to original request.")) } else { res.Write([]byte("Hello.")) } }) return nil }