| | 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"
|
| | }
|
| |
|