Initial commit
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"git.zkcoi.com/zkcoi/meshray/internal/model"
|
||||
"git.zkcoi.com/zkcoi/meshray/internal/store/sqlite"
|
||||
"go.uber.org/zap"
|
||||
"golang.org/x/crypto/bcrypt"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// SystemConfigService 系统配置服务
|
||||
type SystemConfigService struct {
|
||||
store *sqlite.Store
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewSystemConfigService 创建系统配置服务
|
||||
func NewSystemConfigService(store *sqlite.Store, logger *zap.Logger) *SystemConfigService {
|
||||
return &SystemConfigService{
|
||||
store: store,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// GetWGMode 获取当前 WG 运行模式
|
||||
func (s *SystemConfigService) GetWGMode() (string, error) {
|
||||
config, err := s.getConfig("wg_mode")
|
||||
if err != nil {
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// 如果不存在,返回默认值 "auto"
|
||||
return "auto", nil
|
||||
}
|
||||
return "", err
|
||||
}
|
||||
return config.Value, nil
|
||||
}
|
||||
|
||||
// SetWGMode 设置 WG 运行模式(需要重启 MeshRay 才能生效)
|
||||
func (s *SystemConfigService) SetWGMode(mode string) error {
|
||||
// 验证模式值
|
||||
validModes := map[string]bool{
|
||||
"auto": true,
|
||||
"kernel": true,
|
||||
"userspace": true,
|
||||
}
|
||||
if !validModes[mode] {
|
||||
return errors.New("无效的 WG 模式,仅支持:auto, kernel, userspace")
|
||||
}
|
||||
|
||||
return s.setConfig("wg_mode", mode)
|
||||
}
|
||||
|
||||
// GetConfig 获取任意配置项
|
||||
func (s *SystemConfigService) GetConfig(key string) (string, error) {
|
||||
config, err := s.getConfig(key)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return config.Value, nil
|
||||
}
|
||||
|
||||
// SetConfig 设置任意配置项
|
||||
func (s *SystemConfigService) SetConfig(key, value string) error {
|
||||
return s.setConfig(key, value)
|
||||
}
|
||||
|
||||
// getConfig 内部方法:获取配置
|
||||
func (s *SystemConfigService) getConfig(key string) (*model.SystemConfig, error) {
|
||||
var config model.SystemConfig
|
||||
err := s.store.DB().Where("key = ?", key).First(&config).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &config, nil
|
||||
}
|
||||
|
||||
// setConfig 内部方法:设置配置
|
||||
func (s *SystemConfigService) setConfig(key, value string) error {
|
||||
var config model.SystemConfig
|
||||
err := s.store.DB().Where("key = ?", key).First(&config).Error
|
||||
|
||||
if errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
// 创建新配置
|
||||
config = model.SystemConfig{
|
||||
Key: key,
|
||||
Value: value,
|
||||
}
|
||||
return s.store.DB().Create(&config).Error
|
||||
}
|
||||
|
||||
// 更新现有配置
|
||||
config.Value = value
|
||||
return s.store.DB().Save(&config).Error
|
||||
}
|
||||
|
||||
// ChangePassword 修改密码(P1)
|
||||
func (s *SystemConfigService) ChangePassword(userID uint, oldPassword, newPassword string) error {
|
||||
// 获取用户
|
||||
var user model.User
|
||||
if err := s.store.DB().First(&user, userID).Error; err != nil {
|
||||
return errors.New("用户不存在")
|
||||
}
|
||||
|
||||
// 验证旧密码
|
||||
if err := bcrypt.CompareHashAndPassword([]byte(user.PasswordHash), []byte(oldPassword)); err != nil {
|
||||
return errors.New("原密码错误")
|
||||
}
|
||||
|
||||
// 加密新密码
|
||||
hashedPassword, err := bcrypt.GenerateFromPassword([]byte(newPassword), bcrypt.DefaultCost)
|
||||
if err != nil {
|
||||
s.logger.Error("加密新密码失败", zap.Error(err))
|
||||
return errors.New("密码加密失败")
|
||||
}
|
||||
|
||||
// 更新密码
|
||||
return s.store.DB().Model(&user).Update("password_hash", string(hashedPassword)).Error
|
||||
}
|
||||
Reference in New Issue
Block a user