@@ -5,12 +5,15 @@ import (
55 "fmt"
66 "os"
77 "sort"
8+ "strings"
89
910 homedir "github.com/mitchellh/go-homedir"
11+ "github.com/spf13/cast"
1012 "github.com/spf13/viper"
1113
1214 "github.com/liquidweb/liquidweb-cli/config"
1315 "github.com/liquidweb/liquidweb-cli/utils"
16+ "github.com/liquidweb/liquidweb-cli/validate"
1417)
1518
1619var (
@@ -44,8 +47,8 @@ func NagsOn() (err error) {
4447
4548func GetPermitted () (permitted []string ) {
4649 permitted = make ([]string , 0 , len (permittedFlags ))
47- for flag , val := range permittedFlags {
48- if ! val {
50+ for flag , opts := range permittedFlags {
51+ if enabled , ok := opts [ "enabled" ].( bool ); ! enabled || ! ok {
4952 continue
5053 }
5154 permitted = append (permitted , flag )
@@ -78,7 +81,7 @@ func GetOrNag(flag string) (value interface{}) {
7881}
7982
8083func Get (flag string ) (value interface {}, err error ) {
81- if err = permittedFlagOrError (flag ); err != nil {
84+ if _ , err = permittedFlagOrError (flag ); err != nil {
8285 return
8386 }
8487
@@ -104,7 +107,13 @@ func GetAll() (all AllFlags, err error) {
104107}
105108
106109func Set (flag string , value interface {}) (err error ) {
107- if err = permittedFlagOrError (flag ); err != nil {
110+ var validator string
111+ validator , err = permittedFlagOrError (flag )
112+ if err != nil {
113+ return
114+ }
115+
116+ if err = validateFlagValue (validator , value ); err != nil {
108117 return
109118 }
110119
@@ -126,7 +135,7 @@ func Set(flag string, value interface{}) (err error) {
126135}
127136
128137func Delete (flag string ) (err error ) {
129- if err = permittedFlagOrError (flag ); err != nil {
138+ if _ , err = permittedFlagOrError (flag ); err != nil {
130139 return
131140 }
132141
@@ -146,16 +155,46 @@ func Delete(flag string) (err error) {
146155 return
147156}
148157
149- func permittedFlagOrError (flag string ) (err error ) {
158+ func permittedFlagOrError (flag string ) (validator string , err error ) {
150159 if flag == "" {
151160 err = ErrorInvalidFlagName
152161 return
153162 }
154163
155- if v , exists := permittedFlags [flag ]; ! exists || ! v {
164+ opts , exists := permittedFlags [flag ]
165+ if ! exists {
166+ err = fmt .Errorf ("%s %w" , flag , ErrorForbiddenFlag )
167+ return
168+ }
169+
170+ if v , ok := opts ["enabled" ].(bool ); ! ok || ! v {
156171 err = fmt .Errorf ("%s %w" , flag , ErrorForbiddenFlag )
157172 }
158173
174+ validator = cast .ToString (opts ["type" ])
175+
176+ return
177+ }
178+
179+ func validateFlagValue (validator string , value interface {}) (err error ) {
180+ var validateFields map [interface {}]interface {}
181+
182+ if strings .HasSuffix (validator , "Int64" ) {
183+ validateFields = map [interface {}]interface {}{
184+ cast .ToInt64 (value ): "PositiveInt64" ,
185+ }
186+ } else if strings .HasSuffix (validator , "Int" ) {
187+ validateFields = map [interface {}]interface {}{
188+ cast .ToInt (value ): "PositiveInt64" ,
189+ }
190+ } else if strings .HasSuffix (validator , "String" ) {
191+ validateFields = map [interface {}]interface {}{
192+ cast .ToString (value ): "NonEmptyString" ,
193+ }
194+ }
195+
196+ err = validate .Validate (validateFields )
197+
159198 return
160199}
161200
0 commit comments