2024-04-17 20:22:30 +02:00

93 lines
2.0 KiB
Go

package main
import (
"fmt"
"os"
"strings"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"voltaserve/config"
"voltaserve/errorpkg"
"voltaserve/helper"
"voltaserve/router"
jwtware "github.com/gofiber/contrib/jwt"
"github.com/joho/godotenv"
)
// @title Voltaserve API
// @version 1.0.0
// @BasePath /v1
func main() {
if _, err := os.Stat(".env.local"); err == nil {
err := godotenv.Load(".env.local")
if err != nil {
panic(err)
}
} else {
err := godotenv.Load()
if err != nil {
panic(err)
}
}
cfg := config.GetConfig()
app := fiber.New(fiber.Config{
ErrorHandler: errorpkg.ErrorHandler,
BodyLimit: int(helper.MegabyteToByte(cfg.Limits.MultipartBodyLengthLimitMB)),
})
v1 := app.Group("/v1")
f := v1.Group("files")
app.Get("v1/health", func(c *fiber.Ctx) error {
return c.SendStatus(200)
})
app.Use(cors.New(cors.Config{
AllowOrigins: strings.Join(cfg.Security.CORSOrigins, ","),
}))
fileDownloads := router.NewFileDownloadRouter()
fileDownloads.AppendNonJWTRoutes(f)
conversionWebhook := router.NewConversionWebhookRouter()
conversionWebhook.AppendInternalRoutes(f)
app.Use(jwtware.New(jwtware.Config{
SigningKey: jwtware.SigningKey{Key: []byte(cfg.Security.JWTSigningKey)},
}))
files := router.NewFileRouter()
files.AppendRoutes(f)
invitations := router.NewInvitationRouter()
invitations.AppendRoutes(v1.Group("invitations"))
notifications := router.NewNotificationRouter()
notifications.AppendRoutes(v1.Group("notifications"))
organizations := router.NewOrganizationRouter()
organizations.AppendRoutes(v1.Group("organizations"))
storage := router.NewStorageRouter()
storage.AppendRoutes(v1.Group("storage"))
workspaces := router.NewWorkspaceRouter()
workspaces.AppendRoutes(v1.Group("workspaces"))
groups := router.NewGroupRouter()
groups.AppendRoutes(v1.Group("groups"))
users := router.NewUserRouter()
users.AppendRoutes(v1.Group("users"))
if err := app.Listen(fmt.Sprintf(":%d", cfg.Port)); err != nil {
panic(err)
}
}