website/api/routes/admin.go

207 lines
3.9 KiB
Go

package routes
import (
"fmt"
"time"
"github.com/gofiber/fiber/v2"
"github.com/ngn13/website/api/config"
"github.com/ngn13/website/api/database"
"github.com/ngn13/website/api/status"
"github.com/ngn13/website/api/util"
)
func admin_log(c *fiber.Ctx, m string) error {
return c.Locals("database").(*database.Type).AdminLogAdd(&database.AdminLog{
Action: m, // action that the admin peformed
Time: time.Now().Unix(), // current time
})
}
func AuthMiddleware(c *fiber.Ctx) error {
conf := c.Locals("config").(*config.Type)
if c.Get("Authorization") != conf.GetStr("password") {
return util.ErrAuth(c)
}
return c.Next()
}
func GET_AdminLogs(c *fiber.Ctx) error {
var (
list []database.AdminLog
log database.AdminLog
)
db := c.Locals("database").(*database.Type)
for db.AdminLogNext(&log) {
list = append(list, log)
}
return util.JSON(c, 200, fiber.Map{
"result": list,
})
}
func DEL_DelService(c *fiber.Ctx) error {
var (
name string
err error
)
db := c.Locals("database").(*database.Type)
if name = c.Query("name"); name == "" {
util.ErrBadReq(c)
}
if err = admin_log(c, fmt.Sprintf("Removed service \"%s\"", name)); err != nil {
return util.ErrInternal(c, err)
}
if err = db.ServiceRemove(name); err != nil {
return util.ErrInternal(c, err)
}
return util.JSON(c, 200, nil)
}
func PUT_AddService(c *fiber.Ctx) error {
var (
service database.Service
err error
)
db := c.Locals("database").(*database.Type)
if c.BodyParser(&service) != nil {
return util.ErrBadJSON(c)
}
if !service.IsValid() {
return util.ErrBadReq(c)
}
if err = admin_log(c, fmt.Sprintf("Added service \"%s\"", service.Name)); err != nil {
return util.ErrInternal(c, err)
}
if err = db.ServiceUpdate(&service); err != nil {
return util.ErrInternal(c, err)
}
// force a status check so we can get the status of the new service
c.Locals("status").(*status.Type).Check()
return util.JSON(c, 200, nil)
}
func GET_CheckService(c *fiber.Ctx) error {
c.Locals("status").(*status.Type).Check()
return util.JSON(c, 200, nil)
}
func PUT_AddProject(c *fiber.Ctx) error {
var (
project database.Project
err error
)
db := c.Locals("database").(*database.Type)
if c.BodyParser(&project) != nil {
return util.ErrBadJSON(c)
}
if !project.IsValid() {
return util.ErrBadReq(c)
}
if err = admin_log(c, fmt.Sprintf("Added project \"%s\"", project.Name)); err != nil {
return util.ErrInternal(c, err)
}
if err = db.ProjectAdd(&project); err != nil {
return util.ErrInternal(c, err)
}
return util.JSON(c, 200, nil)
}
func DEL_DelProject(c *fiber.Ctx) error {
var (
name string
err error
)
db := c.Locals("database").(*database.Type)
if name = c.Query("name"); name == "" {
util.ErrBadReq(c)
}
if err = admin_log(c, fmt.Sprintf("Removed project \"%s\"", name)); err != nil {
return util.ErrInternal(c, err)
}
if err = db.ProjectRemove(name); err != nil {
return util.ErrInternal(c, err)
}
return util.JSON(c, 200, nil)
}
func DEL_DelNews(c *fiber.Ctx) error {
var (
id string
err error
)
db := c.Locals("database").(*database.Type)
if id = c.Query("id"); id == "" {
util.ErrBadReq(c)
}
if err = admin_log(c, fmt.Sprintf("Removed news \"%s\"", id)); err != nil {
return util.ErrInternal(c, err)
}
if err = db.NewsRemove(id); err != nil {
return util.ErrInternal(c, err)
}
return util.JSON(c, 200, nil)
}
func PUT_AddNews(c *fiber.Ctx) error {
var (
news database.News
err error
)
db := c.Locals("database").(*database.Type)
if c.BodyParser(&news) != nil {
return util.ErrBadJSON(c)
}
news.Time = uint64(time.Now().Unix())
if !news.IsValid() {
return util.ErrBadReq(c)
}
if err = admin_log(c, fmt.Sprintf("Added news \"%s\"", news.ID)); err != nil {
return util.ErrInternal(c, err)
}
if err = db.NewsAdd(&news); err != nil {
return util.ErrInternal(c, err)
}
return util.JSON(c, 200, nil)
}