aboutsummaryrefslogtreecommitdiff
path: root/pkg/view/auth.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/view/auth.go')
-rw-r--r--pkg/view/auth.go97
1 files changed, 97 insertions, 0 deletions
diff --git a/pkg/view/auth.go b/pkg/view/auth.go
new file mode 100644
index 0000000..5c83eba
--- /dev/null
+++ b/pkg/view/auth.go
@@ -0,0 +1,97 @@
+package view
+
+import (
+ "encoding/base64"
+
+ "github.com/valyala/fasthttp"
+
+ "git.sr.ht/~gabrielgio/img"
+ "git.sr.ht/~gabrielgio/img/pkg/components/auth"
+ "git.sr.ht/~gabrielgio/img/pkg/ext"
+)
+
+type AuthView struct {
+ userController *auth.Controller
+}
+
+func NewAuthView(userController *auth.Controller) *AuthView {
+ return &AuthView{
+ userController: userController,
+ }
+}
+
+func (v *AuthView) LoginView(ctx *fasthttp.RequestCtx) error {
+ return img.Render[interface{}](ctx, "login.html", nil)
+}
+
+func (v *AuthView) Logout(ctx *fasthttp.RequestCtx) error {
+ cook := fasthttp.Cookie{}
+ cook.SetKey("auth")
+ cook.SetValue("")
+ cook.SetMaxAge(-1)
+ cook.SetHTTPOnly(true)
+ cook.SetSameSite(fasthttp.CookieSameSiteDefaultMode)
+ ctx.Response.Header.SetCookie(&cook)
+
+ ctx.Redirect("/", 307)
+ return nil
+}
+
+func (v *AuthView) Login(ctx *fasthttp.RequestCtx) error {
+ username := ctx.FormValue("username")
+ password := ctx.FormValue("password")
+
+ auth, err := v.userController.Login(ctx, username, password)
+ if err != nil {
+ return err
+ }
+
+ base64Auth := base64.StdEncoding.EncodeToString(auth)
+
+ cook := fasthttp.Cookie{}
+ cook.SetKey("auth")
+ cook.SetValue(base64Auth)
+ cook.SetHTTPOnly(true)
+ cook.SetSameSite(fasthttp.CookieSameSiteDefaultMode)
+ ctx.Response.Header.SetCookie(&cook)
+
+ redirect := string(ctx.FormValue("redirect"))
+ if redirect == "" {
+ ctx.Redirect("/", 307)
+ } else {
+ ctx.Redirect(redirect, 307)
+ }
+ return nil
+}
+
+func (v *AuthView) RegisterView(ctx *fasthttp.RequestCtx) error {
+ return img.Render[interface{}](ctx, "register.html", nil)
+}
+
+func (v *AuthView) Register(ctx *fasthttp.RequestCtx) error {
+ username := ctx.FormValue("username")
+ password := ctx.FormValue("password")
+
+ err := v.userController.Register(ctx, username, password)
+ if err != nil {
+ return err
+ }
+
+ ctx.Redirect("/login", 307)
+ return nil
+}
+
+func Index(ctx *fasthttp.RequestCtx) {
+ ctx.Redirect("/login", 307)
+}
+
+func (v *AuthView) SetMyselfIn(r *ext.Router) {
+ r.GET("/login", v.LoginView)
+ r.POST("/login", v.Login)
+
+ r.GET("/register", v.RegisterView)
+ r.POST("/register", v.Register)
+
+ r.GET("/logout", v.Logout)
+ r.POST("/logout", v.Logout)
+}