Smail/server/services/setup/db.go
Jinnrry 5af46b32f6
Feature/v2.8.0 (#231)
支持Imap协议
升级所有依赖
修复部分bug
2025-01-04 16:23:07 +08:00

87 lines
1.8 KiB
Go

package setup
import (
"github.com/Jinnrry/pmail/config"
"github.com/Jinnrry/pmail/db"
"github.com/Jinnrry/pmail/models"
"github.com/Jinnrry/pmail/utils/array"
"github.com/Jinnrry/pmail/utils/context"
"github.com/Jinnrry/pmail/utils/errors"
"github.com/Jinnrry/pmail/utils/password"
)
func GetDatabaseSettings(ctx *context.Context) (string, string, error) {
configData, err := config.ReadConfig()
if err != nil {
return "", "", errors.Wrap(err)
}
if configData.DbType == "" && configData.DbDSN == "" {
return config.DBTypeSQLite, config.ROOT_PATH + "./config/pmail.db", nil
}
return configData.DbType, configData.DbDSN, nil
}
func GetAdminPassword(ctx *context.Context) (string, error) {
users := []*models.User{}
err := db.Instance.Find(&users)
if err != nil {
return "", errors.Wrap(err)
}
if len(users) > 0 {
return users[0].Account, nil
}
return "", nil
}
func SetAdminPassword(ctx *context.Context, account, pwd string) error {
encodePwd := password.Encode(pwd)
var user models.User = models.User{
Account: account,
Name: "admin",
Password: encodePwd,
IsAdmin: 1,
}
_, err := db.Instance.Insert(&user)
if err != nil {
return errors.Wrap(err)
}
return nil
}
func SetDatabaseSettings(ctx *context.Context, dbType, dbDSN string) error {
configData, err := config.ReadConfig()
if err != nil {
return errors.Wrap(err)
}
if !array.InArray(dbType, config.DBTypes) {
return errors.New("dbtype error")
}
if dbDSN == "" {
return errors.New("DSN error")
}
configData.DbType = dbType
configData.DbDSN = dbDSN
err = config.WriteConfig(configData)
if err != nil {
return errors.Wrap(err)
}
config.Init()
// 检查数据库是否能正确连接
err = db.Init("")
if err != nil {
return errors.Wrap(err)
}
return nil
}