Files
QWQLwToo 079ee4eaeb
build-winui / winui (push) Has been cancelled
Add server components
2026-06-26 13:28:09 +08:00

108 lines
2.7 KiB
Go

package handlers
import (
"fmt"
"net/http"
"software-download-center/database"
"github.com/gin-gonic/gin"
)
// DefaultAdminUsername 默认管理员用户名
const DefaultAdminUsername = "admin"
// DefaultAdminPassword 默认管理员密码
const DefaultAdminPassword = "admin123456"
// CheckInstallStatus 检查安装状态
func CheckInstallStatus(c *gin.Context) {
isInitialized := database.IsDBInitialized()
c.JSON(http.StatusOK, gin.H{
"initialized": isInitialized,
"default_admin": gin.H{
"username": DefaultAdminUsername,
"password": DefaultAdminPassword,
},
})
}
// InstallDatabaseRequest 数据库安装请求
type InstallDatabaseRequest struct {
Type string `json:"type" binding:"required,oneof=sqlite mysql"`
Host string `json:"host"`
Port string `json:"port"`
User string `json:"user"`
Password string `json:"password"`
Database string `json:"database"`
TablePrefix string `json:"table_prefix"`
DSN string `json:"dsn"` // SQLite 数据目录
}
// InstallDatabase 安装数据库
func InstallDatabase(c *gin.Context) {
// 检查是否已初始化
if database.IsDBInitialized() {
c.JSON(http.StatusBadRequest, gin.H{
"error": "数据库已初始化,请使用设置页面修改配置",
})
return
}
var req InstallDatabaseRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": "请求参数错误: " + err.Error(),
})
return
}
// 验证必填字段
if req.Type == "mysql" {
if req.Host == "" || req.Port == "" || req.User == "" || req.Database == "" {
c.JSON(http.StatusBadRequest, gin.H{
"error": "MySQL 配置不完整:需要 host, port, user, database",
})
return
}
} else if req.Type == "sqlite" {
if req.DSN == "" {
req.DSN = "data"
}
}
// 构建数据库配置
config := &database.DatabaseConfig{
Type: req.Type,
Host: req.Host,
Port: req.Port,
User: req.User,
Password: req.Password,
Database: req.Database,
TablePrefix: req.TablePrefix,
DSN: req.DSN,
}
// 初始化数据库
if err := database.InitDBWithConfig(config); err != nil {
AddLog("ERROR", fmt.Sprintf("数据库安装失败: %s (IP: %s)", err.Error(), c.ClientIP()))
c.JSON(http.StatusInternalServerError, gin.H{
"error": "数据库连接失败: " + err.Error(),
})
return
}
AddLog("INFO", fmt.Sprintf("数据库安装成功: 类型=%s (IP: %s)", req.Type, c.ClientIP()))
c.JSON(http.StatusOK, gin.H{
"message": "数据库安装成功",
"type": req.Type,
})
}
// VerifyDefaultAdmin 验证默认管理员登录
func VerifyDefaultAdmin(username, password string) bool {
return username == DefaultAdminUsername && password == DefaultAdminPassword
}