website/api/routes/admin.go
2023-11-15 19:49:00 +03:00

140 lines
2.7 KiB
Go

package routes
import (
"net/http"
"os"
"strings"
"time"
"github.com/gofiber/fiber/v2"
"github.com/mattn/go-sqlite3"
"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 Login(c *fiber.Ctx) error{
if c.Query("pass") != os.Getenv("PASSWORD") {
return c.Status(http.StatusUnauthorized).JSON(fiber.Map{
"error": "Authentication failed",
})
}
return c.Status(http.StatusOK).JSON(fiber.Map{
"error": "",
"token": Token,
})
}
func Logout(c *fiber.Ctx) error{
Token = util.CreateToken()
return c.Status(http.StatusOK).JSON(fiber.Map{
"error": "",
})
}
func RemoveService(c *fiber.Ctx) error {
name := c.Query("name")
if name == "" {
util.ErrBadData(c)
}
_, err := DB.Exec("DELETE FROM services WHERE name = ?", name)
if util.ErrorCheck(err, c){
return util.ErrServer(c)
}
return util.NoError(c)
}
func AddService(c *fiber.Ctx) error {
var service Service
if c.BodyParser(&service) != nil {
return util.ErrBadJSON(c)
}
if service.Name == "" || service.Desc == "" || service.Url == "" {
return util.ErrBadData(c)
}
rows, err := DB.Query("SELECT * FROM services WHERE name = ?", service.Name)
if util.ErrorCheck(err, c){
return util.ErrServer(c)
}
if rows.Next() {
rows.Close()
return util.ErrExists(c)
}
rows.Close()
_, err = DB.Exec(
"INSERT INTO services(name, desc, url) values(?, ?, ?)",
service.Name, service.Desc, service.Url,
)
if util.ErrorCheck(err, c){
return util.ErrServer(c)
}
return util.NoError(c)
}
func RemovePost(c *fiber.Ctx) error{
var id = c.Query("id")
if id == "" {
return util.ErrBadData(c)
}
_, err := DB.Exec("DELETE FROM posts WHERE id = ?", id)
if util.ErrorCheck(err, c){
return util.ErrServer(c)
}
return util.NoError(c)
}
func AddPost(c *fiber.Ctx) error{
var post Post
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")
post.ID = TitleToID(post.Title)
_, err := DB.Exec(
"INSERT INTO posts(id, title, author, date, content, public, vote) values(?, ?, ?, ?, ?, ?, ?)",
post.ID, post.Title, post.Author, post.Date, post.Content, post.Public, post.Vote,
)
if err != nil && strings.Contains(err.Error(), sqlite3.ErrConstraintUnique.Error()) {
return util.ErrExists(c)
}
if util.ErrorCheck(err, c){
return util.ErrExists(c)
}
return util.NoError(c)
}