Merge pull request 'feature/privacy'

Reviewed-on: #1
This commit is contained in:
giuliof 2022-01-01 23:15:40 +00:00
commit 6b27082725
6 changed files with 166 additions and 106 deletions

21
.vscode/c_cpp_properties.json vendored Normal file
View File

@ -0,0 +1,21 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include/qt/QtCore",
"/usr/include/qt/QtGui",
"/usr/include/qt",
"/usr/include/qt/QtWidgets",
"/usr/include/qt/QtSql"
],
"defines": [],
"compilerPath": "/usr/bin/clang",
"cStandard": "c17",
"cppStandard": "c++14",
"intelliSenseMode": "linux-clang-x64"
}
],
"version": 4
}

11
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"C_Cpp.vcFormat.newLine.beforeOpenBrace.block": "sameLine",
"C_Cpp.vcFormat.newLine.beforeOpenBrace.function": "sameLine",
"C_Cpp.vcFormat.newLine.beforeOpenBrace.lambda": "sameLine",
"C_Cpp.vcFormat.newLine.beforeOpenBrace.namespace": "sameLine",
"C_Cpp.vcFormat.newLine.beforeOpenBrace.type": "sameLine",
"C_Cpp.clang_format_fallbackStyle": "{ BasedOnStyle: Google, IndentWidth: 4 }",
"files.associations": {
"qdebug": "cpp"
}
}

5
Anagrafica.hpp Normal file
View File

@ -0,0 +1,5 @@
class Anagrafica {
public:
QString cognome;
QString nome;
};

View File

@ -1,21 +1,32 @@
#include "ImmuNoattri.hpp"
#include <QDebug>
#include <CNS.h> // https://git.golem.linux.it/golem/cnsparser
#include <QDebug>
#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;
}
@ -28,25 +39,28 @@ MainWindow::MainWindow(QWidget* parent)
qDebug() << "Pulisco db";
sqliteInterface.cleanup();
connect(&lineTessera_timer, &QTimer::timeout,
this, &MainWindow::on_lineTessera_timer_timeout);
connect(&lineTessera_timer, &QTimer::timeout, this,
&MainWindow::on_lineTessera_timer_timeout);
connect(ui->statusbar, &QStatusBar::messageChanged,
this, &MainWindow::on_statusbar_changed);
connect(ui->statusbar, &QStatusBar::messageChanged, this,
&MainWindow::on_statusbar_changed);
int registrati = sqliteInterface.count();
ui->lineRegistrati->setText(QString::number(registrati));
on_statusbar_changed();
connect(&smartcard_check_timer, &QTimer::timeout,
this, &MainWindow::on_smartcard_check);
connect(&smartcard_check_timer, &QTimer::timeout, this,
&MainWindow::on_smartcard_check);
smartcard_check_timer.start(std::chrono::seconds(2));
}
void MainWindow::on_statusbar_changed() {
if ((ui->statusbar->currentMessage()).length() == 0) {
ui->statusbar->setStyleSheet("background-color: auto;");
ui->statusbar->showMessage("Passare la tessera magnetica sul lettore, inserire una smartcard nel lettore, o effettuare un inserimento manuale.", 0);
ui->statusbar->showMessage(
"Passare la tessera magnetica sul lettore, inserire una smartcard "
"nel lettore, o effettuare un inserimento manuale.",
0);
}
}
@ -65,12 +79,13 @@ 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);
} else {
ui->statusbar->showMessage("Tessera non valida, riprovare!", MESSAGE_TIMEOUT);
ui->statusbar->showMessage("Tessera non valida, riprovare!",
MESSAGE_TIMEOUT);
ui->statusbar->setStyleSheet("background-color: red;");
}
@ -86,26 +101,27 @@ 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->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) {
}
void MainWindow::closeEvent(QCloseEvent* event) {}
void MainWindow::on_smartcard_check() {
static QString last_codice_fiscale;
@ -119,11 +135,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
}
}

View File

@ -7,6 +7,7 @@
#include <QTimer>
#include <memory>
#include "Anagrafica.hpp"
#include "sqliteInterface.hpp"
#include "wManualInsert.hpp"
@ -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

View File

@ -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_```