170 lines
4.4 KiB
Go
170 lines
4.4 KiB
Go
package setting_service
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
|
|
"github.com/XingfenD/yoresee_doc/internal/constant"
|
|
"github.com/XingfenD/yoresee_doc/internal/service/config_service"
|
|
"github.com/XingfenD/yoresee_doc/internal/status"
|
|
"github.com/XingfenD/yoresee_doc/internal/utils"
|
|
"github.com/XingfenD/yoresee_doc/pkg/storage"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
type SettingOption struct {
|
|
Label string
|
|
LabelKey string
|
|
Value string
|
|
}
|
|
|
|
type SettingUI struct {
|
|
Component string
|
|
Options []SettingOption
|
|
Placeholder string
|
|
PlaceholderKey string
|
|
}
|
|
|
|
type SettingItem struct {
|
|
Key string
|
|
Label string
|
|
LabelKey string
|
|
Description string
|
|
DescriptionKey string
|
|
Type string
|
|
UI SettingUI
|
|
Value string
|
|
DefaultValue string
|
|
Required bool
|
|
Readonly bool
|
|
}
|
|
|
|
type SettingGroup struct {
|
|
Key string
|
|
Title string
|
|
TitleKey string
|
|
Items []SettingItem
|
|
}
|
|
|
|
type SettingUpdate struct {
|
|
Key string
|
|
Value string
|
|
}
|
|
|
|
type SettingService struct{}
|
|
|
|
var SettingSvc *SettingService
|
|
|
|
func InitSettingService() {
|
|
SettingSvc = &SettingService{}
|
|
}
|
|
|
|
func (s *SettingService) GetSettings(ctx context.Context, scene string) ([]SettingGroup, error) {
|
|
if scene == "" || scene == "system" || scene == "manage" {
|
|
return s.buildSystemSecuritySettings(ctx), nil
|
|
}
|
|
return []SettingGroup{}, nil
|
|
}
|
|
|
|
func (s *SettingService) UpdateSettings(ctx context.Context, updates []SettingUpdate) error {
|
|
for _, update := range updates {
|
|
key := strings.TrimSpace(update.Key)
|
|
if key == "" {
|
|
continue
|
|
}
|
|
switch key {
|
|
case systemRegisterModeKey():
|
|
val := strings.TrimSpace(update.Value)
|
|
if val != constant.RegisterMode_Open && val != constant.RegisterMode_Invite {
|
|
return status.GenErrWithCustomMsg(status.StatusParamError, "invalid register mode")
|
|
}
|
|
if err := config_service.ConfigSvc.Set(ctx, key, val); err != nil {
|
|
logrus.Errorf("[Service layer: SettingService] set register mode failed, key=%s, value=%s, err=%+v", key, val, err)
|
|
return status.GenErrWithCustomMsg(err, "update register mode failed")
|
|
}
|
|
storage.Consul.ClearCacheKey(key)
|
|
case systemRegisterLimitKey():
|
|
val := strings.ToLower(strings.TrimSpace(update.Value))
|
|
boolVal := val == "true" || val == "1" || val == "on"
|
|
writeVal := constant.RegisterLimit_Off
|
|
if boolVal {
|
|
writeVal = constant.RegisterLimit_On
|
|
}
|
|
if err := config_service.ConfigSvc.Set(ctx, key, writeVal); err != nil {
|
|
logrus.Errorf("[Service layer: SettingService] set register limit failed, key=%s, value=%s, err=%+v", key, writeVal, err)
|
|
return status.GenErrWithCustomMsg(err, "update register limit failed")
|
|
}
|
|
storage.Consul.ClearCacheKey(key)
|
|
default:
|
|
return status.GenErrWithCustomMsg(status.StatusParamError, "unknown setting key")
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *SettingService) buildSystemSecuritySettings(ctx context.Context) []SettingGroup {
|
|
registerMode := config_service.ConfigSvc.GetSystemRegisterMode(ctx)
|
|
registerLimit := config_service.ConfigSvc.GetSystemRegisterLimit(ctx)
|
|
limitValue := "false"
|
|
if registerLimit {
|
|
limitValue = "true"
|
|
}
|
|
|
|
return []SettingGroup{
|
|
{
|
|
Key: "security",
|
|
TitleKey: "system.security.registration",
|
|
Items: []SettingItem{
|
|
{
|
|
Key: systemRegisterModeKey(),
|
|
LabelKey: "system.security.registrationMode",
|
|
Type: "string",
|
|
Value: registerMode,
|
|
DefaultValue: constant.RegisterMode_Invite,
|
|
Required: true,
|
|
UI: SettingUI{
|
|
Component: "radio",
|
|
Options: []SettingOption{
|
|
{
|
|
LabelKey: "system.security.freeRegister",
|
|
Value: constant.RegisterMode_Open,
|
|
},
|
|
{
|
|
LabelKey: "system.security.inviteOnly",
|
|
Value: constant.RegisterMode_Invite,
|
|
},
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Key: systemRegisterLimitKey(),
|
|
LabelKey: "system.security.registerLimit",
|
|
DescriptionKey: "system.security.registerLimitDesc",
|
|
Type: "bool",
|
|
Value: limitValue,
|
|
DefaultValue: "false",
|
|
UI: SettingUI{
|
|
Component: "switch",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func systemRegisterModeKey() string {
|
|
return utils.GenConfigKey(
|
|
constant.ConfigKey_First_System,
|
|
constant.ConfigKey_Second_Security,
|
|
constant.ConfigKey_Third_RegisterMode,
|
|
)
|
|
}
|
|
|
|
func systemRegisterLimitKey() string {
|
|
return utils.GenConfigKey(
|
|
constant.ConfigKey_First_System,
|
|
constant.ConfigKey_Second_Security,
|
|
constant.ConfigKey_Third_RegisterLimit,
|
|
)
|
|
}
|