commit
f72813655e
@ -0,0 +1,3 @@ |
|||||||
|
a.out |
||||||
|
cmake-build-debug |
||||||
|
sc.sh |
||||||
@ -0,0 +1,87 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 18.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Autoritate.h" |
||||||
|
|
||||||
|
Autoritate& Autoritate::operator=(const Autoritate& frate) { |
||||||
|
if(this != &frate) { |
||||||
|
autoritateID = frate.autoritateID; |
||||||
|
nume = frate.nume; |
||||||
|
passHash = frate.passHash; |
||||||
|
} |
||||||
|
return *this; |
||||||
|
} |
||||||
|
|
||||||
|
std::ostream& operator <<(std::ostream& os, const Autoritate& user){ |
||||||
|
os << "ID: " << user.autoritateID << "\nNume: " << user.nume << "\nDosar: "; |
||||||
|
|
||||||
|
os << "\n"; |
||||||
|
return os; |
||||||
|
} |
||||||
|
|
||||||
|
bool Autoritate::tryLogin(std::string _pass) { |
||||||
|
if (hashString(_pass) == passHash) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
bool Autoritate::changePassword(std::string _pass, std::string _newpass) { |
||||||
|
if (hashString(_pass) == passHash) { |
||||||
|
passHash = hashString(_pass); |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
std::string Autoritate::getName() { |
||||||
|
return nume; |
||||||
|
} |
||||||
|
|
||||||
|
void Autoritate::emiteAnexa(Document* _doc, std::string _anex) { |
||||||
|
|
||||||
|
if (_doc->origineAnexa == nullptr) { |
||||||
|
Document::Anexa* ax = new Document::Anexa(); |
||||||
|
_doc->origineAnexa = ax; |
||||||
|
ax->continut = _anex; |
||||||
|
ax->doc = _doc; |
||||||
|
ax->idAnexa = hashString(ax->exportAnexa()); |
||||||
|
ax->urm = nullptr; |
||||||
|
return; |
||||||
|
} |
||||||
|
Document::Anexa* ax = _doc->origineAnexa; |
||||||
|
while (ax->urm != nullptr) { |
||||||
|
ax = ax->urm; |
||||||
|
} |
||||||
|
ax->urm = new Document::Anexa(); |
||||||
|
ax->urm->continut = _anex; |
||||||
|
ax->urm->doc = _doc; |
||||||
|
ax->urm->idAnexa = hashString(ax->urm->exportAnexa()); |
||||||
|
ax->urm->urm = nullptr; |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
Autoritate::~Autoritate() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
Document* Autoritate::emiteDocument(std::string _nume, std::string _continut, User* _Titular, Zi* _data_emitere, Zi* _data_expirare) { |
||||||
|
try { |
||||||
|
Document* doc = new Document(); |
||||||
|
doc->origineAnexa = nullptr; |
||||||
|
doc->Continut = _continut; |
||||||
|
if (_Titular == nullptr) { |
||||||
|
throw 404; |
||||||
|
} |
||||||
|
doc->Titular = _Titular; |
||||||
|
doc->Emitator = this; |
||||||
|
doc->dataEmitere = _data_emitere; |
||||||
|
doc->dataExpirare = _data_expirare; |
||||||
|
doc->titlu = _nume; |
||||||
|
return doc; |
||||||
|
}catch (int errorCode) { |
||||||
|
std::cout << "ERROR: " << errorCode << std::endl; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
@ -0,0 +1,36 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 18.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef AUTORITATE_H |
||||||
|
#define AUTORITATE_H |
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
#include "Document.h" |
||||||
|
|
||||||
|
class Autoritate { |
||||||
|
private: |
||||||
|
std::string autoritateID; |
||||||
|
std::string nume; |
||||||
|
std::string passHash; |
||||||
|
|
||||||
|
public: |
||||||
|
Autoritate(): autoritateID(""), nume(""), passHash("") {} |
||||||
|
Autoritate(const std::string& id, const std::string& name, const std::string& password) : autoritateID(id), nume(name), passHash(hashString(password)) {} |
||||||
|
Autoritate(const Autoritate& frate): |
||||||
|
autoritateID(frate.autoritateID), |
||||||
|
nume(frate.nume), |
||||||
|
passHash(frate.passHash) {} |
||||||
|
Autoritate& operator=(const Autoritate& frate); |
||||||
|
~Autoritate(); |
||||||
|
friend std::ostream& operator <<(std::ostream& os, const Autoritate& user); |
||||||
|
bool tryLogin(std::string _pass); |
||||||
|
bool changePassword(std::string _pass, std::string _newpass); |
||||||
|
std::string getName(); |
||||||
|
void emiteAnexa(Document* _doc, std::string _anex); |
||||||
|
Document* emiteDocument(std::string _nume, std::string _continut, User* _Titular, Zi* _data_emitere, Zi* _data_expirare); |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //AUTORITATE_H
|
||||||
@ -0,0 +1,19 @@ |
|||||||
|
cmake_minimum_required(VERSION 3.31) |
||||||
|
project(proiect) |
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 14) |
||||||
|
|
||||||
|
add_executable(proiect |
||||||
|
main.cpp |
||||||
|
User.cpp |
||||||
|
User.h |
||||||
|
common.h |
||||||
|
Document.cpp |
||||||
|
Document.h |
||||||
|
Zi.cpp |
||||||
|
Zi.h |
||||||
|
Autoritate.cpp |
||||||
|
Autoritate.h |
||||||
|
common.cpp |
||||||
|
Contract.cpp |
||||||
|
Contract.h) |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 26.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Contract.h" |
||||||
|
#include "User.h" |
||||||
|
#include "Autoritate.h" |
||||||
|
#include "Zi.h" |
||||||
|
//Contract::Contract(std::string _titlu, User* _Titular, Autoritate* _Emitator, std::string _continut, Zi* _data_emitere, Zi* _data_expirare) : Document(_titlu, _Titular, _Emitator, _continut, _data_emitere, _data_expirare) {
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
|
||||||
|
std::string Contract::exportForSigning() { |
||||||
|
std::string str = ""; |
||||||
|
std::stringstream os; |
||||||
|
std::string emitatorStr = (Emitator != nullptr) ? Emitator->getName() : "NULL"; |
||||||
|
std::string titluarStr = (Titular != nullptr) ? Titular->getName() : "NULL"; |
||||||
|
os << "Titlu: " << titlu << "\n-----------------------------------------------\nTitular: " << titluarStr << "\nEmitator: " << emitatorStr << "\n\nContinut: \n" << Continut << "\n\nData de emitere: " << dataEmitere->day << "/" << dataEmitere->month << "/" << dataEmitere->year << "\nData de expirare: " << dataExpirare->day << "/" << dataExpirare->month << "/" << dataExpirare->year; |
||||||
|
|
||||||
|
return os.str(); |
||||||
|
} |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 26.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef CONTRACT_H |
||||||
|
#define CONTRACT_H |
||||||
|
|
||||||
|
#include "Document.h" |
||||||
|
|
||||||
|
|
||||||
|
class Contract : public Document { |
||||||
|
private: |
||||||
|
std::vector<std::tuple<User*, std::string>> semnatariPF; |
||||||
|
std::vector<std::tuple<Autoritate*, std::string>> semnatariPJ; |
||||||
|
public: |
||||||
|
Contract(std::string _titlu, User* _Titular, Autoritate* _Emitator, std::string _continut, Zi* _data_emitere, Zi* _data_expirare); |
||||||
|
std::string exportForSigning() override; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //CONTRACT_H
|
||||||
@ -0,0 +1,87 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 18.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Document.h" |
||||||
|
#include "User.h" |
||||||
|
#include "Autoritate.h" |
||||||
|
#include "Zi.h" |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//Document::Document() : idDocument(""), titlu(""), Titular(nullptr), Emitator(nullptr), Continut(""), dataEmitere(new Zi(0, 0, 0)), dataExpirare(new Zi(0, 0, 0)), origineAnexa(nullptr) {}
|
||||||
|
|
||||||
|
|
||||||
|
Document& Document::operator=(const Document& secundar) { |
||||||
|
if(this != &secundar) { |
||||||
|
idDocument = secundar.idDocument; |
||||||
|
titlu = secundar.titlu; |
||||||
|
Titular = secundar.Titular; |
||||||
|
Emitator = secundar.Emitator; |
||||||
|
Continut = secundar.Continut; |
||||||
|
dataEmitere = secundar.dataEmitere; |
||||||
|
dataExpirare = secundar.dataExpirare; |
||||||
|
} |
||||||
|
return *this; |
||||||
|
} |
||||||
|
|
||||||
|
std::string Document::getID(){ |
||||||
|
return idDocument; |
||||||
|
} |
||||||
|
|
||||||
|
std::string Document::exportForSigning() { |
||||||
|
std::string str = ""; |
||||||
|
std::stringstream os; |
||||||
|
std::string emitatorStr = (Emitator != nullptr) ? Emitator->getName() : "NULL"; |
||||||
|
std::string titluarStr = (Titular != nullptr) ? Titular->getName() : "NULL"; |
||||||
|
os << "Titlu: " << titlu << "\n-----------------------------------------------\nTitular: " << titluarStr << "\nEmitator: " << emitatorStr << "\n\nContinut: \n" << Continut << "\n\nData de emitere: " << dataEmitere->day << "/" << dataEmitere->month << "/" << dataEmitere->year << "\nData de expirare: " << dataExpirare->day << "/" << dataExpirare->month << "/" << dataExpirare->year; |
||||||
|
return os.str(); |
||||||
|
} |
||||||
|
|
||||||
|
std::string Document::exportAnexe() { |
||||||
|
std::stringstream os; |
||||||
|
Anexa *ax = origineAnexa; |
||||||
|
while (ax != nullptr) { |
||||||
|
os << ax->exportAnexa() << std::endl; |
||||||
|
ax = ax->getUrm(); |
||||||
|
} |
||||||
|
return os.str(); |
||||||
|
} |
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& os, const Document& doc) { |
||||||
|
Document ndoc = doc; |
||||||
|
os << std::endl << "ID:" << ndoc.getID() << std::endl; |
||||||
|
os << ndoc.exportForSigning(); |
||||||
|
os << std::endl << ndoc.exportAnexe(); |
||||||
|
return os; |
||||||
|
} |
||||||
|
|
||||||
|
Document::Document(std::string _titlu, User* _Titular, Autoritate* _Emitator, std::string _continut, Zi* _data_emitere, Zi* _data_expirare) { |
||||||
|
if (Emitator != nullptr) { |
||||||
|
return; |
||||||
|
} |
||||||
|
titlu = _titlu; |
||||||
|
Titular = _Titular; |
||||||
|
Emitator = _Emitator; |
||||||
|
Continut = _continut; |
||||||
|
dataEmitere = _data_emitere; |
||||||
|
dataExpirare = _data_expirare; |
||||||
|
origineAnexa = nullptr; |
||||||
|
|
||||||
|
idDocument = hashString(exportForSigning()); |
||||||
|
} |
||||||
|
|
||||||
|
Document::Document() { |
||||||
|
titlu = ""; |
||||||
|
Titular = nullptr; |
||||||
|
Emitator = nullptr; |
||||||
|
Continut = ""; |
||||||
|
dataEmitere = nullptr; |
||||||
|
dataExpirare = nullptr; |
||||||
|
origineAnexa = nullptr; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,58 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 18.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef DOCUMENT_H |
||||||
|
#define DOCUMENT_H |
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
class Zi; |
||||||
|
class User; |
||||||
|
class Autoritate; |
||||||
|
|
||||||
|
class Document { |
||||||
|
class Anexa { |
||||||
|
private: |
||||||
|
std::string idAnexa; |
||||||
|
std::string continut; |
||||||
|
Anexa* urm; |
||||||
|
Document *doc; |
||||||
|
public: |
||||||
|
|
||||||
|
Anexa(): idAnexa(""), continut(""), urm(nullptr) {} |
||||||
|
|
||||||
|
std::string exportAnexa() { |
||||||
|
std::stringstream os; |
||||||
|
os << "\nANEXA la doc(" << doc->getID() << ")\n--------\n" << "Continut (Anexa):\n" << continut; |
||||||
|
return os.str(); |
||||||
|
} |
||||||
|
|
||||||
|
Anexa* getUrm() { |
||||||
|
return urm; |
||||||
|
} |
||||||
|
friend class Autoritate; |
||||||
|
}; |
||||||
|
protected: |
||||||
|
Anexa* origineAnexa = nullptr; |
||||||
|
std::string idDocument; |
||||||
|
std::string titlu; |
||||||
|
User* Titular; |
||||||
|
Autoritate* Emitator; |
||||||
|
std::string Continut; |
||||||
|
Zi* dataEmitere; |
||||||
|
Zi* dataExpirare; |
||||||
|
public: |
||||||
|
Document(std::string _titlu, User* _Titular, Autoritate* _Emitator, std::string _continut, Zi* _data_emitere, Zi* _data_expirare); |
||||||
|
Document(); |
||||||
|
Document& operator=(const Document& secundar); |
||||||
|
friend std::ostream& operator<<(std::ostream& os, const Document& doc); |
||||||
|
std::string getID(); |
||||||
|
virtual std::string exportForSigning(); |
||||||
|
//void populate(std::string _titlu, User* _Titular, Autoritate* _Emitator, std::string _continut, Zi* _dataEmitere, Zi* _dataExpirare);
|
||||||
|
std::string exportAnexe(); |
||||||
|
friend class Autoritate; |
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //DOCUMENT_H
|
||||||
@ -0,0 +1,62 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 17.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "User.h" |
||||||
|
#include "Document.h" |
||||||
|
|
||||||
|
void User::addDocument(Document* doc) { |
||||||
|
Dosar[doc->getID()] = doc; |
||||||
|
} |
||||||
|
|
||||||
|
void User::removeDocument(std::string _id) { |
||||||
|
Dosar.erase(_id); |
||||||
|
} |
||||||
|
|
||||||
|
User::~User() { |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
User::User(const std::string& id, const std::string& _name, const std::string& password) : userID(id), nume(_name), passHash(hashString(password)), Dosar() { |
||||||
|
userID = id; |
||||||
|
nume = _name; |
||||||
|
passHash = hashString(password); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
User& User::operator=(const User& frate) { |
||||||
|
if(this != &frate) { |
||||||
|
userID = frate.userID; |
||||||
|
nume = frate.nume; |
||||||
|
passHash = frate.passHash; |
||||||
|
Dosar = frate.Dosar; |
||||||
|
} |
||||||
|
return *this; |
||||||
|
} |
||||||
|
|
||||||
|
std::ostream& operator <<(std::ostream& os, const User& user){ |
||||||
|
os << "ID: " << user.userID << "\nNume: " << user.nume << "\nDosar: "; |
||||||
|
|
||||||
|
os << "\n"; |
||||||
|
return os; |
||||||
|
} |
||||||
|
|
||||||
|
bool User::tryLogin(std::string _pass) { |
||||||
|
if (hashString(_pass) == passHash) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
bool User::changePassword(std::string _pass, std::string _newpass) { |
||||||
|
if (hashString(_pass) == passHash) { |
||||||
|
passHash = hashString(_pass); |
||||||
|
return true; |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
std::string User::getName() { |
||||||
|
return ""; |
||||||
|
} |
||||||
@ -0,0 +1,48 @@ |
|||||||
|
#ifndef USER_H |
||||||
|
#define USER_H |
||||||
|
|
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
|
||||||
|
class Document; |
||||||
|
|
||||||
|
class User { |
||||||
|
private: |
||||||
|
std::string userID; |
||||||
|
std::string nume = ""; |
||||||
|
std::string passHash; |
||||||
|
std::unordered_map<std::string, Document*> Dosar; |
||||||
|
|
||||||
|
public: |
||||||
|
User(const std::string& id, const std::string& name, const std::string& password); |
||||||
|
|
||||||
|
//User(const std::string& id, const std::string& name, const std::string& password) : userID(id), nume(name), passHash(hashString(password)), Dosar() {}
|
||||||
|
|
||||||
|
/*User(const User& frate):
|
||||||
|
userID(frate.userID), |
||||||
|
nume(frate.nume), |
||||||
|
passHash(frate.passHash), |
||||||
|
Dosar(frate.Dosar) |
||||||
|
{}*/ |
||||||
|
|
||||||
|
User& operator=(const User& frate); |
||||||
|
|
||||||
|
~User(); |
||||||
|
|
||||||
|
void addDocument(Document* doc); |
||||||
|
|
||||||
|
void removeDocument(std::string _id); |
||||||
|
|
||||||
|
friend std::ostream& operator <<(std::ostream& os, const User& user); |
||||||
|
|
||||||
|
bool tryLogin(std::string _pass); |
||||||
|
|
||||||
|
bool changePassword(std::string _pass, std::string _newpass); |
||||||
|
|
||||||
|
std::string getName(); |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
#endif USER_H |
||||||
|
|
||||||
@ -0,0 +1,36 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 18.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "Zi.h" |
||||||
|
ZiuaDeAzi* ZiuaDeAzi::instance = nullptr; |
||||||
|
ZiuaDeAzi* ZiuaDeAzi::getInstance() { |
||||||
|
if (instance == nullptr) { |
||||||
|
//std::lock_guard<std::mutex> lock(mtx);
|
||||||
|
//if (instance == nullptr) {
|
||||||
|
instance = new ZiuaDeAzi(); |
||||||
|
//}
|
||||||
|
} |
||||||
|
return instance; |
||||||
|
} |
||||||
|
|
||||||
|
bool Zi::verifExpirare() const { |
||||||
|
ZiuaDeAzi* x = ZiuaDeAzi::getInstance(); |
||||||
|
Zi currentDate = x->getZiuaDeAzi(); |
||||||
|
return currentDate.year > year || (currentDate.year == year && currentDate.month > month) || (currentDate.year == year && currentDate.month == month && currentDate.day > day); |
||||||
|
} |
||||||
|
|
||||||
|
Zi::Zi(int day, int month, int year) : day(day), month(month), year(year) {} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ZiuaDeAzi::setZiuaDeAzi(Zi _z) { |
||||||
|
z = _z; |
||||||
|
} |
||||||
|
|
||||||
|
Zi ZiuaDeAzi::getZiuaDeAzi() { |
||||||
|
return z; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -0,0 +1,38 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 18.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef ZI_H |
||||||
|
#define ZI_H |
||||||
|
#include <mutex> |
||||||
|
|
||||||
|
//#include "common.h"
|
||||||
|
|
||||||
|
class Zi { |
||||||
|
public: |
||||||
|
Zi(int day, int month, int year); |
||||||
|
int day; |
||||||
|
int month; |
||||||
|
int year; |
||||||
|
bool verifExpirare() const; |
||||||
|
}; |
||||||
|
|
||||||
|
class ZiuaDeAzi { |
||||||
|
private: |
||||||
|
Zi z; |
||||||
|
static ZiuaDeAzi* instance; |
||||||
|
|
||||||
|
//static std::mutex mtx;
|
||||||
|
|
||||||
|
ZiuaDeAzi() : z{12, 12, 12} {} |
||||||
|
public: |
||||||
|
ZiuaDeAzi(const ZiuaDeAzi& obj) = delete; |
||||||
|
static ZiuaDeAzi* getInstance(); |
||||||
|
Zi getZiuaDeAzi(); |
||||||
|
void setZiuaDeAzi(Zi _z); |
||||||
|
|
||||||
|
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif //ZI_H
|
||||||
@ -0,0 +1,14 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 19.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "common.h" |
||||||
|
|
||||||
|
std::string hashString(std::string str) { |
||||||
|
return std::to_string(std::hash<std::string>{}(str)); |
||||||
|
} |
||||||
|
|
||||||
|
template<typename data_type> |
||||||
|
data_type MAX(data_type x, data_type y) { |
||||||
|
return (x > y) ? x : y; |
||||||
|
} |
||||||
@ -0,0 +1,20 @@ |
|||||||
|
//
|
||||||
|
// Created by ioachim on 17.05.2025.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef COMMON_H |
||||||
|
#define COMMON_H |
||||||
|
#include <iostream> |
||||||
|
#include <cmath> |
||||||
|
#include <string> |
||||||
|
#include <cstdlib> |
||||||
|
#include <memory> |
||||||
|
#include <vector> |
||||||
|
#include <unordered_set> |
||||||
|
#include <unordered_map> |
||||||
|
#include <sstream> |
||||||
|
|
||||||
|
std::string hashString(std::string str); |
||||||
|
|
||||||
|
|
||||||
|
#endif //COMMON_H
|
||||||
@ -0,0 +1,25 @@ |
|||||||
|
#include "common.h" |
||||||
|
#include "Zi.h" |
||||||
|
#include "User.h" |
||||||
|
#include "Document.h" |
||||||
|
#include "Autoritate.h" |
||||||
|
|
||||||
|
int main(){ |
||||||
|
Zi azi(20, 5, 2025); |
||||||
|
Zi dExpir(30, 5, 2026); |
||||||
|
ZiuaDeAzi* _azi = ZiuaDeAzi::getInstance(); |
||||||
|
_azi->setZiuaDeAzi(azi); |
||||||
|
|
||||||
|
dExpir.verifExpirare(); |
||||||
|
Autoritate xxx = Autoritate("DRPCIV", "DRPCIV", "pulapulapizdapizda"); |
||||||
|
User ion = User("abc", "Popescu Ion", "pulanpizda"); |
||||||
|
std::cout << ion; |
||||||
|
|
||||||
|
//Document doc("Permis de Conducere Digital", &ion, &xxx, "B: 20/01/2025\nB1: 20/01/2025\nAM: 20/01/2025", &azi, &dExpir);
|
||||||
|
Document* doc = xxx.emiteDocument("Permis de Conducere Digital", "B: 20/01/2025\nB1: 20/01/2025\nAM: 20/01/2025", &ion, &azi, &dExpir); |
||||||
|
xxx.emiteAnexa(doc, "DOAR AUTOMATA | COD: 87"); |
||||||
|
xxx.emiteAnexa(doc, "PERMIS RETINUT PENTRU CA E UN BETIV INFECT"); |
||||||
|
std::cout << *doc; |
||||||
|
std::cout << std::endl; |
||||||
|
std::cout << hashString(doc->exportForSigning()); |
||||||
|
} |
||||||
Loading…
Reference in new issue