fix: add missing field mapping for settings (#35)

* feat: add missing field mapping for settings

* fix: guest access settings expire should be int
This commit is contained in:
Mateusz Filipowicz
2025-02-21 16:53:43 +01:00
committed by GitHub
parent ae23f73810
commit 95a4ff87ea
3 changed files with 65 additions and 36 deletions

View File

@@ -369,6 +369,11 @@ customizations:
omitEmpty: true omitEmpty: true
XWANPassword: XWANPassword:
omitEmpty: true omitEmpty: true
SettingGuestAccess:
fields:
Expire:
fieldType: "int"
customUnmarshalType: "emptyStringInt"
User: User:
fields: fields:
Blocked: Blocked:

View File

@@ -14,63 +14,85 @@ type Setting struct {
func (s *Setting) newFields() (interface{}, error) { func (s *Setting) newFields() (interface{}, error) {
switch s.Key { switch s.Key {
case "auto_speedtest": case SettingAutoSpeedtestKey:
return &SettingAutoSpeedtest{}, nil return &SettingAutoSpeedtest{}, nil
case "baresip": case SettingBaresipKey:
return &SettingBaresip{}, nil return &SettingBaresip{}, nil
case "broadcast": case SettingBroadcastKey:
return &SettingBroadcast{}, nil return &SettingBroadcast{}, nil
case "connectivity": case SettingConnectivityKey:
return &SettingConnectivity{}, nil return &SettingConnectivity{}, nil
case "country": case SettingCountryKey:
return &SettingCountry{}, nil return &SettingCountry{}, nil
case "dpi": case SettingDashboardKey:
return &SettingDashboard{}, nil
case SettingDohKey:
return &SettingDoh{}, nil
case SettingDpiKey:
return &SettingDpi{}, nil return &SettingDpi{}, nil
case "element_adopt": case SettingElementAdoptKey:
return &SettingElementAdopt{}, nil return &SettingElementAdopt{}, nil
case "guest_access": case SettingEtherLightingKey:
return &SettingEtherLighting{}, nil
case SettingEvaluationScoreKey:
return &SettingEvaluationScore{}, nil
case SettingGlobalApKey:
return &SettingGlobalAp{}, nil
case SettingGlobalNatKey:
return &SettingGlobalNat{}, nil
case SettingGlobalSwitchKey:
return &SettingGlobalSwitch{}, nil
case SettingGuestAccessKey:
return &SettingGuestAccess{}, nil return &SettingGuestAccess{}, nil
// case "ips": case SettingIpsKey:
// return &SettingI return &SettingIps{}, nil
case "lcm": case SettingLcmKey:
return &SettingLcm{}, nil return &SettingLcm{}, nil
case "locale": case SettingLocaleKey:
return &SettingLocale{}, nil return &SettingLocale{}, nil
case "mgmt": case SettingMagicSiteToSiteVpnKey:
return &SettingMagicSiteToSiteVpn{}, nil
case SettingMgmtKey:
return &SettingMgmt{}, nil return &SettingMgmt{}, nil
case "network_optimization": case SettingNetflowKey:
return &SettingNetflow{}, nil
case SettingNetworkOptimizationKey:
return &SettingNetworkOptimization{}, nil return &SettingNetworkOptimization{}, nil
case "ntp": case SettingNtpKey:
return &SettingNtp{}, nil return &SettingNtp{}, nil
case "porta": case SettingPortaKey:
return &SettingPorta{}, nil return &SettingPorta{}, nil
case "radio_ai": case SettingRadioAiKey:
return &SettingRadioAi{}, nil return &SettingRadioAi{}, nil
case "radius": case SettingRadiusKey:
return &SettingRadius{}, nil return &SettingRadius{}, nil
case "rsyslogd": case SettingRsyslogdKey:
return &SettingRsyslogd{}, nil return &SettingRsyslogd{}, nil
case "snmp": case SettingSnmpKey:
return &SettingSnmp{}, nil return &SettingSnmp{}, nil
case "super_cloudaccess": case SettingSslInspectionKey:
return &SettingSslInspection{}, nil
case SettingSuperCloudaccessKey:
return &SettingSuperCloudaccess{}, nil return &SettingSuperCloudaccess{}, nil
case "super_events": case SettingSuperEventsKey:
return &SettingSuperEvents{}, nil return &SettingSuperEvents{}, nil
case "super_fwupdate": case SettingSuperFwupdateKey:
return &SettingSuperFwupdate{}, nil return &SettingSuperFwupdate{}, nil
case "super_identity": case SettingSuperIdentityKey:
return &SettingSuperIdentity{}, nil return &SettingSuperIdentity{}, nil
case "super_mail": case SettingSuperMailKey:
return &SettingSuperMail{}, nil return &SettingSuperMail{}, nil
case "super_mgmt": case SettingSuperMgmtKey:
return &SettingSuperMgmt{}, nil return &SettingSuperMgmt{}, nil
case "super_sdn": case SettingSuperSdnKey:
return &SettingSuperSdn{}, nil return &SettingSuperSdn{}, nil
case "super_smtp": case SettingSuperSmtpKey:
return &SettingSuperSmtp{}, nil return &SettingSuperSmtp{}, nil
case "usg": case SettingTeleportKey:
return &SettingTeleport{}, nil
case SettingUsgKey:
return &SettingUsg{}, nil return &SettingUsg{}, nil
case "usw": case SettingUswKey:
return &SettingUsw{}, nil return &SettingUsw{}, nil
} }
@@ -98,7 +120,7 @@ func (c *client) SetSetting(ctx context.Context, site, key string, reqBody inter
break break
} }
} }
if setting == nil { if setting == nil || setting.Key != key {
return nil, ErrNotFound return nil, ErrNotFound
} }
fields, err := setting.newFields() fields, err := setting.newFields()
@@ -122,7 +144,7 @@ func (c *client) GetSetting(ctx context.Context, site, key string) (*Setting, in
err := c.Get(ctx, fmt.Sprintf("s/%s/get/setting", site), nil, &respBody) err := c.Get(ctx, fmt.Sprintf("s/%s/get/setting", site), nil, &respBody)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, fmt.Errorf("unable to get setting %s: %w", key, err)
} }
var raw json.RawMessage var raw json.RawMessage
@@ -130,14 +152,14 @@ func (c *client) GetSetting(ctx context.Context, site, key string) (*Setting, in
for _, d := range respBody.Data { for _, d := range respBody.Data {
err = json.Unmarshal(d, &setting) err = json.Unmarshal(d, &setting)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, fmt.Errorf("unable to decode get setting %s: %w", key, err)
} }
if setting.Key == key { if setting.Key == key {
raw = d raw = d
break break
} }
} }
if setting == nil { if setting == nil || setting.Key != key {
return nil, nil, ErrNotFound return nil, nil, ErrNotFound
} }
@@ -148,7 +170,7 @@ func (c *client) GetSetting(ctx context.Context, site, key string) (*Setting, in
err = json.Unmarshal(raw, &fields) err = json.Unmarshal(raw, &fields)
if err != nil { if err != nil {
return nil, nil, err return nil, nil, fmt.Errorf("unable to decode get setting fields %s: %w", key, err)
} }
return setting, fields, nil return setting, fields, nil

View File

@@ -35,7 +35,7 @@ type SettingGuestAccess struct {
AuthorizeUseSandbox bool `json:"authorize_use_sandbox"` AuthorizeUseSandbox bool `json:"authorize_use_sandbox"`
CustomIP string `json:"custom_ip" validate:"omitempty,ipv4"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^$ CustomIP string `json:"custom_ip" validate:"omitempty,ipv4"` // ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$|^$
EcEnabled bool `json:"ec_enabled"` EcEnabled bool `json:"ec_enabled"`
Expire string `json:"expire,omitempty"` // [\d]+|custom Expire int `json:"expire,omitempty"` // [\d]+|custom
ExpireNumber int `json:"expire_number,omitempty"` // ^[1-9][0-9]{0,5}|1000000$ ExpireNumber int `json:"expire_number,omitempty"` // ^[1-9][0-9]{0,5}|1000000$
ExpireUnit int `json:"expire_unit,omitempty" validate:"omitempty,oneof=1 60 1440"` // 1|60|1440 ExpireUnit int `json:"expire_unit,omitempty" validate:"omitempty,oneof=1 60 1440"` // 1|60|1440
FacebookAppID string `json:"facebook_app_id"` FacebookAppID string `json:"facebook_app_id"`
@@ -131,6 +131,7 @@ type SettingGuestAccess struct {
func (dst *SettingGuestAccess) UnmarshalJSON(b []byte) error { func (dst *SettingGuestAccess) UnmarshalJSON(b []byte) error {
type Alias SettingGuestAccess type Alias SettingGuestAccess
aux := &struct { aux := &struct {
Expire emptyStringInt `json:"expire"`
ExpireNumber emptyStringInt `json:"expire_number"` ExpireNumber emptyStringInt `json:"expire_number"`
ExpireUnit emptyStringInt `json:"expire_unit"` ExpireUnit emptyStringInt `json:"expire_unit"`
PortalCustomizedBoxOpacity emptyStringInt `json:"portal_customized_box_opacity"` PortalCustomizedBoxOpacity emptyStringInt `json:"portal_customized_box_opacity"`
@@ -147,6 +148,7 @@ func (dst *SettingGuestAccess) UnmarshalJSON(b []byte) error {
if err != nil { if err != nil {
return fmt.Errorf("unable to unmarshal alias: %w", err) return fmt.Errorf("unable to unmarshal alias: %w", err)
} }
dst.Expire = int(aux.Expire)
dst.ExpireNumber = int(aux.ExpireNumber) dst.ExpireNumber = int(aux.ExpireNumber)
dst.ExpireUnit = int(aux.ExpireUnit) dst.ExpireUnit = int(aux.ExpireUnit)
dst.PortalCustomizedBoxOpacity = int(aux.PortalCustomizedBoxOpacity) dst.PortalCustomizedBoxOpacity = int(aux.PortalCustomizedBoxOpacity)