package main import ( "InfantrySkillCalculator/controllers" "InfantrySkillCalculator/models" "InfantrySkillCalculator/utils" "github.com/gin-gonic/gin" _ "github.com/gorilla/sessions" "html/template" "io" "log" "os" ) var mainPageTemplates *template.Template var loginPageTemplates *template.Template var registerPageTemplates *template.Template func init() { var err error mainPageTemplates, err = template.ParseFiles( "./templates/index.html", "./templates/components/home_clan_bar.html", "./templates/components/opp_clan_bar.html", "./templates/components/home_player_list.html", "./templates/components/opp_player_list.html", "./templates/components/bottom_controls.html", "./templates/modals/delete_clan.html", "./templates/modals/add_clan.html", "./templates/modals/edit_clan.html", "./templates/modals/add_player.html", "./templates/modals/delete_player.html", "./templates/modals/edit_player.html", "./templates/modals/settings.html", "./templates/components/header.html", ) if err != nil { log.Fatal(err) } loginPageTemplates, err = template.ParseFiles( "./templates/login.html", "./templates/components/header.html", ) if err != nil { log.Fatal(err) } registerPageTemplates, err = template.ParseFiles( "./templates/register.html", "./templates/components/header.html", ) if err != nil { log.Fatal(err) } controllers.LoadMetrics() } func main() { if os.Getenv("GO_ENV") == "production" { gin.SetMode(gin.ReleaseMode) } router := gin.New() err := router.SetTrustedProxies([]string{"127.0.0.1"}) if err != nil { log.Fatal(err) } router.LoadHTMLGlob("templates/**/*") protected := router.Group("/") protected.Use(AuthRequired()) admin := router.Group("/admin") admin.Use(AdminAuthRequired()) models.ConnectDatabase() models.ConnectCache() var code models.ActivationCode if err := models.DB.First(&code).Error; err != nil { firstCode := utils.GenerateActivationCode() models.DB.Create(&models.ActivationCode{Code: firstCode, UserRole: models.AdminRole}) log.Println("Created first activation code with ADMIN role:\n" + firstCode) } f, _ := os.OpenFile("isc_rest.log", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0660) utils.GinWriter = io.MultiWriter(f, os.Stdout) router.Use( gin.LoggerWithWriter(utils.GinWriter, "/static"), gin.Recovery(), ) protected.Use( gin.LoggerWithWriter(utils.GinWriter), gin.Recovery(), ) admin.Use( gin.LoggerWithWriter(utils.GinWriter), gin.Recovery(), ) router.Static("/static", "./static") router.GET("/login", loginPage) router.POST("/login", loginPost) router.GET("/logout", logout) router.GET("/register", registerPage) router.POST("/register", registerPost) protected.GET("/", mainPage) protected.GET("/clans", controllers.GetAllClans) protected.GET("/clans_html", controllers.GetAllClansHTML) protected.GET("/clan/:id", controllers.GetClanByID) protected.POST("/clan", controllers.AddClan) protected.PATCH("/clan/:id", controllers.UpdateClanByID) protected.DELETE("/clan/:id", controllers.DeleteClanByID) protected.GET("/players", controllers.GetAllPlayers) protected.GET("/players_html", controllers.GetPlayersByClanHTML) protected.GET("/player/:id", controllers.GetPlayerByID) protected.GET("/playerid/:name", controllers.GetPlayerIDByName) protected.POST("/player", controllers.AddPlayer) protected.PATCH("/player/:id", controllers.UpdatePlayerByID) protected.DELETE("/player/:id", controllers.DeletePlayerByID) protected.GET("/cache/:player_id", controllers.GetCacheByPlayerID) protected.GET("/score/:player_id", controllers.GetScoreByPlayerID) protected.POST("/score/:player_name", controllers.GetScoreByPlayerName) protected.GET("/game", controllers.GetGames) protected.GET("/game_html", controllers.GetGamesHTML) protected.GET("/settings", controllers.GetSettings) protected.PATCH("/settings", controllers.UpdateSettings) admin.DELETE("/clear_cache", controllers.DeleteAllCaches) admin.DELETE("/purge_players", controllers.DeleteAllPlayers) admin.DELETE("/purge_clans", controllers.DeleteAllClans) admin.POST("/create_code", controllers.CreateCode) log.Println("Running on 8000...") log.Fatal(router.Run(":8000")) }