| package controller |
|
|
| import ( |
| "time" |
|
|
| "github.com/QuantumNous/new-api/common" |
| "github.com/QuantumNous/new-api/constant" |
| "github.com/QuantumNous/new-api/model" |
| "github.com/QuantumNous/new-api/setting/operation_setting" |
| "github.com/gin-gonic/gin" |
| ) |
|
|
| type Setup struct { |
| Status bool `json:"status"` |
| RootInit bool `json:"root_init"` |
| DatabaseType string `json:"database_type"` |
| } |
|
|
| type SetupRequest struct { |
| Username string `json:"username"` |
| Password string `json:"password"` |
| ConfirmPassword string `json:"confirmPassword"` |
| SelfUseModeEnabled bool `json:"SelfUseModeEnabled"` |
| DemoSiteEnabled bool `json:"DemoSiteEnabled"` |
| } |
|
|
| func GetSetup(c *gin.Context) { |
| setup := Setup{ |
| Status: constant.Setup, |
| } |
| if constant.Setup { |
| c.JSON(200, gin.H{ |
| "success": true, |
| "data": setup, |
| }) |
| return |
| } |
| setup.RootInit = model.RootUserExists() |
| if common.UsingMySQL { |
| setup.DatabaseType = "mysql" |
| } |
| if common.UsingPostgreSQL { |
| setup.DatabaseType = "postgres" |
| } |
| if common.UsingSQLite { |
| setup.DatabaseType = "sqlite" |
| } |
| c.JSON(200, gin.H{ |
| "success": true, |
| "data": setup, |
| }) |
| } |
|
|
| func PostSetup(c *gin.Context) { |
| |
| if constant.Setup { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "系统已经初始化完成", |
| }) |
| return |
| } |
|
|
| |
| rootExists := model.RootUserExists() |
|
|
| var req SetupRequest |
| err := c.ShouldBindJSON(&req) |
| if err != nil { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "请求参数有误", |
| }) |
| return |
| } |
|
|
| |
| if !rootExists { |
| |
| if len(req.Username) > 12 { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "用户名长度不能超过12个字符", |
| }) |
| return |
| } |
| |
| if req.Password != req.ConfirmPassword { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "两次输入的密码不一致", |
| }) |
| return |
| } |
|
|
| if len(req.Password) < 8 { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "密码长度至少为8个字符", |
| }) |
| return |
| } |
|
|
| |
| hashedPassword, err := common.Password2Hash(req.Password) |
| if err != nil { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "系统错误: " + err.Error(), |
| }) |
| return |
| } |
| rootUser := model.User{ |
| Username: req.Username, |
| Password: hashedPassword, |
| Role: common.RoleRootUser, |
| Status: common.UserStatusEnabled, |
| DisplayName: "Root User", |
| AccessToken: nil, |
| Quota: 100000000, |
| } |
| err = model.DB.Create(&rootUser).Error |
| if err != nil { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "创建管理员账号失败: " + err.Error(), |
| }) |
| return |
| } |
| } |
|
|
| |
| operation_setting.SelfUseModeEnabled = req.SelfUseModeEnabled |
| operation_setting.DemoSiteEnabled = req.DemoSiteEnabled |
|
|
| |
| err = model.UpdateOption("SelfUseModeEnabled", boolToString(req.SelfUseModeEnabled)) |
| if err != nil { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "保存自用模式设置失败: " + err.Error(), |
| }) |
| return |
| } |
|
|
| err = model.UpdateOption("DemoSiteEnabled", boolToString(req.DemoSiteEnabled)) |
| if err != nil { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "保存演示站点模式设置失败: " + err.Error(), |
| }) |
| return |
| } |
|
|
| |
| constant.Setup = true |
|
|
| setup := model.Setup{ |
| Version: common.Version, |
| InitializedAt: time.Now().Unix(), |
| } |
| err = model.DB.Create(&setup).Error |
| if err != nil { |
| c.JSON(200, gin.H{ |
| "success": false, |
| "message": "系统初始化失败: " + err.Error(), |
| }) |
| return |
| } |
|
|
| c.JSON(200, gin.H{ |
| "success": true, |
| "message": "系统初始化成功", |
| }) |
| } |
|
|
| func boolToString(b bool) string { |
| if b { |
| return "true" |
| } |
| return "false" |
| } |
|
|