From a84c0f8123ae669bebe03b44773621ece101fb91 Mon Sep 17 00:00:00 2001 From: giomba Date: Sat, 1 Jan 2022 12:47:54 +0100 Subject: [PATCH] Anagrafica.hpp: introduce proper person handler To show name and surname separately, and preserve some privacy --- Anagrafica.hpp | 5 +++++ ImmuNoattri.cpp | 42 +++++++++++++++++++++++++++--------------- ImmuNoattri.hpp | 5 +++-- README.md | 11 ++++++++--- 4 files changed, 43 insertions(+), 20 deletions(-) create mode 100644 Anagrafica.hpp diff --git a/Anagrafica.hpp b/Anagrafica.hpp new file mode 100644 index 0000000..3d4923d --- /dev/null +++ b/Anagrafica.hpp @@ -0,0 +1,5 @@ +class Anagrafica { + public: + QString cognome; + QString nome; +}; diff --git a/ImmuNoattri.cpp b/ImmuNoattri.cpp index 63299c3..a34c7f4 100644 --- a/ImmuNoattri.cpp +++ b/ImmuNoattri.cpp @@ -6,16 +6,26 @@ #include "ui_ImmuNoattri.h" -bool decodeCodfis(const QString& input, QString& codfis, QString& anagrafica) { - codfis = input.mid(1, 16); +bool decodeCodfis(const QString& input, QString& codfis, Anagrafica& anagrafica) { + QStringList list = input.split('_'); + if (list.size() != 4) { + return false; + } + + codfis = list.at(1); if (codfis.length() != 16) { return false; } - int end_anagrafica = input.indexOf(0x5f); - if (end_anagrafica < 0) { + + QString anagrafica_magnetica = list.at(2); + + QStringList anagrafica_list = anagrafica_magnetica.split(" "); + if (anagrafica_list.size() != 2) { return false; } - anagrafica = input.mid(17, end_anagrafica - 17); + anagrafica.cognome = anagrafica_list.at(0); + anagrafica.nome = anagrafica_list.at(1); + return true; } @@ -65,7 +75,7 @@ void MainWindow::on_lineTessera_timer_timeout() { lineTessera_timer.stop(); QString codfis; - QString anagrafica; + Anagrafica anagrafica; // Validating input if (decodeCodfis(ui->lineTessera->text(), codfis, anagrafica)) { addVisitor(codfis, anagrafica); @@ -86,22 +96,23 @@ void MainWindow::on_pushMano_clicked() { wmanualInsert->exec(); if (wmanualInsert->validData()) { QString codfis = wmanualInsert->getCodFis(); - QString anagrafica = QString("%1 %2") - .arg(wmanualInsert->getCognome()) - .arg(wmanualInsert->getNome()); + Anagrafica anagrafica; + anagrafica.cognome = wmanualInsert->getCognome(); + anagrafica.nome = wmanualInsert->getNome(); addVisitor(codfis, anagrafica); } wmanualInsert.release(); } -void MainWindow::addVisitor(QString& codfis, QString& anagrafica) { - sqliteInterface.addVisitor(codfis, anagrafica); +void MainWindow::addVisitor(QString& codfis, Anagrafica& anagrafica) { + sqliteInterface.addVisitor(codfis, QString("%1 %2").arg(anagrafica.cognome).arg(anagrafica.nome)); int registrati = ui->lineRegistrati->text().toInt(); registrati++; ui->lineRegistrati->setText(QString::number(registrati)); ui->statusbar->showMessage("Inserimento effettuato correttamente!", MESSAGE_TIMEOUT); ui->statusbar->setStyleSheet("background-color: green;"); - ui->labelNome->setText(QString("Ciao %1!").arg(anagrafica)); + ui->labelNome->setText(QString("Ciao %1!").arg(anagrafica.nome + )); } void MainWindow::closeEvent(QCloseEvent* event) { @@ -119,11 +130,12 @@ void MainWindow::on_smartcard_check() { last_codice_fiscale = cns.getCodiceFiscale(); QString codfis = cns.getCodiceFiscale(); - QString anagrafica = QString("%1 %2").arg(cns.getCognome()).arg(cns.getNome()); + Anagrafica anagrafica; + anagrafica.cognome = cns.getCognome(); + anagrafica.nome = cns.getNome(); addVisitor(codfis, anagrafica); } catch (Ex e) { - qDebug() << "no valid smartcard"; - //qDebug() << "[E] exception: " << e; + // no valid smartcard } } \ No newline at end of file diff --git a/ImmuNoattri.hpp b/ImmuNoattri.hpp index 945e11e..3127744 100644 --- a/ImmuNoattri.hpp +++ b/ImmuNoattri.hpp @@ -9,8 +9,9 @@ #include "sqliteInterface.hpp" #include "wManualInsert.hpp" +#include "Anagrafica.hpp" -const int MESSAGE_TIMEOUT = 15e3; // 15 s +const int MESSAGE_TIMEOUT = 15e3; // 15 s namespace Ui { class MainWindow; @@ -45,7 +46,7 @@ class MainWindow : public QMainWindow { SqliteInterface sqliteInterface; void closeEvent(QCloseEvent* event); - void addVisitor(QString& codfis, QString& anagrafica); + void addVisitor(QString& codfis, Anagrafica& anagrafica); }; #endif \ No newline at end of file diff --git a/README.md b/README.md index d9a9603..93c41b6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # ImmuNoattri +A terrible access monitor software based based on EU healthcare smartcard. -## Requisiti +## How it works +To record close contacts in our [Officina Informatica](https://wiki.golem.linux.it/Officina_Informatica), as initially mandated by regional law 2021-05-27/60 [Regione Toscana](https://www.regione.toscana.it/), in order to prevent diffusion of COVID-19, just remember to swipe your healthcare card in Lampredotto's totem, as soon as you enter the building. +Your name will be recorded, in order to inform health authorities in case of COVID-19 contact. +Your name will also be automatically deleted after 15 days. + +## Requirements * libqt5sql5-sqlite * sqlite3 * [cnsparser](https://git.golem.linux.it/golem/cnsparser) @@ -8,7 +14,6 @@ ## Database ``` CREATE TABLE presenze (ID INTEGER PRIMARY KEY AUTOINCREMENT, checkin TEXT, codfis TEXT, anagrafica TEXT); -CREATE TABLE sqlite_sequence(name,seq); ``` -## Formato tessera +## Magnetic card format ```_CGNNMM00A41D403C_COGNOME NOME1 NOME2_```