94 lines
2.2 KiB
Go
94 lines
2.2 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"brunel/config"
|
||
|
handlers_auth "brunel/handlers/auth"
|
||
|
handlers_packages "brunel/handlers/packages"
|
||
|
"brunel/helpers"
|
||
|
"brunel/middleware"
|
||
|
"brunel/packages"
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"log/slog"
|
||
|
"os"
|
||
|
"time"
|
||
|
|
||
|
"github.com/goccy/go-json"
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
"github.com/gofiber/fiber/v2/middleware/etag"
|
||
|
"github.com/gofiber/fiber/v2/middleware/recover"
|
||
|
slogfiber "github.com/samber/slog-fiber"
|
||
|
)
|
||
|
|
||
|
// runServer runs a new HTTP server with the loaded environment variables.
|
||
|
func runServer(ctx context.Context) error {
|
||
|
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
|
||
|
|
||
|
err := config.Init()
|
||
|
if err != nil {
|
||
|
slog.Error("unable to load configuration: " + err.Error())
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
go func() {
|
||
|
for {
|
||
|
select {
|
||
|
case <-ctx.Done():
|
||
|
return
|
||
|
default:
|
||
|
err := helpers.DBInst.DeleteExpiredSessions()
|
||
|
if err != nil {
|
||
|
slog.Error("unable to delete expired sessions: " + err.Error())
|
||
|
}
|
||
|
time.Sleep(time.Minute)
|
||
|
}
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
start := time.Now()
|
||
|
err = packages.LoadFromDb()
|
||
|
if err != nil {
|
||
|
slog.Error("unable to load packages from db: " + err.Error())
|
||
|
return err
|
||
|
}
|
||
|
slog.Info("packages loaded from db in " + time.Since(start).String())
|
||
|
|
||
|
start = time.Now()
|
||
|
err = packages.ProcessPackages()
|
||
|
if err != nil {
|
||
|
slog.Error("unable to process packages: " + err.Error())
|
||
|
return err
|
||
|
}
|
||
|
slog.Info("packages processed in " + time.Since(start).String())
|
||
|
|
||
|
cfg := fiber.Config{
|
||
|
JSONEncoder: json.Marshal,
|
||
|
JSONDecoder: json.Unmarshal,
|
||
|
ReadTimeout: 5 * time.Second,
|
||
|
WriteTimeout: 10 * time.Second,
|
||
|
AppName: "brunel",
|
||
|
Prefork: false,
|
||
|
}
|
||
|
|
||
|
server := fiber.New(cfg)
|
||
|
|
||
|
server.Use(slogfiber.NewWithConfig(logger, slogfiber.Config{
|
||
|
WithSpanID: true,
|
||
|
WithTraceID: true,
|
||
|
}))
|
||
|
server.Use(recover.New())
|
||
|
server.Use(etag.New())
|
||
|
|
||
|
adminRoutes := server.Group("api/admin")
|
||
|
adminRoutes.Use(middleware.NewAuth())
|
||
|
|
||
|
server.Get("/api/counts", handlers_packages.Counts)
|
||
|
server.Get("/api/packages", handlers_packages.Packages)
|
||
|
|
||
|
server.Post("/api/login", handlers_auth.Login)
|
||
|
adminRoutes.Post("/register", handlers_auth.Register)
|
||
|
adminRoutes.Post("/updatePassword", handlers_auth.UpdatePassword)
|
||
|
|
||
|
return server.Listen(fmt.Sprintf(":%d", config.Configs.Port))
|
||
|
}
|