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

master
Zed A. Shaw 2 months 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" . "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 { func IsAdmin(user *data.User) bool {
return user.Username == config.Settings.Admin 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 admin := sess.Get("admin") == true
authed := sess.Get("authenticated") == 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 { if needs_admin {
authed = admin && authed authed = admin && authed
@ -46,7 +96,10 @@ func CheckAuthed(c *fiber.Ctx, needs_admin bool) (*session.Session, error) {
func LogoutUser(c *fiber.Ctx) error { func LogoutUser(c *fiber.Ctx) error {
sess, err := STORE.Get(c) sess, err := STORE.Get(c)
if err != nil { return err } if err != nil { return err }
sess.Reset()
err = sess.Destroy()
if err != nil { return err }
err = sess.Save() err = sess.Save()
return err return err
} }
@ -73,52 +126,3 @@ func SetUserPassword(user *data.User) error {
user.Password = string(hashed) user.Password = string(hashed)
return nil 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() sql, args, err := build.ToSql()
err = data.Exec(err, sql, args...) _, err = data.Exec(err, sql, args...)
if err != nil { return IfErrNil(err, c) } if err != nil { return IfErrNil(err, c) }
return c.Redirect("/feed/") return c.Redirect("/feed/")

@ -2,6 +2,7 @@ package data
import ( import (
"log" "log"
"database/sql"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
"github.com/jmoiron/sqlx" "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 fail: return err
} }
func Exec(err error, sql_query string, args ...interface{}) (error) { func Exec(err error, sql_query string, args ...interface{}) (sql.Result, error) {
if err != nil { return err } if err != nil { return nil, err }
DB.MustExec(sql_query, args...) result, err := DB.Exec(sql_query, args...)
return err return result, err
} }

@ -42,6 +42,14 @@
<use href="/icons/log-in.svg#img" /> <use href="/icons/log-in.svg#img" />
</svg> </svg>
</a> </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> </nav>
</header> </header>

Loading…
Cancel
Save