You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.5 KiB
148 lines
3.5 KiB
package api
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"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()
|
|
|
|
app.Static("/", "./public", fiber.Static{
|
|
Compress: false,
|
|
CacheDuration: 1 * time.Nanosecond,
|
|
})
|
|
|
|
app.Get("/api/logout", GetApiLogout)
|
|
app.Post("/api/login", PostApiLogin)
|
|
app.Post("/api/register", PostApiRegister)
|
|
app.Get("/api/feed/:user_id", GetApiFeed)
|
|
app.Get("/api/message/:id", GetApiMessage)
|
|
app.Post("/api/message/new", PostApiMessage)
|
|
app.Get("/api/replies/:message_id", GetApiReplies)
|
|
|
|
app.Get("/feed/", Page("feed"))
|
|
app.Get("/post/view/:id/", Page("post/view"))
|
|
app.Get("/post/new/", Page("post/new"))
|
|
app.Get("/settings/", Page("settings"))
|
|
app.Get("/u/:user_id", Page("profile"))
|
|
}
|
|
|
|
func Shutdown() {
|
|
log.Println("Shutting down controllers...")
|
|
}
|
|
|