Updated with the latest go-web-kit stuff, and also merged back some changes to that project.

master
Zed A. Shaw 1 month ago
parent acef212fc9
commit fdb328a1ff
  1. 106
      api/auth.go
  2. 2
      api/message.go
  3. 9
      data/crud.go
  4. 8
      views/layouts/main.html

@ -15,6 +15,55 @@ import (
. "MY/webapp/common"
)
func GetApiLogout(c *fiber.Ctx) error {
err := LogoutUser(c)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/")
}
func PostApiRegister(c *fiber.Ctx) error {
user, err := ReceivePost[data.User](c)
if err != nil { return IfErrNil(err, c) }
err = SetUserPassword(user)
if err != nil { return IfErrNil(err, c) }
sql, args, err := sq.Insert("user").
Columns("username", "email", "password").
Values(user.Username, user.Email, user.Password).ToSql()
_, err = data.Exec(err, sql, args...)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/login/")
}
func PostApiLogin(c *fiber.Ctx) error {
var user data.User
login, err := ReceivePost[data.Login](c)
if(err != nil) { return IfErrNil(err, c) }
pass_good, err := LoginUser(&user, login)
if err != nil { return IfErrNil(err, c) }
if pass_good {
sess, err := STORE.Get(c)
if err != nil { return IfErrNil(err, c) }
sess.Set("user_id", user.Id)
sess.Set("authenticated", true)
sess.Set("admin", IsAdmin(&user))
err = sess.Save()
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/")
} else {
return c.Redirect("/login/")
}
}
func IsAdmin(user *data.User) bool {
return user.Username == config.Settings.Admin
}
@ -27,7 +76,8 @@ func CheckAuthed(c *fiber.Ctx, needs_admin bool) (*session.Session, error) {
admin := sess.Get("admin") == true
authed := sess.Get("authenticated") == true
log.Printf("session admin=%v, session authed=%v, needs_admin = %v", admin, authed, needs_admin)
log.Printf("session admin=%v, session authed=%v, needs_admin = %v",
sess.Get("admin"), sess.Get("authenticated"), needs_admin)
if needs_admin {
authed = admin && authed
@ -46,7 +96,10 @@ func CheckAuthed(c *fiber.Ctx, needs_admin bool) (*session.Session, error) {
func LogoutUser(c *fiber.Ctx) error {
sess, err := STORE.Get(c)
if err != nil { return err }
sess.Reset()
err = sess.Destroy()
if err != nil { return err }
err = sess.Save()
return err
}
@ -73,52 +126,3 @@ func SetUserPassword(user *data.User) error {
user.Password = string(hashed)
return nil
}
func GetApiLogout(c *fiber.Ctx) error {
err := LogoutUser(c)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/")
}
func PostApiRegister(c *fiber.Ctx) error {
user, err := ReceivePost[data.User](c)
if err != nil { return IfErrNil(err, c) }
err = SetUserPassword(user)
if err != nil { return IfErrNil(err, c) }
sql, args, err := sq.Insert("user").
Columns("username", "email", "password").
Values(user.Username, user.Email, user.Password).ToSql()
err = data.Exec(err, sql, args...)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/login/")
}
func PostApiLogin(c *fiber.Ctx) error {
var user data.User
login, err := ReceivePost[data.Login](c)
if(err != nil) { return IfErrNil(err, c) }
pass_good, err := LoginUser(&user, login)
if err != nil { return IfErrNil(err, c) }
if pass_good {
sess, err := STORE.Get(c)
if err != nil { return IfErrNil(err, c) }
sess.Set("authenticated", true)
sess.Set("user_id", user.Id)
sess.Set("admin", IsAdmin(&user))
err = sess.Save()
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/")
} else {
return c.Redirect("/login/")
}
}

@ -36,7 +36,7 @@ func PostApiMessage(c *fiber.Ctx) error {
sql, args, err := build.ToSql()
err = data.Exec(err, sql, args...)
_, err = data.Exec(err, sql, args...)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/feed/")

@ -2,6 +2,7 @@ package data
import (
"log"
"database/sql"
"github.com/gofiber/fiber/v2"
_ "github.com/mattn/go-sqlite3"
"github.com/jmoiron/sqlx"
@ -50,8 +51,8 @@ func GetJson[T any](c *fiber.Ctx, err error, sql string, args ...interface{}) er
fail: return err
}
func Exec(err error, sql_query string, args ...interface{}) (error) {
if err != nil { return err }
DB.MustExec(sql_query, args...)
return err
func Exec(err error, sql_query string, args ...interface{}) (sql.Result, error) {
if err != nil { return nil, err }
result, err := DB.Exec(sql_query, args...)
return result, err
}

@ -42,6 +42,14 @@
<use href="/icons/log-in.svg#img" />
</svg>
</a>
<a id="logout" href="/api/logout">
<svg xmlns="http://www.w3.org/2000/svg"
width="2rem"
height="2rem"
viewBox="0 0 2rem 2rem">
<use href="/icons/log-out.svg#img" />
</svg>
</a>
</nav>
</header>

Loading…
Cancel
Save