diff --git a/internal/executor/arguments.go b/internal/executor/arguments.go index 4d3fbd5..a6b7380 100644 --- a/internal/executor/arguments.go +++ b/internal/executor/arguments.go @@ -109,19 +109,27 @@ func TypeSafetyCheck(name string, value string, argumentType string) error { } func typeSafetyCheckRegex(name string, value string, argumentType string) error { - pattern, found := typecheckRegex[argumentType] + pattern := "" - if !found { - return errors.New("argument type not implemented " + argumentType) + if strings.HasPrefix(argumentType, "regex:") { + pattern = strings.Replace(argumentType, "regex:", "", 1) + } else { + found := false + pattern, found = typecheckRegex[argumentType] + + if !found { + return errors.New("argument type not implemented " + argumentType) + } } matches, _ := regexp.MatchString(pattern, value) if !matches { log.WithFields(log.Fields{ - "name": name, - "value": value, - "type": argumentType, + "name": name, + "value": value, + "type": argumentType, + "pattern": pattern, }).Warn("Arg type check safety failure") return errors.New("invalid argument, doesn't match " + argumentType) diff --git a/webui.dev/js/ArgumentForm.js b/webui.dev/js/ArgumentForm.js index 1728084..d9712b4 100644 --- a/webui.dev/js/ArgumentForm.js +++ b/webui.dev/js/ArgumentForm.js @@ -108,6 +108,11 @@ class ArgumentForm extends window.HTMLElement { domEl.setAttribute('step', '1') } else { domEl = document.createElement('input') + + if (arg.type.startsWith(':regex')) { + domEl.setAttribute('pattern', arg.type.replace('regex:', '')) + } + domEl.onchange = () => { const validateArgumentTypeArgs = { value: domEl.value,