website/api/main.go

103 lines
2.4 KiB
Go
Raw Normal View History

2023-11-12 17:43:23 +03:00
package main
import (
2024-10-06 17:30:25 +03:00
"database/sql"
2023-11-12 17:43:23 +03:00
"github.com/gofiber/fiber/v2"
2024-10-06 17:30:25 +03:00
"github.com/ngn13/website/api/config"
"github.com/ngn13/website/api/database"
2023-11-12 17:43:23 +03:00
"github.com/ngn13/website/api/routes"
2024-10-06 17:30:25 +03:00
"github.com/ngn13/website/api/util"
2023-11-12 17:43:23 +03:00
)
2024-10-06 17:30:25 +03:00
var db *sql.DB
2023-11-12 17:43:23 +03:00
func main() {
var (
app *fiber.App
2024-10-06 17:30:25 +03:00
//db *sql.DB
err error
)
2024-10-06 17:30:25 +03:00
if !config.Load() {
util.Fail("failed to load the configuration")
return
}
if db, err = sql.Open("sqlite3", "data.db"); err != nil {
util.Fail("cannot access the database: %s", err.Error())
return
}
defer db.Close()
2024-10-06 17:30:25 +03:00
if err = database.Setup(db); err != nil {
util.Fail("cannot setup the database: %s", err.Error())
return
}
app = fiber.New(fiber.Config{
DisableStartupMessage: true,
})
app.Use("*", func(c *fiber.Ctx) error {
c.Set("Access-Control-Allow-Origin", "*")
c.Set("Access-Control-Allow-Headers",
"Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
c.Set("Access-Control-Allow-Methods", "PUT, DELETE, GET")
2024-10-06 17:30:25 +03:00
c.Locals("database", &db)
2024-10-06 17:30:25 +03:00
return c.Next()
})
// index route
app.Get("/", func(c *fiber.Ctx) error {
return c.Send([]byte("o/"))
})
// blog routes
blog_routes := app.Group("/blog")
2024-10-06 17:30:25 +03:00
// blog feed routes
blog_routes.Get("/feed.*", routes.GET_Feed)
// blog post routes
blog_routes.Get("/sum", routes.GET_PostSum)
blog_routes.Get("/get", routes.GET_Post)
// blog post vote routes
blog_routes.Get("/vote/set", routes.GET_VoteSet)
blog_routes.Get("/vote/get", routes.GET_VoteGet)
// service routes
service_routes := app.Group("services")
2024-10-06 17:30:25 +03:00
service_routes.Get("/all", routes.GET_Services)
// admin routes
admin_routes := app.Group("admin")
admin_routes.Use("*", routes.AuthMiddleware)
2024-10-06 17:30:25 +03:00
// admin auth routes
admin_routes.Get("/login", routes.GET_Login)
admin_routes.Get("/logout", routes.GET_Logout)
// admin service managment routes
admin_routes.Put("/service/add", routes.PUT_AddService)
admin_routes.Delete("/service/remove", routes.DEL_RemoveService)
// admin blog managment routes
admin_routes.Put("/blog/add", routes.PUT_AddPost)
admin_routes.Delete("/blog/remove", routes.DEL_RemovePost)
// 404 route
app.All("*", func(c *fiber.Ctx) error {
2024-10-06 17:30:25 +03:00
return util.ErrNotFound(c)
})
2024-10-06 17:30:25 +03:00
util.Info("starting web server at port 7001")
if err = app.Listen("0.0.0.0:7001"); err != nil {
2024-10-06 17:30:25 +03:00
util.Fail("error starting the webserver: %s", err.Error())
}
2023-11-12 17:43:23 +03:00
}