aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2024-12-11 17:20:39 +0100
committerGabriel A. Giovanini <mail@gabrielgio.me>2024-12-11 17:20:39 +0100
commitf5c307668c7fa3c367defc6e924d7c1e00303c16 (patch)
treec1de4e00504e6c570204852a6752e11938cb2c0c
parent1e45ae2ea3497958b2ea6a20137955cfc3bbc964 (diff)
downloadcerrado-f5c307668c7fa3c367defc6e924d7c1e00303c16.tar.gz
cerrado-f5c307668c7fa3c367defc6e924d7c1e00303c16.tar.bz2
cerrado-f5c307668c7fa3c367defc6e924d7c1e00303c16.zip
feat: Add login redirect
Now login will return to page before the user clicked on login
-rw-r--r--pkg/handler/auth/login.go14
-rw-r--r--templates/login.qtpl5
-rw-r--r--templates/login.qtpl.go153
3 files changed, 104 insertions, 68 deletions
diff --git a/pkg/handler/auth/login.go b/pkg/handler/auth/login.go
index 7014548..89fd87b 100644
--- a/pkg/handler/auth/login.go
+++ b/pkg/handler/auth/login.go
@@ -45,10 +45,19 @@ func (g *LoginHandler) Logout(w http.ResponseWriter, r *http.Request) error {
}
func (g *LoginHandler) Login(w http.ResponseWriter, r *http.Request) error {
+ referer := r.URL.Query().Get("referer")
+
+ // if query value is empty tries to get from header
+ if referer == "" {
+ referer = r.Header.Get("Referer")
+ }
+
if r.Method == "GET" {
ext.SetHTML(w)
- login := &templates.LoginPage{}
+ login := &templates.LoginPage{
+ Referer: referer,
+ }
templates.WritePageTemplate(w, login, r.Context())
} else if r.Method == "POST" {
@@ -57,6 +66,7 @@ func (g *LoginHandler) Login(w http.ResponseWriter, r *http.Request) error {
if !g.auth.CheckAuth(username, password) {
login := &templates.LoginPage{
+ Referer: referer,
ErrorMessage: "Invalid login",
}
templates.WritePageTemplate(w, login, r.Context())
@@ -78,7 +88,7 @@ func (g *LoginHandler) Login(w http.ResponseWriter, r *http.Request) error {
}
http.SetCookie(w, cookie)
- ext.Redirect(w, "/")
+ ext.Redirect(w, referer)
}
}
diff --git a/templates/login.qtpl b/templates/login.qtpl
index 7815bd7..efaf329 100644
--- a/templates/login.qtpl
+++ b/templates/login.qtpl
@@ -2,6 +2,7 @@
{% code
type LoginPage struct {
+ Referer string
ErrorMessage string
}
%}
@@ -13,7 +14,11 @@ type LoginPage struct {
{% func (p *LoginPage) Content(ctx context.Context) %}
<div class="row">
<div class="col-md-6 offset-md-3">
+ {% if p.Referer == "" %}
<form action="/login/" method="POST">
+ {% else %}
+ <form action="/login/?referer={%s p.Referer %}" method="POST">
+ {% endif %}
<div class="form-group m-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" name="username" id="username">
diff --git a/templates/login.qtpl.go b/templates/login.qtpl.go
index 5c07a44..1a1b6d7 100644
--- a/templates/login.qtpl.go
+++ b/templates/login.qtpl.go
@@ -22,82 +22,103 @@ var (
//line templates/login.qtpl:4
type LoginPage struct {
+ Referer string
ErrorMessage string
}
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
func (p *LoginPage) StreamTitle(qw422016 *qt422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
qw422016.N().S(`Hello`)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
}
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
func (p *LoginPage) WriteTitle(qq422016 qtio422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
qw422016 := qt422016.AcquireWriter(qq422016)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
p.StreamTitle(qw422016, ctx)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
qt422016.ReleaseWriter(qw422016)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
}
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
func (p *LoginPage) Title(ctx context.Context) string {
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
qb422016 := qt422016.AcquireByteBuffer()
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
p.WriteTitle(qb422016, ctx)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
qs422016 := string(qb422016.B)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
qt422016.ReleaseByteBuffer(qb422016)
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
return qs422016
-//line templates/login.qtpl:9
+//line templates/login.qtpl:10
}
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
func (p *LoginPage) StreamNavbar(qw422016 *qt422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
StreamNavbar(qw422016, ctx, Login)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
}
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
func (p *LoginPage) WriteNavbar(qq422016 qtio422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
qw422016 := qt422016.AcquireWriter(qq422016)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
p.StreamNavbar(qw422016, ctx)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
qt422016.ReleaseWriter(qw422016)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
}
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
func (p *LoginPage) Navbar(ctx context.Context) string {
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
qb422016 := qt422016.AcquireByteBuffer()
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
p.WriteNavbar(qb422016, ctx)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
qs422016 := string(qb422016.B)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
qt422016.ReleaseByteBuffer(qb422016)
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
return qs422016
-//line templates/login.qtpl:11
+//line templates/login.qtpl:12
}
-//line templates/login.qtpl:13
+//line templates/login.qtpl:14
func (p *LoginPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:13
+//line templates/login.qtpl:14
qw422016.N().S(`
<div class="row">
<div class="col-md-6 offset-md-3">
+ `)
+//line templates/login.qtpl:17
+ if p.Referer == "" {
+//line templates/login.qtpl:17
+ qw422016.N().S(`
<form action="/login/" method="POST">
+ `)
+//line templates/login.qtpl:19
+ } else {
+//line templates/login.qtpl:19
+ qw422016.N().S(`
+ <form action="/login/?referer=`)
+//line templates/login.qtpl:20
+ qw422016.E().S(p.Referer)
+//line templates/login.qtpl:20
+ qw422016.N().S(`" method="POST">
+ `)
+//line templates/login.qtpl:21
+ }
+//line templates/login.qtpl:21
+ qw422016.N().S(`
<div class="form-group m-3">
<label for="username" class="form-label">Username</label>
<input type="text" class="form-control" name="username" id="username">
@@ -112,85 +133,85 @@ func (p *LoginPage) StreamContent(qw422016 *qt422016.Writer, ctx context.Context
</form>
</div>
`)
-//line templates/login.qtpl:30
+//line templates/login.qtpl:35
if p.ErrorMessage != "" {
-//line templates/login.qtpl:30
+//line templates/login.qtpl:35
qw422016.N().S(`
<div class="col-md-6 offset-md-3">
<div class="alert alert-warning text-center" >
`)
-//line templates/login.qtpl:33
+//line templates/login.qtpl:38
qw422016.E().S(p.ErrorMessage)
-//line templates/login.qtpl:33
+//line templates/login.qtpl:38
qw422016.N().S(`
</div>
</div>
`)
-//line templates/login.qtpl:36
+//line templates/login.qtpl:41
}
-//line templates/login.qtpl:36
+//line templates/login.qtpl:41
qw422016.N().S(`
</div>
`)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
}
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
func (p *LoginPage) WriteContent(qq422016 qtio422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
qw422016 := qt422016.AcquireWriter(qq422016)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
p.StreamContent(qw422016, ctx)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
qt422016.ReleaseWriter(qw422016)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
}
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
func (p *LoginPage) Content(ctx context.Context) string {
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
qb422016 := qt422016.AcquireByteBuffer()
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
p.WriteContent(qb422016, ctx)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
qs422016 := string(qb422016.B)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
qt422016.ReleaseByteBuffer(qb422016)
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
return qs422016
-//line templates/login.qtpl:38
+//line templates/login.qtpl:43
}
-//line templates/login.qtpl:40
+//line templates/login.qtpl:45
func (p *LoginPage) StreamScript(qw422016 *qt422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:40
+//line templates/login.qtpl:45
qw422016.N().S(`
`)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
}
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
func (p *LoginPage) WriteScript(qq422016 qtio422016.Writer, ctx context.Context) {
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
qw422016 := qt422016.AcquireWriter(qq422016)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
p.StreamScript(qw422016, ctx)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
qt422016.ReleaseWriter(qw422016)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
}
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
func (p *LoginPage) Script(ctx context.Context) string {
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
qb422016 := qt422016.AcquireByteBuffer()
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
p.WriteScript(qb422016, ctx)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
qs422016 := string(qb422016.B)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
qt422016.ReleaseByteBuffer(qb422016)
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
return qs422016
-//line templates/login.qtpl:41
+//line templates/login.qtpl:46
}