112 lines
2.7 KiB
Go
112 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"time"
|
|
|
|
"git.ex.umbach.dev/Alex/roese-utils/rsconfig"
|
|
"git.ex.umbach.dev/Alex/roese-utils/rslogger"
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/gofiber/fiber/v2/middleware/cors"
|
|
"github.com/gofiber/websocket/v2"
|
|
"lms.de/backend/modules/config"
|
|
"lms.de/backend/modules/database"
|
|
"lms.de/backend/modules/logger"
|
|
"lms.de/backend/modules/structs"
|
|
"lms.de/backend/modules/utils"
|
|
"lms.de/backend/routers/router"
|
|
"lms.de/backend/socketserver"
|
|
)
|
|
|
|
func init() {
|
|
fmt.Println("Server is starting...")
|
|
|
|
rsconfig.CreateEnvConfigFileIfNotExists(`DEBUG=false
|
|
COLORIZED_OUTPUT=true
|
|
HOST=127.0.0.1
|
|
PORT=8080
|
|
|
|
LOG_MANAGER_SERVER_URL=http://localhost:50110
|
|
|
|
# Folder paths
|
|
FOLDER_PUBLIC_STATIC=./public/
|
|
|
|
# MariaDB
|
|
MARIADB_HOSTNAME=127.0.0.1
|
|
MARIADB_PORT=3306
|
|
MARIADB_USERNAME=db_user
|
|
MARIADB_PASSWORD=db_password
|
|
MARIADB_DATABASE_NAME=db_database_name`)
|
|
|
|
config.LoadConfig()
|
|
|
|
rslogger.InitLogger(config.Cfg.Debug, config.Cfg.ColorizedOutput, config.Cfg.LogManagerServerUrl)
|
|
|
|
if os.Getenv("DOCKER") != "" {
|
|
fmt.Println("Waiting for mariadb docker")
|
|
// waiting for the start of mariadb docker
|
|
time.Sleep(10 * time.Second)
|
|
}
|
|
|
|
utils.ValidatorInit()
|
|
database.InitDatabase()
|
|
}
|
|
|
|
func main() {
|
|
app := fiber.New(fiber.Config{
|
|
BodyLimit: 100 * 1024 * 1024,
|
|
})
|
|
|
|
app.Use(cors.New())
|
|
|
|
router.SetupRoutes(app)
|
|
|
|
app.Use("/ws", func(c *fiber.Ctx) error {
|
|
// IsWebSocketUpgrade returns true if the client
|
|
// requested upgrade to the WebSocket protocol.
|
|
if websocket.IsWebSocketUpgrade(c) {
|
|
sessionId := c.Query("auth")
|
|
// needed for a user who uses multiple tabs in the browser
|
|
// with the same session id because otherwise the last browser
|
|
// tab would subscribe to the topic and the other tabs would
|
|
// not receive any messages
|
|
browserTabSession := c.Query("bts")
|
|
|
|
if len(sessionId) != utils.LenHeaderXAuthorization ||
|
|
len(browserTabSession) != utils.LenHeaderXAuthorization {
|
|
return c.SendStatus(fiber.StatusUnauthorized)
|
|
}
|
|
|
|
// validate ws session
|
|
var userSession structs.UserSession
|
|
|
|
database.DB.Select("user_id").First(&userSession, "session = ?", sessionId)
|
|
|
|
if userSession.UserId != "" {
|
|
var user structs.User
|
|
|
|
database.DB.First(&user, "id = ?", userSession.UserId)
|
|
|
|
if user.Id != "" {
|
|
c.Locals("sessionId", sessionId)
|
|
c.Locals("browserTabSession", browserTabSession)
|
|
c.Locals("userId", user.Id)
|
|
c.Locals("organizationId", user.OrganizationId)
|
|
}
|
|
}
|
|
|
|
return c.Next()
|
|
}
|
|
|
|
return fiber.ErrUpgradeRequired
|
|
})
|
|
|
|
go socketserver.RunHub()
|
|
socketserver.WebSocketServer(app)
|
|
|
|
logger.AddSystemLog(rslogger.LogTypeInfo, "Server started")
|
|
|
|
app.Listen(config.Cfg.Host + ":" + config.Cfg.Port)
|
|
}
|