package main import ( "git.secnex.io/secnex/masterlog" "git.secnex.io/secnex/taro-bot/bot" "git.secnex.io/secnex/taro-bot/cache" "git.secnex.io/secnex/taro-bot/config" "git.secnex.io/secnex/taro-bot/controllers" "git.secnex.io/secnex/taro-bot/database" "git.secnex.io/secnex/taro-bot/middlewares" "git.secnex.io/secnex/taro-bot/models" "github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2/middleware/cors" ) func main() { config := config.NewConfig() pseudonymizer := masterlog.NewPseudonymizerFromString("1234567890") masterlog.SetPseudonymizer(pseudonymizer) masterlog.AddSensitiveFields("password", "token", "email", "token_value", "key_value") if config.Debug { masterlog.SetLevel(masterlog.LevelDebug) } else { masterlog.SetLevel(masterlog.LevelInfo) } masterlog.AddEncoder(&masterlog.JSONEncoder{}) allModels := []interface{}{ &models.Service{}, &models.Channel{}, &models.Webhook{}, } dbConfig := database.NewDatabaseConfigurationFromConfig(config) masterlog.Info("Connecting to database", map[string]interface{}{"host": config.DatabaseHost, "port": config.DatabasePort, "database": config.DatabaseName}) if err := dbConfig.Connect(config, allModels...); err != nil { masterlog.Error("failed to connect to database", map[string]interface{}{"error": err.Error()}) return } masterlog.Info("Connected to database!") masterlog.Info("Connecting to Redis", map[string]interface{}{"host": config.RedisHost, "port": config.RedisPort}) if err := cache.Connect(config); err != nil { masterlog.Error("failed to connect to Redis", map[string]interface{}{"error": err.Error()}) return } masterlog.Info("Connected to Redis!") app := fiber.New(fiber.Config{ DisableStartupMessage: !config.FiberShowStartupMessage, }) app.Use(middlewares.RequestLogger()) app.Use(cors.New(cors.Config{ AllowOrigins: config.CorsAllowOrigins, AllowHeaders: config.CorsAllowHeaders, AllowMethods: config.CorsAllowMethods, })) app.Head("/messages", controllers.MessageHeadController) app.Post("/messages", controllers.MessageController) app.Post("/webhooks/:id/receive", controllers.WebhookReceiveController) bot.NewAuth(config.MicrosoftTenantId, config.MicrosoftAppId, config.MicrosoftAppSecret) masterlog.Info("Starting server", map[string]interface{}{"address": config.Address}) if err := app.Listen(config.Address); err != nil { masterlog.Error("failed to start server", map[string]interface{}{"error": err.Error()}) return } }