feature: Email argument type (#433)

* feature: Email argument type

* bugfix: Fix error if additional links is null
This commit is contained in:
James Read
2024-10-13 19:40:16 +01:00
committed by GitHub
parent 6e0e0e8133
commit b31cdf15a2
3 changed files with 68 additions and 45 deletions

View File

@@ -6,6 +6,7 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"errors" "errors"
"net/mail"
"net/url" "net/url"
"regexp" "regexp"
"strings" "strings"
@@ -137,10 +138,13 @@ func typecheckChoiceEntity(value string, arg *config.ActionArgument) error {
// TypeSafetyCheck checks argument values match a specific type. The types are // TypeSafetyCheck checks argument values match a specific type. The types are
// defined in typecheckRegex, and, you guessed it, uses regex to check for allowed // defined in typecheckRegex, and, you guessed it, uses regex to check for allowed
// characters. // characters.
//gocyclo:ignore
func TypeSafetyCheck(name string, value string, argumentType string) error { func TypeSafetyCheck(name string, value string, argumentType string) error {
switch argumentType { switch argumentType {
case "password": case "password":
return nil return nil
case "email":
return typeSafetyCheckEmail(name, value)
case "url": case "url":
return typeSafetyCheckUrl(name, value) return typeSafetyCheckUrl(name, value)
case "datetime": case "datetime":
@@ -150,6 +154,18 @@ func TypeSafetyCheck(name string, value string, argumentType string) error {
return typeSafetyCheckRegex(name, value, argumentType) return typeSafetyCheckRegex(name, value, argumentType)
} }
func typeSafetyCheckEmail(name string, value string) error {
_, err := mail.ParseAddress(value)
log.Errorf("Email check: %v, %v", err, value)
if err != nil {
return err
}
return nil
}
func typeSafetyCheckDatetime(name string, value string) error { func typeSafetyCheckDatetime(name string, value string) error {
_, err := time.Parse("2006-01-02T15:04:05", value) _, err := time.Parse("2006-01-02T15:04:05", value)

View File

@@ -120,7 +120,9 @@ class ArgumentForm extends window.HTMLElement {
for (const choice of arg.choices) { for (const choice of arg.choices) {
domEl.appendChild(this.createSelectOption(choice)) domEl.appendChild(this.createSelectOption(choice))
} }
} else if (arg.type === 'confirmation') { } else {
switch (arg.type) {
case 'confirmation':
this.domBtnStart.disabled = true this.domBtnStart.disabled = true
domEl = document.createElement('input') domEl = document.createElement('input')
@@ -129,14 +131,18 @@ class ArgumentForm extends window.HTMLElement {
this.domBtnStart.disabled = false this.domBtnStart.disabled = false
domEl.disabled = true domEl.disabled = true
} }
} else if (arg.type === 'datetime') { break
case 'datetime':
domEl = document.createElement('input') domEl = document.createElement('input')
domEl.setAttribute('type', 'datetime-local') domEl.setAttribute('type', 'datetime-local')
domEl.setAttribute('step', '1') domEl.setAttribute('step', '1')
} else if (arg.type === 'password') { break
case 'password':
case 'email':
domEl = document.createElement('input') domEl = document.createElement('input')
domEl.setAttribute('type', 'password') domEl.setAttribute('type', arg.type)
} else { break
default:
domEl = document.createElement('input') domEl = document.createElement('input')
if (arg.type.startsWith('regex:')) { if (arg.type.startsWith('regex:')) {
@@ -170,6 +176,7 @@ class ArgumentForm extends window.HTMLElement {
}) })
} }
} }
}
domEl.name = arg.name domEl.name = arg.name
domEl.value = arg.defaultValue domEl.value = arg.defaultValue

View File

@@ -134,7 +134,7 @@ function processWebuiSettingsJson (settings) {
} }
function processAdditionaLinks (links) { function processAdditionaLinks (links) {
if (links === undefined) { if (links === null) {
return return
} }