italia / verificac19-sdk

✅ Official VerificaC19 Node.js SDK
MIT License
49 stars 17 forks source link

Errore validazione Certificato #4

Closed PaoloG1980 closed 2 years ago

PaoloG1980 commented 2 years ago

@astagi scusa se ti disturbo, ma ho questo problema quando eseguo l'istruzione: const dccTest = await Certificate.fromRaw(qrcode) mi da questo errore CertificateParsingError: certificate can't be parsed, Invalid base45 string

il qrCode della prova è quello del mio certificato personale e sono sicuro che sia valido. Cosa posso aver sbagliato? Grazie

lucadentella commented 2 years ago

Paolo

ma la stessa stringa che passi al metodo fromRaw, se la metti ad esempio qui: http://jumpjack.altervista.org/greenpass/ ti viene correttamente analizzata?

astagi commented 2 years ago

@PaoloG1980 molto strano! sei sicuro che qrcode sia il raw del codice e non il path dell'immagine? per l'immagine occorre utilizzare await Certificate.fromImage(qrcode)

PaoloG1980 commented 2 years ago

@astagi e @lucadentella scusate se vi rispondo solo oggi, ma durante il week non ho potuto mettere mano al PC. Ho verificato il mio qrCode usando il link proposto da @lucadentella e me lo valida correttamente. La chiamata che mi da errore é await.Certificate.fromRaw(qrCode) dove qrCode vale HC1:6BFOXN%TS3DHPVO13J /G-/2YRV.... la funzioni che ho fatto sono queste:

async function syncData() { await Service.updateAll(); }

async function verifydccs(qrcode) { try { await syncData(); const dccTest = Certificate.fromRaw(qrcode) const validationResult = Validator.validate(dccTest); if (validationResult.code === Validator.codes.VALID) { return "Green Pass VALIDO" } else { return "Green Pass NON VALIDO" } } catch (error) { console.log(error); } } Premetto che sono un novellino di NodeJs, ma a me sembra corretta. Mi potete aiutare in qualche modo?

PaoloG1980 commented 2 years ago

@astagi e @lucadentella Ho rifatto la funzione precedente utilizzando la funzione la chiamata Certificate.fromImage(Path) e in questo caso funziona e lo valida correttamente. Quindi ho fatto un debug più approfondito e ho scoperto che l'errore scaturisce nel file dcc.js (..node_modules\dcc_utils\src\dcc.js) quando fa questa chiamata: const base45Data = base45.decode(certificateRaw.slice(4));

Cosa posso fare adesso?

astagi commented 2 years ago

@PaoloG1980 se da Certificate.fromImage(Path) funziona, evidentemente c'è qualche errore nella stringa Base45. Anche fromImage passa da base45.decode(certificateRaw.slice(4));. DccUtils adesso utilizza una versione patchata della libreria Base45 che skippa alcuni caratteri malevoli, non tutti i servizi/librerie hanno questo fix, probabilmente neanche quello online.

PaoloG1980 commented 2 years ago

@astagi Avevi ragione tu, il porblema e che io passavo il qrcode come parametro di una chiamata get e quindi mi convertiva automaticamente tutti i caratteri spazio con %20 e tutti i caratteri + con spazio. Facendo il dovuto parsing funziona correttamente. Grazie di nuovo per l'aiuto.

astagi commented 2 years ago

Di niente @PaoloG1980 meglio così! :)