Spaces:
Runtime error
Runtime error
| package main | |
| import ( | |
| "log" | |
| "os" | |
| "uptime/backend/controllers" | |
| "uptime/backend/database" | |
| "uptime/backend/middleware" | |
| "uptime/backend/models" | |
| "uptime/backend/services" | |
| "github.com/gin-contrib/cors" | |
| "github.com/gin-gonic/gin" | |
| "github.com/joho/godotenv" | |
| "golang.org/x/crypto/bcrypt" | |
| ) | |
| func main() { | |
| // 在开发环境中加载 .env 文件,如果文件不存在则忽略错误 | |
| // 在生产环境中,变量将通过环境变量直接提供 | |
| if err := godotenv.Load(); err != nil { | |
| log.Println("No .env file found, using environment variables") | |
| } | |
| database.ConnectDatabase() | |
| if os.Getenv("REDIS_URI") != "" { | |
| database.ConnectRedis() | |
| } | |
| createAdminUser() | |
| go services.StartMonitoring() | |
| r := gin.Default() | |
| config := cors.DefaultConfig() | |
| config.AllowAllOrigins = true | |
| config.AllowCredentials = true | |
| r.Use(cors.New(config)) | |
| api := r.Group("/api") | |
| { | |
| api.POST("/login", controllers.Login) | |
| authorized := api.Group("/") | |
| authorized.Use(middleware.RequireAuth) | |
| { | |
| authorized.POST("/monitors", controllers.CreateMonitor) | |
| authorized.GET("/monitors", controllers.GetMonitors) | |
| authorized.GET("/monitors/:id", controllers.GetMonitor) | |
| authorized.PUT("/monitors/:id", controllers.UpdateMonitor) | |
| authorized.DELETE("/monitors/:id", controllers.DeleteMonitor) | |
| authorized.POST("/monitors/:id/check", controllers.ManualCheck) | |
| } | |
| } | |
| r.GET("/ping", func(c *gin.Context) { | |
| c.JSON(200, gin.H{ | |
| "message": "pong", | |
| }) | |
| }) | |
| port := os.Getenv("PORT") | |
| if port == "" { | |
| port = "8080" // Default port | |
| } | |
| r.Run(":" + port) | |
| } | |
| func createAdminUser() { | |
| username := os.Getenv("ADMIN_USERNAME") | |
| password := os.Getenv("ADMIN_PASSWORD") | |
| if username == "" || password == "" { | |
| log.Println("ADMIN_USERNAME or ADMIN_PASSWORD not set, skipping admin user creation.") | |
| return | |
| } | |
| var user models.User | |
| database.DB.First(&user, "username = ?", username) | |
| hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), 10) | |
| if err != nil { | |
| log.Fatalf("Failed to hash password: %v", err) | |
| } | |
| if user.ID == 0 { | |
| // Create new admin user | |
| admin := models.User{Username: username, Password: string(hashedPassword)} | |
| if err := database.DB.Create(&admin).Error; err != nil { | |
| log.Fatalf("Failed to create admin user: %v", err) | |
| } | |
| log.Println("Admin user created successfully.") | |
| } else { | |
| // Update existing admin user's password | |
| if err := database.DB.Model(&user).Update("password", string(hashedPassword)).Error; err != nil { | |
| log.Fatalf("Failed to update admin user: %v", err) | |
| } | |
| log.Println("Admin user password updated successfully.") | |
| } | |
| } |