184 lines
3.5 KiB
Go
184 lines
3.5 KiB
Go
package routes
|
|
|
|
import (
|
|
"database/sql"
|
|
"net/http"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/mattn/go-sqlite3"
|
|
"github.com/ngn13/website/api/config"
|
|
"github.com/ngn13/website/api/database"
|
|
"github.com/ngn13/website/api/util"
|
|
)
|
|
|
|
var Token string = util.CreateToken()
|
|
|
|
func AuthMiddleware(c *fiber.Ctx) error {
|
|
if c.Path() == "/admin/login" {
|
|
return c.Next()
|
|
}
|
|
|
|
if c.Get("Authorization") != Token {
|
|
return util.ErrAuth(c)
|
|
}
|
|
|
|
return c.Next()
|
|
}
|
|
|
|
func GET_Login(c *fiber.Ctx) error {
|
|
if c.Query("pass") != config.Get("password") {
|
|
return util.ErrAuth(c)
|
|
}
|
|
|
|
util.Info("new login from %s", util.GetIP(c))
|
|
|
|
return c.Status(http.StatusOK).JSON(fiber.Map{
|
|
"error": "",
|
|
"token": Token,
|
|
})
|
|
}
|
|
|
|
func GET_Logout(c *fiber.Ctx) error {
|
|
Token = util.CreateToken()
|
|
|
|
util.Info("logout from %s", util.GetIP(c))
|
|
|
|
return c.Status(http.StatusOK).JSON(fiber.Map{
|
|
"error": "",
|
|
})
|
|
}
|
|
|
|
func DEL_RemoveService(c *fiber.Ctx) error {
|
|
var (
|
|
db *sql.DB
|
|
service database.Service
|
|
name string
|
|
found bool
|
|
err error
|
|
)
|
|
|
|
db = *(c.Locals("database").(**sql.DB))
|
|
name = c.Query("name")
|
|
|
|
if name == "" {
|
|
util.ErrBadData(c)
|
|
}
|
|
|
|
if found, err = service.Get(db, name); err != nil {
|
|
util.Fail("error while searching for a service (\"%s\"): %s", name, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
if !found {
|
|
return util.ErrEntryNotExists(c)
|
|
}
|
|
|
|
if err = service.Remove(db); err != nil {
|
|
util.Fail("error while removing a service (\"%s\"): %s", service.Name, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
return util.NoError(c)
|
|
}
|
|
|
|
func PUT_AddService(c *fiber.Ctx) error {
|
|
var (
|
|
service database.Service
|
|
db *sql.DB
|
|
found bool
|
|
err error
|
|
)
|
|
|
|
db = *(c.Locals("database").(**sql.DB))
|
|
|
|
if c.BodyParser(&service) != nil {
|
|
return util.ErrBadJSON(c)
|
|
}
|
|
|
|
if service.Name == "" || service.Desc == "" || service.Url == "" {
|
|
return util.ErrBadData(c)
|
|
}
|
|
|
|
if found, err = service.Get(db, service.Name); err != nil {
|
|
util.Fail("error while searching for a service (\"%s\"): %s", service.Name, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
if found {
|
|
return util.ErrEntryExists(c)
|
|
}
|
|
|
|
if err = service.Save(db); err != nil {
|
|
util.Fail("error while saving a new service (\"%s\"): %s", service.Name, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
return util.NoError(c)
|
|
}
|
|
|
|
func DEL_RemovePost(c *fiber.Ctx) error {
|
|
var (
|
|
db *sql.DB
|
|
id string
|
|
found bool
|
|
err error
|
|
post database.Post
|
|
)
|
|
|
|
db = *(c.Locals("database").(**sql.DB))
|
|
|
|
if id = c.Query("id"); id == "" {
|
|
return util.ErrBadData(c)
|
|
}
|
|
|
|
if found, err = post.Get(db, id); err != nil {
|
|
util.Fail("error while searching for a post (\"%s\"): %s", id, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
if !found {
|
|
return util.ErrEntryNotExists(c)
|
|
}
|
|
|
|
if err = post.Remove(db); err != nil {
|
|
util.Fail("error while removing a post (\"%s\"): %s", post.ID, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
return util.NoError(c)
|
|
}
|
|
|
|
func PUT_AddPost(c *fiber.Ctx) error {
|
|
var (
|
|
db *sql.DB
|
|
post database.Post
|
|
err error
|
|
)
|
|
|
|
db = *(c.Locals("database").(**sql.DB))
|
|
post.Public = 1
|
|
|
|
if c.BodyParser(&post) != nil {
|
|
return util.ErrBadJSON(c)
|
|
}
|
|
|
|
if post.Title == "" || post.Author == "" || post.Content == "" {
|
|
return util.ErrBadData(c)
|
|
}
|
|
|
|
post.Date = time.Now().Format("02/01/06")
|
|
|
|
if err = post.Save(db); err != nil && strings.Contains(err.Error(), sqlite3.ErrConstraintUnique.Error()) {
|
|
return util.ErrEntryExists(c)
|
|
}
|
|
|
|
if err != nil {
|
|
util.Fail("error while saving a new post (\"%s\"): %s", post.ID, err.Error())
|
|
return util.ErrServer(c)
|
|
}
|
|
|
|
return util.NoError(c)
|
|
}
|