2023-11-12 17:43:23 +03:00
|
|
|
package routes
|
|
|
|
|
|
|
|
import (
|
2024-07-24 01:15:37 +03:00
|
|
|
"log"
|
2023-11-12 17:43:23 +03:00
|
|
|
"net/http"
|
|
|
|
"os"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
|
|
"github.com/mattn/go-sqlite3"
|
2024-07-24 01:15:37 +03:00
|
|
|
"github.com/ngn13/website/api/database"
|
|
|
|
"github.com/ngn13/website/api/global"
|
2023-11-12 17:43:23 +03:00
|
|
|
"github.com/ngn13/website/api/util"
|
|
|
|
)
|
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
var Token string = util.CreateToken()
|
2023-11-12 17:43:23 +03:00
|
|
|
|
|
|
|
func AuthMiddleware(c *fiber.Ctx) error {
|
2024-07-24 01:15:37 +03:00
|
|
|
if c.Path() == "/admin/login" {
|
|
|
|
return c.Next()
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
if c.Get("Authorization") != Token {
|
|
|
|
return util.ErrAuth(c)
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
return c.Next()
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
func Login(c *fiber.Ctx) error {
|
|
|
|
if c.Query("pass") != os.Getenv("PASSWORD") {
|
|
|
|
return c.Status(http.StatusUnauthorized).JSON(fiber.Map{
|
|
|
|
"error": "Authentication failed",
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
log.Printf("New login from %s", util.GetIP(c))
|
|
|
|
|
|
|
|
return c.Status(http.StatusOK).JSON(fiber.Map{
|
|
|
|
"error": "",
|
|
|
|
"token": Token,
|
|
|
|
})
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
func Logout(c *fiber.Ctx) error {
|
|
|
|
Token = util.CreateToken()
|
|
|
|
|
|
|
|
log.Printf("Logout from %s", util.GetIP(c))
|
|
|
|
|
|
|
|
return c.Status(http.StatusOK).JSON(fiber.Map{
|
|
|
|
"error": "",
|
|
|
|
})
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func RemoveService(c *fiber.Ctx) error {
|
2024-07-24 01:15:37 +03:00
|
|
|
var (
|
|
|
|
db *database.Type
|
|
|
|
name string
|
|
|
|
)
|
|
|
|
|
|
|
|
db = c.Locals("database").(*database.Type)
|
|
|
|
name = c.Query("name")
|
|
|
|
|
|
|
|
if name == "" {
|
|
|
|
util.ErrBadData(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
_, err := db.Sql.Exec("DELETE FROM services WHERE name = ?", name)
|
|
|
|
if util.ErrorCheck(err, c) {
|
|
|
|
return util.ErrServer(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
return util.NoError(c)
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func AddService(c *fiber.Ctx) error {
|
2024-07-24 01:15:37 +03:00
|
|
|
var (
|
|
|
|
service global.Service
|
|
|
|
db *database.Type
|
|
|
|
)
|
|
|
|
|
|
|
|
db = c.Locals("database").(*database.Type)
|
|
|
|
|
|
|
|
if c.BodyParser(&service) != nil {
|
|
|
|
return util.ErrBadJSON(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
if service.Name == "" || service.Desc == "" || service.Url == "" {
|
|
|
|
return util.ErrBadData(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
rows, err := db.Sql.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.Sql.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)
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
func RemovePost(c *fiber.Ctx) error {
|
|
|
|
var (
|
|
|
|
db *database.Type
|
|
|
|
id string
|
|
|
|
)
|
|
|
|
|
|
|
|
db = c.Locals("database").(*database.Type)
|
|
|
|
id = c.Query("id")
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
if id == "" {
|
|
|
|
return util.ErrBadData(c)
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
_, err := db.Sql.Exec("DELETE FROM posts WHERE id = ?", id)
|
|
|
|
if util.ErrorCheck(err, c) {
|
|
|
|
return util.ErrServer(c)
|
|
|
|
}
|
|
|
|
|
|
|
|
return util.NoError(c)
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
func AddPost(c *fiber.Ctx) error {
|
|
|
|
var (
|
|
|
|
db *database.Type
|
|
|
|
post global.Post
|
|
|
|
)
|
|
|
|
|
|
|
|
db = c.Locals("database").(*database.Type)
|
|
|
|
post.Public = 1
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
if c.BodyParser(&post) != nil {
|
|
|
|
return util.ErrBadJSON(c)
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
if post.Title == "" || post.Author == "" || post.Content == "" {
|
|
|
|
return util.ErrBadData(c)
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
post.Date = time.Now().Format("02/01/06")
|
|
|
|
post.ID = util.TitleToID(post.Title)
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
_, err := db.Sql.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,
|
|
|
|
)
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
if err != nil && strings.Contains(err.Error(), sqlite3.ErrConstraintUnique.Error()) {
|
|
|
|
return util.ErrExists(c)
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
if util.ErrorCheck(err, c) {
|
|
|
|
return util.ErrExists(c)
|
|
|
|
}
|
2023-11-12 17:43:23 +03:00
|
|
|
|
2024-07-24 01:15:37 +03:00
|
|
|
return util.NoError(c)
|
2023-11-12 17:43:23 +03:00
|
|
|
}
|