setting.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package service
  2. import (
  3. _ "embed"
  4. "strconv"
  5. "strings"
  6. "x-ui/database"
  7. "x-ui/database/model"
  8. "x-ui/logger"
  9. "x-ui/util/random"
  10. )
  11. //go:embed config.json
  12. var xrayTemplateConfig string
  13. type SettingService struct {
  14. }
  15. func (s *SettingService) ClearSetting() error {
  16. db := database.GetDB()
  17. return db.Delete(model.Setting{}).Error
  18. }
  19. func (s *SettingService) getSetting(key string) (*model.Setting, error) {
  20. db := database.GetDB()
  21. setting := &model.Setting{}
  22. err := db.Model(model.Setting{}).Where("key = ?", key).First(setting).Error
  23. if err != nil {
  24. return nil, err
  25. }
  26. return setting, nil
  27. }
  28. func (s *SettingService) saveSetting(key string, value string) error {
  29. setting, err := s.getSetting(key)
  30. db := database.GetDB()
  31. if database.IsNotFound(err) {
  32. return db.Create(&model.Setting{
  33. Key: key,
  34. Value: value,
  35. }).Error
  36. } else if err != nil {
  37. return err
  38. }
  39. setting.Key = key
  40. setting.Value = value
  41. return db.Save(setting).Error
  42. }
  43. func (s *SettingService) getString(key string, defaultValue string) (string, error) {
  44. setting, err := s.getSetting(key)
  45. if database.IsNotFound(err) {
  46. return defaultValue, nil
  47. } else if err != nil {
  48. return "", err
  49. }
  50. return setting.Value, nil
  51. }
  52. func (s *SettingService) getInt(key string, defaultValue int) (int, error) {
  53. str, err := s.getString(key, strconv.Itoa(defaultValue))
  54. if err != nil {
  55. return 0, err
  56. }
  57. return strconv.Atoi(str)
  58. }
  59. func (s *SettingService) GetXrayConfigTemplate() (string, error) {
  60. return s.getString("xray_template_config", xrayTemplateConfig)
  61. }
  62. func (s *SettingService) GetListen() (string, error) {
  63. return s.getString("web_listen", "")
  64. }
  65. func (s *SettingService) GetPort() (int, error) {
  66. return s.getInt("web_port", 65432)
  67. }
  68. func (s *SettingService) GetCertFile() (string, error) {
  69. return s.getString("web_cert_file", "")
  70. }
  71. func (s *SettingService) GetKeyFile() (string, error) {
  72. return s.getString("web_key_file", "")
  73. }
  74. func (s *SettingService) GetSecret() ([]byte, error) {
  75. seq := random.Seq(32)
  76. secret, err := s.getString("secret", seq)
  77. if secret == seq {
  78. err := s.saveSetting("secret", secret)
  79. if err != nil {
  80. logger.Warning("save secret failed:", err)
  81. }
  82. }
  83. return []byte(secret), err
  84. }
  85. func (s *SettingService) GetBasePath() (string, error) {
  86. basePath, err := s.getString("web_base_path", "/")
  87. if err != nil {
  88. return "", err
  89. }
  90. if !strings.HasPrefix(basePath, "/") {
  91. basePath = "/" + basePath
  92. }
  93. if !strings.HasSuffix(basePath, "/") {
  94. basePath += "/"
  95. }
  96. return basePath, nil
  97. }