db.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package setup
  2. import (
  3. "github.com/Jinnrry/pmail/config"
  4. "github.com/Jinnrry/pmail/db"
  5. "github.com/Jinnrry/pmail/models"
  6. "github.com/Jinnrry/pmail/utils/array"
  7. "github.com/Jinnrry/pmail/utils/context"
  8. "github.com/Jinnrry/pmail/utils/errors"
  9. "github.com/Jinnrry/pmail/utils/password"
  10. )
  11. func GetDatabaseSettings(ctx *context.Context) (string, string, error) {
  12. configData, err := config.ReadConfig()
  13. if err != nil {
  14. return "", "", errors.Wrap(err)
  15. }
  16. if configData.DbType == "" && configData.DbDSN == "" {
  17. return config.DBTypeSQLite, config.ROOT_PATH + "./config/pmail.db", nil
  18. }
  19. return configData.DbType, configData.DbDSN, nil
  20. }
  21. func GetAdminPassword(ctx *context.Context) (string, error) {
  22. users := []*models.User{}
  23. err := db.Instance.Find(&users)
  24. if err != nil {
  25. return "", errors.Wrap(err)
  26. }
  27. if len(users) > 0 {
  28. return users[0].Account, nil
  29. }
  30. return "", nil
  31. }
  32. func SetAdminPassword(ctx *context.Context, account, pwd string) error {
  33. encodePwd := password.Encode(pwd)
  34. var user models.User = models.User{
  35. Account: account,
  36. Name: "admin",
  37. Password: encodePwd,
  38. IsAdmin: 1,
  39. }
  40. _, err := db.Instance.Insert(&user)
  41. if err != nil {
  42. return errors.Wrap(err)
  43. }
  44. return nil
  45. }
  46. func SetDatabaseSettings(ctx *context.Context, dbType, dbDSN string) error {
  47. configData, err := config.ReadConfig()
  48. if err != nil {
  49. return errors.Wrap(err)
  50. }
  51. if !array.InArray(dbType, config.DBTypes) {
  52. return errors.New("dbtype error")
  53. }
  54. if dbDSN == "" {
  55. return errors.New("DSN error")
  56. }
  57. configData.DbType = dbType
  58. configData.DbDSN = dbDSN
  59. err = config.WriteConfig(configData)
  60. if err != nil {
  61. return errors.Wrap(err)
  62. }
  63. config.Init()
  64. // 检查数据库是否能正确连接
  65. err = db.Init("")
  66. if err != nil {
  67. return errors.Wrap(err)
  68. }
  69. return nil
  70. }