Rework the handlers to be organized by features.

master
Zed A. Shaw 3 days ago
parent 24d5450546
commit 4bd6cfc8ce
  1. 10
      Makefile
  2. 50
      api/auth.go
  3. 43
      api/feed.go
  4. 109
      api/handlers.go
  5. 35
      api/message.go
  6. 11
      api/restart.go

@ -6,9 +6,11 @@ endif
build: build:
go build . go build .
ifeq '$(OS)' 'Windows_NT'
all: tailwind site powershell -ExecutionPolicy bypass "./restart.ps1"
echo "yay!" else
curl http://127.0.0.1:7001/api/restart || true
endif
site: site:
go tool ssgod go tool ssgod
@ -47,7 +49,7 @@ tailwind_install:
chmod oug+x tailwindcss-linux-x64 chmod oug+x tailwindcss-linux-x64
sudo mv tailwindcss-linux-x64 /usr/local/bin/tailwindcss sudo mv tailwindcss-linux-x64 /usr/local/bin/tailwindcss
dev: all dev:
./webapp ./webapp
coverage: coverage:

@ -12,6 +12,7 @@ import (
"MY/webapp/data" "MY/webapp/data"
"MY/webapp/config" "MY/webapp/config"
. "MY/webapp/common"
) )
func IsAdmin(user *data.User) bool { func IsAdmin(user *data.User) bool {
@ -73,3 +74,52 @@ 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) }
// BUG: THIS IS A BIG NO NO, just for getting going
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/")
}
}

@ -0,0 +1,43 @@
package api
import (
"log"
"github.com/gofiber/fiber/v2"
_ "github.com/mattn/go-sqlite3"
sq "github.com/Masterminds/squirrel"
"MY/webapp/data"
. "MY/webapp/common"
)
func GetApiFeed(c *fiber.Ctx) error {
page := c.QueryInt("page", 0)
if page < 0 { page = 0 }
sql, args, err := sq.Select("*").
Limit(2).
Offset(uint64(2 * page)).
From("message").
Where(sq.Eq{"user_id": c.Params("user_id")}).ToSql()
if err != nil { return IfErrNil(err, c) }
err = data.SelectJson[data.Message](c, err, sql, args...)
return IfErrNil(err, c)
}
func GetApiReplies(c *fiber.Ctx) error {
message_id := c.Params("message_id")
sql, args, err := sq.Select("*").From("message").
Where(sq.Eq{"replying_to": message_id}).ToSql()
log.Println("SQL", sql, args);
if err != nil { return IfErrNil(err, c) }
err = data.SelectJson[data.Message](c, err, sql, args...)
return IfErrNil(err, c)
}

@ -6,120 +6,13 @@ import (
"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"
"github.com/gofiber/fiber/v2/middleware/session" "github.com/gofiber/fiber/v2/middleware/session"
"MY/webapp/data"
. "MY/webapp/common" . "MY/webapp/common"
) )
var STORE *session.Store var STORE *session.Store
func GetApiLogout(c *fiber.Ctx) error {
err := LogoutUser(c)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/")
}
func GetApiFeed(c *fiber.Ctx) error {
page := c.QueryInt("page", 0)
if page < 0 { page = 0 }
sql, args, err := sq.Select("*").
Limit(2).
Offset(uint64(2 * page)).
From("message").
Where(sq.Eq{"user_id": c.Params("user_id")}).ToSql()
if err != nil { return IfErrNil(err, c) }
err = data.SelectJson[data.Message](c, err, sql, args...)
return IfErrNil(err, c)
}
func GetApiMessage(c *fiber.Ctx) error {
sql, args, err := sq.Select("*").From("message").
Where(sq.Eq{"id": c.Params("id")}).ToSql()
if err != nil { return IfErrNil(err, c) }
err = data.GetJson[data.Message](c, err, sql, args...)
return IfErrNil(err, c)
}
func PostApiMessage(c *fiber.Ctx) error {
message, err := ReceivePost[data.Message](c)
if err != nil { return IfErrNil(err, c) }
sql, args, err := sq.Insert("message").
Columns("text", "user_id").
Values(message.Text, 1).ToSql()
err = data.Exec(err, sql, args...)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/feed/")
}
func GetApiReplies(c *fiber.Ctx) error {
message_id := c.Params("message_id")
sql, args, err := sq.Select("*").From("message").
Where(sq.Eq{"replying_to": message_id}).ToSql()
log.Println("SQL", sql, args);
if err != nil { return IfErrNil(err, c) }
err = data.SelectJson[data.Message](c, err, sql, args...)
return IfErrNil(err, c)
}
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) }
// BUG: THIS IS A BIG NO NO, just for getting going
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 Setup(app *fiber.App) { func Setup(app *fiber.App) {
STORE = session.New() STORE = session.New()
@ -141,6 +34,8 @@ func Setup(app *fiber.App) {
app.Get("/post/new/", Page("post/new")) app.Get("/post/new/", Page("post/new"))
app.Get("/settings/", Page("settings")) app.Get("/settings/", Page("settings"))
app.Get("/u/:user_id", Page("profile")) app.Get("/u/:user_id", Page("profile"))
app.Get("/api/restart", GetApiRestart)
} }
func Shutdown() { func Shutdown() {

@ -0,0 +1,35 @@
package api
import (
"github.com/gofiber/fiber/v2"
_ "github.com/mattn/go-sqlite3"
sq "github.com/Masterminds/squirrel"
"MY/webapp/data"
. "MY/webapp/common"
)
func GetApiMessage(c *fiber.Ctx) error {
sql, args, err := sq.Select("*").From("message").
Where(sq.Eq{"id": c.Params("id")}).ToSql()
if err != nil { return IfErrNil(err, c) }
err = data.GetJson[data.Message](c, err, sql, args...)
return IfErrNil(err, c)
}
func PostApiMessage(c *fiber.Ctx) error {
message, err := ReceivePost[data.Message](c)
if err != nil { return IfErrNil(err, c) }
sql, args, err := sq.Insert("message").
Columns("text", "user_id").
Values(message.Text, 1).ToSql()
err = data.Exec(err, sql, args...)
if err != nil { return IfErrNil(err, c) }
return c.Redirect("/feed/")
}

@ -0,0 +1,11 @@
package api
import (
"github.com/gofiber/fiber/v2"
"os"
)
func GetApiRestart(c *fiber.Ctx) error {
os.Exit(0)
return c.Redirect("/")
}
Loading…
Cancel
Save