From 79db2da35d2967df71aca3c29c28b3157122cd5a Mon Sep 17 00:00:00 2001 From: Jonni Liljamo Date: Mon, 16 Oct 2023 21:42:10 +0300 Subject: [PATCH] feat: ability add new users as admin --- components/manageadmin.templ | 14 +++++++-- components/manageadmin_templ.go | 38 +++++++++++++++++------- felu.go | 2 ++ handlers/users.go | 52 +++++++++++++++++++++++++++++++++ static/styles.css | 5 ++++ 5 files changed, 98 insertions(+), 13 deletions(-) create mode 100644 handlers/users.go diff --git a/components/manageadmin.templ b/components/manageadmin.templ index 9ef88f5..eca8707 100644 --- a/components/manageadmin.templ +++ b/components/manageadmin.templ @@ -15,10 +15,18 @@ templ ManageAdmin() { templ ManageAdminUsers() { @ManageBase("ManageAdmin") { -
- list of users here, with also the ability to add new users +
+
+ + + + +
+ +
-
+ +
} } diff --git a/components/manageadmin_templ.go b/components/manageadmin_templ.go index 0378848..6535597 100644 --- a/components/manageadmin_templ.go +++ b/components/manageadmin_templ.go @@ -103,16 +103,34 @@ func ManageAdminUsers() templ.Component { templBuffer = templ.GetBuffer() defer templ.ReleaseBuffer(templBuffer) } - _, err = templBuffer.WriteString("
") + _, err = templBuffer.WriteString("
") + _, err = templBuffer.WriteString("
") if err != nil { return err } @@ -140,12 +158,12 @@ func ManageAdminDomains() templ.Component { defer templ.ReleaseBuffer(templBuffer) } ctx = templ.InitializeContext(ctx) - var_10 := templ.GetChildren(ctx) - if var_10 == nil { - var_10 = templ.NopComponent + var_12 := templ.GetChildren(ctx) + if var_12 == nil { + var_12 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - var_11 := templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) { + var_13 := templ.ComponentFunc(func(ctx context.Context, w io.Writer) (err error) { templBuffer, templIsBuffer := w.(*bytes.Buffer) if !templIsBuffer { templBuffer = templ.GetBuffer() @@ -155,8 +173,8 @@ func ManageAdminDomains() templ.Component { if err != nil { return err } - var_12 := `list of all domains on the instance, with owner details and such` - _, err = templBuffer.WriteString(var_12) + var_14 := `list of all domains on the instance, with owner details and such` + _, err = templBuffer.WriteString(var_14) if err != nil { return err } @@ -169,7 +187,7 @@ func ManageAdminDomains() templ.Component { } return err }) - err = ManageBase("ManageAdmin").Render(templ.WithChildren(ctx, var_11), templBuffer) + err = ManageBase("ManageAdmin").Render(templ.WithChildren(ctx, var_13), templBuffer) if err != nil { return err } diff --git a/felu.go b/felu.go index e9d457e..97833fc 100644 --- a/felu.go +++ b/felu.go @@ -101,6 +101,8 @@ func setupFrontendRouter() *gin.Engine { manageAdmin.GET("/users", handlers.ManageAdminUsers()) manageAdmin.GET("/domains", handlers.ManageAdminDomains()) + manageAdmin.POST("/users", handlers.PostUser()) + manageAdmin.GET("/partials/users_list", handlers.AdminPartialsUsersList()) } diff --git a/handlers/users.go b/handlers/users.go new file mode 100644 index 0000000..1d7fb33 --- /dev/null +++ b/handlers/users.go @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2023 Jonni Liljamo + * + * This file is licensed under AGPL-3.0-or-later, see NOTICE and LICENSE for + * more information. + */ +package handlers + +import ( + "log" + "net/http" + + "git.src.quest/~skye/felu-ddns/db" + "github.com/gin-gonic/gin" +) + +type postUserData struct { + Email string `form:"email"` + InitialPwd string `form:"initial_pwd"` +} + +func PostUser() gin.HandlerFunc { + return func(c *gin.Context) { + data := &postUserData{} + if err := c.Bind(data); err != nil { + log.Printf("[felu] ERROR: Could not bind user data: %v", err) + c.String(http.StatusBadRequest, "Could not bind user data") + return + } + + if data.Email == "" { + c.String(http.StatusBadRequest, "Email can't be empty") + c.Abort() + return + } + if len(data.InitialPwd) < 10 { + c.String(http.StatusBadRequest, "Initial password should be at least 10 chars") + c.Abort() + return + } + + err := db.CreateUser(data.Email, data.InitialPwd) + if err != nil { + // FIXME: Handle better + c.String(http.StatusInternalServerError, "Something went wrong while creating a new user") + c.Abort() + return + } + + c.Header("HX-Trigger", "update-user-list") + } +} diff --git a/static/styles.css b/static/styles.css index 2c669b0..dbbf670 100644 --- a/static/styles.css +++ b/static/styles.css @@ -589,6 +589,11 @@ video { background-color: rgb(153 246 228 / var(--tw-bg-opacity)); } +.bg-yellow-200 { + --tw-bg-opacity: 1; + background-color: rgb(254 240 138 / var(--tw-bg-opacity)); +} + .p-1 { padding: 0.25rem; } -- 2.44.1