Moved the auth stuff into common/ so it's easier to merge back.

master
Zed A. Shaw 2 months ago
parent 49946e7f26
commit 3e6156e93c
  1. 23
      admin/handlers.go
  2. 69
      api/auth.go
  3. 5
      api/handlers.go

@ -6,12 +6,11 @@ import (
"fmt" "fmt"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"MY/webapp/data" "MY/webapp/data"
"MY/webapp/api"
. "MY/webapp/common" . "MY/webapp/common"
) )
func GetApiTableIndex(c *fiber.Ctx) error { func GetApiTableIndex(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
var tables []string var tables []string
@ -24,7 +23,7 @@ func GetApiTableIndex(c *fiber.Ctx) error {
} }
func GetApiSelectAll(c *fiber.Ctx) error { func GetApiSelectAll(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -50,14 +49,14 @@ func GetApiSelectAll(c *fiber.Ctx) error {
} }
func GetPageSelectAll(c *fiber.Ctx) error { func GetPageSelectAll(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
return c.Render("admin/table/contents", fiber.Map{"Table": c.Params("table")}) return c.Render("admin/table/contents", fiber.Map{"Table": c.Params("table")})
} }
func GetApiSelectOne(c *fiber.Ctx) error { func GetApiSelectOne(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -73,7 +72,7 @@ func GetApiSelectOne(c *fiber.Ctx) error {
} }
func GetPageSelectOne(c *fiber.Ctx) error { func GetPageSelectOne(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -87,7 +86,7 @@ func GetPageSelectOne(c *fiber.Ctx) error {
} }
func PostApiUpdate(c *fiber.Ctx) error { func PostApiUpdate(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -102,7 +101,7 @@ func PostApiUpdate(c *fiber.Ctx) error {
} }
func GetPageInsert(c *fiber.Ctx) error { func GetPageInsert(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -110,7 +109,7 @@ func GetPageInsert(c *fiber.Ctx) error {
} }
func GetApiInsert(c *fiber.Ctx) error { func GetApiInsert(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -120,7 +119,7 @@ func GetApiInsert(c *fiber.Ctx) error {
} }
func PostApiInsert(c *fiber.Ctx) error { func PostApiInsert(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -136,7 +135,7 @@ func PostApiInsert(c *fiber.Ctx) error {
} }
func DeleteApi(c *fiber.Ctx) error { func DeleteApi(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
table := c.Params("table") table := c.Params("table")
@ -151,7 +150,7 @@ func DeleteApi(c *fiber.Ctx) error {
} }
func GetPageAdminIndex(c *fiber.Ctx) error { func GetPageAdminIndex(c *fiber.Ctx) error {
_, err := api.CheckAuthed(c, true) _, err := CheckAuthed(c, true)
if err != nil { return c.Redirect("/") } if err != nil { return c.Redirect("/") }
return c.Render("admin/table/index", fiber.Map{}) return c.Render("admin/table/index", fiber.Map{})

@ -1,17 +1,11 @@
package api package api
import ( import (
"errors"
"golang.org/x/crypto/bcrypt"
"log"
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
_ "github.com/mattn/go-sqlite3" _ "github.com/mattn/go-sqlite3"
sq "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel"
"github.com/gofiber/fiber/v2/middleware/session"
"MY/webapp/data" "MY/webapp/data"
"MY/webapp/config"
. "MY/webapp/common" . "MY/webapp/common"
) )
@ -69,66 +63,3 @@ func PostApiLogin(c *fiber.Ctx) error {
return c.Redirect("/login/") return c.Redirect("/login/")
} }
} }
func IsAdmin(user *data.User) bool {
return user.Username == config.Settings.Admin
}
func CheckAuthed(c *fiber.Ctx, needs_admin bool) (*session.Session, error) {
sess, err := STORE.Get(c)
if err != nil { return sess, err }
// BUG: this has to come from the databse, just temporary
admin := sess.Get("admin") == true
authed := sess.Get("authenticated") == true
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
log.Printf("after needs_admin block: authed=%v", authed)
}
if authed {
log.Println("user is authed, return nil and sess")
return sess, nil
} else {
log.Println("user is NOT authed, return error")
return sess, errors.New("Authentication, permission failure")
}
}
func LogoutUser(c *fiber.Ctx) error {
sess, err := STORE.Get(c)
if err != nil { return err }
err = sess.Destroy()
if err != nil { return err }
err = sess.Save()
return err
}
func LoginUser(result *data.User, login *data.Login) (bool, error) {
sql, args, err := sq.Select("username, password").
From("user").Where("username=?", login.Username).ToSql()
if err != nil { return false, err }
err = data.DB.Get(result, sql, args...)
if err != nil { return false, err }
pass_good := bcrypt.CompareHashAndPassword([]byte(result.Password), []byte(login.Password))
if pass_good != nil { return false, pass_good }
return login.Username == result.Username && pass_good == nil, nil
}
func SetUserPassword(user *data.User) error {
hashed, err := bcrypt.GenerateFromPassword([]byte(user.Password), 12)
if err != nil { return err }
user.Password = string(hashed)
return nil
}

@ -6,12 +6,11 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/session" "github.com/gofiber/fiber/v2/middleware/session"
"MY/webapp/common"
) )
var STORE *session.Store
func Setup(app *fiber.App) { func Setup(app *fiber.App) {
STORE = session.New() common.STORE = session.New()
// this forces static pages to reload // this forces static pages to reload
app.Static("/", "./public", fiber.Static{ app.Static("/", "./public", fiber.Static{

Loading…
Cancel
Save