diff --git a/Makefile b/Makefile index f149fb2..782bfc3 100644 --- a/Makefile +++ b/Makefile @@ -6,9 +6,11 @@ endif build: go build . - -all: tailwind site - echo "yay!" +ifeq '$(OS)' 'Windows_NT' + powershell -ExecutionPolicy bypass "./restart.ps1" +else + curl http://127.0.0.1:7001/api/restart || true +endif site: go tool ssgod @@ -47,7 +49,7 @@ tailwind_install: chmod oug+x tailwindcss-linux-x64 sudo mv tailwindcss-linux-x64 /usr/local/bin/tailwindcss -dev: all +dev: ./webapp coverage: diff --git a/api/auth.go b/api/auth.go index 15e980c..6b195c7 100644 --- a/api/auth.go +++ b/api/auth.go @@ -12,6 +12,7 @@ import ( "MY/webapp/data" "MY/webapp/config" + . "MY/webapp/common" ) func IsAdmin(user *data.User) bool { @@ -73,3 +74,52 @@ 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) } + + // 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/") + } +} diff --git a/api/feed.go b/api/feed.go new file mode 100644 index 0000000..1526cb6 --- /dev/null +++ b/api/feed.go @@ -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) +} diff --git a/api/handlers.go b/api/handlers.go index b419d82..3d9e8a8 100644 --- a/api/handlers.go +++ b/api/handlers.go @@ -6,120 +6,13 @@ import ( "github.com/gofiber/fiber/v2" _ "github.com/mattn/go-sqlite3" - sq "github.com/Masterminds/squirrel" "github.com/gofiber/fiber/v2/middleware/session" - "MY/webapp/data" . "MY/webapp/common" ) 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) { STORE = session.New() @@ -141,6 +34,8 @@ func Setup(app *fiber.App) { app.Get("/post/new/", Page("post/new")) app.Get("/settings/", Page("settings")) app.Get("/u/:user_id", Page("profile")) + + app.Get("/api/restart", GetApiRestart) } func Shutdown() { diff --git a/api/message.go b/api/message.go new file mode 100644 index 0000000..ddcedab --- /dev/null +++ b/api/message.go @@ -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/") +} diff --git a/api/restart.go b/api/restart.go new file mode 100644 index 0000000..5911ea3 --- /dev/null +++ b/api/restart.go @@ -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("/") +}