Validazione Form

Buona Domenica a tutti.

Ho iniziato a muovermi all interno del progetto IO-Gateway senza particolari problemi.
Volevo iniziare con un piccolo contributo, implementando la validazione delle forms lato frontend.

Attualmente credo che le due form da validare siano quelle di Import URL e Single Message.
Proporrei di astrarre la validazione tramite uno standard all interno del progetto, utilizzabile per tutte le form in atto e per tutte quelle che verranno sviluppate nel corso del tempo.

Attendo un riscontro.

Grazie e buona Domenica a tutti,
Valerio.

1 Mi Piace

Ciao. Innanzitutto grazie di voler aiutare :slight_smile:

La validazione form può essere aggiunta direttamente all’IO-SDK.

Notare che si era “offerto volontario” (in privato) @leonardocigolini ma non so se poi ha effettivamente avuto modo di lavorarci per cui attenderei conferma da lui.

Al momento per questa feature semplicemente contruibuire una Pull Request as pagopa/io-sdk (che no sarà abbandonato anche se le nuove features verranno sviluppate su IO-Gateway).

SIngle MEssage va validato ed è un caso a se. Io inizierei con una PR a questo

Per Import URL invece è un caso particolare di validazione della form dei connettori.

Bisognerebbe aggiungere il supporto generico alla validazione di form in modo che si possa specificare il tipo di campo quando un connettore produce una form.

Per maggiori dettagli chiedi pure .

Si, ho scritto una funzione per validare import form, domani faccio una PR

Leonardo

Ciao, allora per la validazione dell import attendo la PR di @leonardocigolini.

Posso ideare e fare una PR per la parte di Single Message.

La mia idea era di astrarre la validazione del field in modo riutilizzabile in questo senso.
Ad esempio, l’attuale json dei campi della form è questo:

let data = {
    fiscal_code: "",
    subject: "",
    markdown: "",
    amount: "",
    notice_number: ""
  };

Pensavo di farlo diventare una cosa del genere :

let data = {
    fiscal_code: {
      value: "",
      rules: "required|fiscalcode"
    },
    subject: {
      value: "",
      rules: "required|min:5|max:255"
    },
    markdown: {
      value: ""
    },
    amount: {
      value: "",
      rules: "required|numeric"
    },
    notice_number: {
      value: "",
      rules: "required|numeric|length:20"
    }
  };

Per ogni field validarlo tramite una funzione che risponda true/false a seconda se il value rispetta le rules indicate.

Spero di essere stato chiaro con la mia idea di validazione dei fields delle form.

Resto in attesa,
Valerio.

1 Mi Piace

L’idea è buona, quello che non mi piace è che la validazione viaggia insieme al dato.
Se io utilizzatore “smanettone” modifico il dato che invio e tolgo la validazione, il controllo viene facilmente raggirato.
Quello che succede normalmente nelle form HTML lato client se non viene fatto un controllo anche sul lato server.

Ottimo! Infatti pensavo qualcosa del genere.
Per me approvato in pieno.
Sarà “indispensabile” documentare la cosa.
Se mi ricordo bene Leonardo ha fato una cosa un po’ meno sofisticata, però evitiamo di fare in due modi la stessa cosa. Magari se @leonardocigolini dai accesso al tuo code ad @Sf3ris può lavorarci per continuare il lavoro?

@magicianred non ho capito… non ti piace the viene fornita una descrizione della form con le regole di validazione? Alternative?

1 Mi Piace

Sì nel descrittore della form sì, è nel dato che non lo ritengo necessario.
Prendo ad esempio quello che c’è in https://github.com/Magicianred/io-sdk-javascript/blob/master/config.js
module.exports = {
// Default time to live of a message
“time_to_live”: 3600,
// Mapping the Heading of the Excel file (first row) in message fields
“field_map”: {
“fiscal_code”: “Destinatario”,
“subject”: “Titolo”,
“markdown”: “Testo”,
“due_date”: “Scadenza”
},
// conversion functions you can apply to each field
“convert”: {
// convert Excel date in JavaScript date
“due_date”: function(v) { return new Date(Math.round((v - 25569)864001000)) }
},
// describe the form - supported field are in the list
“form”: [
// shows infomative message in the form
{
“type”: “message”,
“name”: “note”,
“description”: “Upload the Excel file in the configured format”
},
// upload a file as a base64 string
{
“name”: “file”,
“description”: “Excel File”,
“type”: “upload”,
“required”: true
}
/,
// a string field
{
“name”: “login”,
“description”: “Login”,
“type”: “string”,
“required”: true
},
// a password field
{
“name”: “password”,
“description”: “Password”,
“type”: “password”,
“required”: true
}
/
]
}

Nel nodo form aggiungiamo l’idea di Sf3ris che trovo molto valida. Oltre o in sostituzione alla property required che già c’è.

Quindi le regole di validazione della form possono essere usate lato client per una prima validazione, ma le stesse usate anche per una seconda validazione lato server quando il dato ritorna.

Nel dato che va dal client al server non lo trovo necessario.

Magari ho interpretato male io il messaggio di Sf3ris ed era quello che stava proponendo. Nell’incertezza l’ho proposto comunque.

Purtroppo credo che le validazione lato frontend siano sempre soggette a ‘manipolazioni’ dell utente. Credo sia anche giusto che ci sia una validazione lato backend nelle actions.
Per l esperienza utente avere una validazione lato frontend credo sia la cosa migliore, in quanto se fosse solo lato backend dovrebbe attendere l invio della form prima di conoscere la validità della stessa.
L unica alternativa sarebbe validare server side ad ogni cambio dei valori, ma credo sia un po’ overkill.

Valerio.

1 Mi Piace

Una raccomandazione: per “non perdere” la roba nel forum queste specifiche è meglio riportarle nel wiki, da dove poi è facile metterle nella documentazione

1 Mi Piace

Va benissimo consiglio entrambi di lavorare su una specifica e il wiki è perfetto per queste cose. L’ho messo apposta per questo

1 Mi Piace

Hai ragione il “lato server” in questo caso sono le actions
mentre questo avviene tutto “lato client” giusto

In ogni caso è un’ottima idea, complimenti

@msciab Appena riesco a capire come utilizzare al meglio il wiki documento la mia “proposta”.

Per condividere le specifiche tra frontend e actions si potrebbe creare dei json condivisi con i parametri e le rules da applicare ad essi, così per non incappare in inconsistenze di validazione tra le due parti.

1 Mi Piace

Nel wiki ci si deve solo “registrare”. Il wiki è il mediawiki quello di Wikipedia. Putroppo non ho idea di come si possa fare un “single sign on” con il forum (magari!) quindi ti devi creare un account pure lì.
Per il resto editi… c’è un backp per consentire un rollup da devastazioni per il resto è libero

Ho creato la discussione sul Wiki, invito Valerio e Leonardo ad apportare le modifiche per completare/correggere il documento.

Spero di aver beccato il punto giusto del wiki dove inserirla

Mi sembra che c’è solo una “discussion”… forse non ho beccato il punto giusto :smiley:

No non usare le discussioni per una specifica. Metti nella home page io gateway una sezione ‘specifiche’ e poi crea una pagina IoGatetewayFom e metti li la tua specifica. Usa il wiki come wiki e non come forum. Ognuno aggiunge il suo pezzo. Dove si dissente si discute

1 Mi Piace

Se mi avvisate quando la discussione è “creata nel posto giusto” posso preoccuparmi delle regole di validazione. Quelle che vedo hanno bisogno di essere “addomesticate”.

1 Mi Piace

Eccola qui… https://wiki.noiopen.it/wiki/IoGatewayValidazioneForm

Non è difficile… Ho anche aggiunto la lista delle specifiche alla home page…

Non riesco a creare pagine, solo discussioni.
Forse non le vedo io.

Ok, ho capito come creare pagine collegate.
Grazie della dritta.