diff --git a/login/form.go b/login/form.go index 5729ef3..f35f325 100644 --- a/login/form.go +++ b/login/form.go @@ -12,6 +12,9 @@ type loginForm struct { // after a successfull login returnURL string + // loginURL is the URL the login form will POST to + loginURL string + // errorMessage is an optional error message to display in the login form errorMessage string @@ -32,6 +35,7 @@ func (form loginForm) ServeHTTP(w http.ResponseWriter, r *http.Request) { err = tmpl.Execute(w, map[string]interface{}{ "ErrorMessage": form.errorMessage, "ReturnURL": form.returnURL, + "LoginURL": form.loginURL, "CSRFToken": form.csrfToken, }) if err != nil { diff --git a/login/form_test.go b/login/form_test.go index bb9f634..22160a1 100644 --- a/login/form_test.go +++ b/login/form_test.go @@ -14,6 +14,7 @@ import ( func Test_loginForm_ServeHTTP(t *testing.T) { type fields struct { returnURL string + loginURL string errorMessage string fs fs.FS } @@ -58,10 +59,11 @@ func Test_loginForm_ServeHTTP(t *testing.T) { }, }, fields: fields{ - fs: &mockFS{File: &mockFile{content: "test"}}, + fs: &mockFS{File: &mockFile{content: "{{.LoginURL}}"}}, + loginURL: "/test", }, wantCode: http.StatusOK, - wantBody: "test", + wantBody: "/test", }, { name: "valid template with error while writing", @@ -82,6 +84,7 @@ func Test_loginForm_ServeHTTP(t *testing.T) { t.Run(tt.name, func(t *testing.T) { form := loginForm{ returnURL: tt.fields.returnURL, + loginURL: tt.fields.loginURL, errorMessage: tt.fields.errorMessage, fs: tt.fields.fs, } diff --git a/login/login.go b/login/login.go index be2d0dc..4a6c10c 100644 --- a/login/login.go +++ b/login/login.go @@ -191,7 +191,12 @@ func (h *handler) doLoginGet(w http.ResponseWriter, r *http.Request) { session = h.extractSession(w, r) // Prepare the login form. We are using a masked CSRF token for each request - form = loginForm{returnURL: returnURL, fs: h.files, csrfToken: csrf.Mask(session.CSRFToken)} + form = loginForm{ + returnURL: returnURL, + loginURL: path.Join(h.baseURL, "/login"), + fs: h.files, + csrfToken: csrf.Mask(session.CSRFToken), + } // Check, if we have an additional failure message if r.URL.Query().Has("failed") { diff --git a/login/login.html b/login/login.html index 259812a..d7177b3 100644 --- a/login/login.html +++ b/login/login.html @@ -54,7 +54,7 @@ {{if .ErrorMessage}}
{{.ErrorMessage}}
{{end}} -
+