db.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package setup
  2. import (
  3. "encoding/json"
  4. "os"
  5. "pmail/config"
  6. "pmail/utils/array"
  7. "pmail/utils/errors"
  8. "pmail/utils/file"
  9. )
  10. func GetDatabaseSettings() (string, string, error) {
  11. configData, err := readConfig()
  12. if err != nil {
  13. return "", "", errors.Wrap(err)
  14. }
  15. return configData.DbType, configData.DbDSN, nil
  16. }
  17. func SetDatabaseSettings(dbType, dbDSN string) error {
  18. configData, err := readConfig()
  19. if err != nil {
  20. return errors.Wrap(err)
  21. }
  22. if !array.InArray(dbType, config.DBTypes) {
  23. return errors.New("dbtype error")
  24. }
  25. configData.DbType = dbType
  26. configData.DbDSN = dbDSN
  27. // 检查数据库是否能正确连接 todo
  28. err = writeConfig(configData)
  29. if err != nil {
  30. return errors.Wrap(err)
  31. }
  32. return nil
  33. }
  34. func writeConfig(cfg *config.Config) error {
  35. bytes, _ := json.Marshal(cfg)
  36. err := os.WriteFile("./config/config.json", bytes, 0666)
  37. if err != nil {
  38. return errors.Wrap(err)
  39. }
  40. return nil
  41. }
  42. func readConfig() (*config.Config, error) {
  43. configData := config.Config{
  44. DkimPrivateKeyPath: "config/dkim/dkim.priv",
  45. SSLPrivateKeyPath: "config/ssl/private.key",
  46. SSLPublicKeyPath: "config/ssl/public.crt",
  47. }
  48. if !file.PathExist("./config/config.json") {
  49. bytes, _ := json.Marshal(configData)
  50. err := os.WriteFile("./config/config.json", bytes, 0666)
  51. if err != nil {
  52. return nil, errors.Wrap(err)
  53. }
  54. } else {
  55. cfgData, err := os.ReadFile("./config/config.json")
  56. if err != nil {
  57. return nil, errors.Wrap(err)
  58. }
  59. err = json.Unmarshal(cfgData, &configData)
  60. if err != nil {
  61. return nil, errors.Wrap(err)
  62. }
  63. }
  64. return &configData, nil
  65. }