From 125a59713de79c5c8f606556dce9660df71e4ad5 Mon Sep 17 00:00:00 2001 From: Kevin Lint Date: Tue, 19 Jan 2021 15:13:16 -0800 Subject: [PATCH] feat: style login redirect page - [ch1400] --- internal/loginsrv/server.go | 172 +++++++++++++++++++++++++++++++++++- 1 file changed, 170 insertions(+), 2 deletions(-) diff --git a/internal/loginsrv/server.go b/internal/loginsrv/server.go index 4add3775..e401f07f 100644 --- a/internal/loginsrv/server.go +++ b/internal/loginsrv/server.go @@ -1,8 +1,10 @@ package loginsrv import ( + "bytes" "fmt" "net/http" + "text/template" ) // Server waits for the login callback to send the session token. @@ -10,13 +12,178 @@ type Server struct { TokenChan chan<- string } +func loginRedirectHTMLDoc(message string, status string) string { + htmlTemplate := ` + + + + + + + + +
+ +
+ +
+

{{.Message}}

+
+ + ` + + params := make(map[string]interface{}) + params["Message"] = message + params["Status"] = status + var tpl bytes.Buffer + t, err := template.New("htmlTemplate").Parse(htmlTemplate) + if err != nil { + return err.Error() + } + if err := t.Execute(&tpl, params); err != nil { + return err.Error() + } + result := tpl.String() + return result +} + func (srv *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { ctx := req.Context() token := req.URL.Query().Get("session_token") if token == "" { w.WriteHeader(http.StatusBadRequest) - _, _ = fmt.Fprintf(w, "No session_token found.\n") // Best effort. + _, _ = fmt.Fprint(w, loginRedirectHTMLDoc("No session_token found.", "off")) return } @@ -24,7 +191,8 @@ func (srv *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) { case <-ctx.Done(): // Client disconnect. Nothing to do. case srv.TokenChan <- token: + w.Header().Set("Content-Type", "text/html") w.WriteHeader(http.StatusOK) - _, _ = fmt.Fprintf(w, "You may close this window now.\n") // Best effort. + _, _ = fmt.Fprint(w, loginRedirectHTMLDoc("You are logged in, you may close this window now.", "on")) } }