123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package service
- import (
- _ "embed"
- "strconv"
- "strings"
- "x-ui/database"
- "x-ui/database/model"
- "x-ui/logger"
- "x-ui/util/random"
- )
- //go:embed config.json
- var xrayTemplateConfig string
- type SettingService struct {
- }
- func (s *SettingService) ClearSetting() error {
- db := database.GetDB()
- return db.Delete(model.Setting{}).Error
- }
- func (s *SettingService) getSetting(key string) (*model.Setting, error) {
- db := database.GetDB()
- setting := &model.Setting{}
- err := db.Model(model.Setting{}).Where("key = ?", key).First(setting).Error
- if err != nil {
- return nil, err
- }
- return setting, nil
- }
- func (s *SettingService) saveSetting(key string, value string) error {
- setting, err := s.getSetting(key)
- db := database.GetDB()
- if database.IsNotFound(err) {
- return db.Create(&model.Setting{
- Key: key,
- Value: value,
- }).Error
- } else if err != nil {
- return err
- }
- setting.Key = key
- setting.Value = value
- return db.Save(setting).Error
- }
- func (s *SettingService) getString(key string, defaultValue string) (string, error) {
- setting, err := s.getSetting(key)
- if database.IsNotFound(err) {
- return defaultValue, nil
- } else if err != nil {
- return "", err
- }
- return setting.Value, nil
- }
- func (s *SettingService) getInt(key string, defaultValue int) (int, error) {
- str, err := s.getString(key, strconv.Itoa(defaultValue))
- if err != nil {
- return 0, err
- }
- return strconv.Atoi(str)
- }
- func (s *SettingService) GetXrayConfigTemplate() (string, error) {
- return s.getString("xray_template_config", xrayTemplateConfig)
- }
- func (s *SettingService) GetListen() (string, error) {
- return s.getString("web_listen", "")
- }
- func (s *SettingService) GetPort() (int, error) {
- return s.getInt("web_port", 65432)
- }
- func (s *SettingService) GetCertFile() (string, error) {
- return s.getString("web_cert_file", "")
- }
- func (s *SettingService) GetKeyFile() (string, error) {
- return s.getString("web_key_file", "")
- }
- func (s *SettingService) GetSecret() ([]byte, error) {
- seq := random.Seq(32)
- secret, err := s.getString("secret", seq)
- if secret == seq {
- err := s.saveSetting("secret", secret)
- if err != nil {
- logger.Warning("save secret failed:", err)
- }
- }
- return []byte(secret), err
- }
- func (s *SettingService) GetBasePath() (string, error) {
- basePath, err := s.getString("web_base_path", "/")
- if err != nil {
- return "", err
- }
- if !strings.HasPrefix(basePath, "/") {
- basePath = "/" + basePath
- }
- if !strings.HasSuffix(basePath, "/") {
- basePath += "/"
- }
- return basePath, nil
- }
|