[ENG]
The Password Keeper application enables users to manage their passwords in a secure database. It offers functionality to efficiently and safely store and organize passwords, as well as the option to generate new, customized passwords on demand.
- PostgreSQL Installation:
- To build the project, you must first install PostgreSQL on your computer.
- Running the Application Locally:
- To use the application locally, you need to install Docker, use the
command
docker compose up
in the project's infrastructure folder, and create a new file named.env
in the src folder. Fill this file with the details from compose.yml , following the format described in the .env.template file.
- To use the application locally, you need to install Docker, use the
command
- Running Tests:
- To run the tests, you have to compile them first. To do so you have to add the
-DRUN_TESTS=ON
argument when compiling the app. - Tests can be run either by executing the
cmake-build-debug/tests/Password-Keeper-Test-Runner
file or by running thectest
command in thecmake-build-debug
folder.
- To run the tests, you have to compile them first. To do so you have to add the
The CI/CD pipeline is configured in GitHub Actions and includes multiple stages to ensure code quality, compatibility, and functionality across various platforms.
-
Code Quality Validation:
- The first two stages validate code correctness and ensure no warnings are generated (using Cppcheck and Clang-Tidy).
-
Compatibility Testing Across Multiple Operating Systems:
- The next five stages ensure proper code execution on major operating systems (Linux, macOS, and Windows) and perform memory checks using ASAN and Valgrind to identify potential memory leaks and other memory-related issues.
-
Functional Test Execution:
- The final stage runs functional tests to verify that the application behaves as expected.
In all stages involving the execution of the application, a PostgreSQL service is included to ensure proper application functionality.
[RO]
Aplicația este un Password Keeper care permite utilizatorilor să își gestioneze parolele într-o bază de date securizată. Aceasta oferă funcționalitatea de a stoca și organiza parolele într-un mod eficient și sigur, precum și opțiunea de a genera parole noi, personalizate, la cerere.
- Instalare PostgreSQL:
- Pentru a construi proiectul trebuie sa instalati mai intai PostgreSQL pe calculatorul dumneavoastra.
- Folosirea aplicatiei local:
- Pentru a folosi aplicatia local trebuie sa instalati Docker,sa folositi
comanda
docker compose up
in folderul infrastructure din proiect, sa create un nou fisier numit.env
in folderul src si sa il completati cu datale din compose.yml in modul prezentat in fisierul .env.template
- Pentru a folosi aplicatia local trebuie sa instalati Docker,sa folositi
comanda
- Rularea testelor:
- Pentru a rula testele acestea trebuie compilate. Pentru a face acest lucru trebuie sa adaugati comanda
-DRUN_TESTS=ON
atunci cand compilati. - Testele se ruleaza ori ruland executabilul
cmake-build-debug/tests/Password-Keeper-Test-Runner
ori ruland comanda ctest in folderulcmake-build-debug
.
- Pentru a rula testele acestea trebuie compilate. Pentru a face acest lucru trebuie sa adaugati comanda
Pipeline-ul CI/CD este configurat în GitHub Actions și include mai multe etape pentru a asigura calitatea codului, compatibilitatea și funcționalitatea pe diferite platforme.
Verificarea calității codului:
Primele două etape validează corectitudinea codului și se asigură că nu generează warnings ( folosind Cppcheck
si
Clang-Tidy
).
Testarea compatibilității pe multiple sisteme de operare: Următoarele cinci etape asigură rularea corectă a codului pe principalele sisteme de operare (Linux, macOS și Windows) și efectuează verificări de memorie folosind ASAN și Valgrind, pentru a identifica posibile memory leaks și alte probleme legate de memorie.
Rularea testelor funcționale: Ultima etapă rulează testele pentru a verifica dacă aplicația funcționează conform așteptărilor.
În toate etapele care implică rularea aplicatiei este inclus un serviciu PostgreSQL pentru a permite rularea corectă a aplicației.
- separarea codului din clase în
.h
(sau.hpp
) și.cpp
- moșteniri:
- minim o clasă de bază și 3 clase derivate din aceeași ierarhie
- ierarhia trebuie să fie cu bază proprie, nu derivată dintr-o clasă predefinită
- funcții virtuale (pure) apelate prin pointeri de bază din clasa care conține atributul de tip pointer de bază
- minim o funcție virtuală va fi specifică temei (e.g. nu simple citiri/afișări)
- constructori virtuali (clone): sunt necesari, dar nu se consideră funcții specifice temei
- afișare virtuală, interfață non-virtuală
- apelarea constructorului din clasa de bază din constructori din derivate
- clasă cu atribut de tip pointer la o clasă de bază cu derivate; aici apelați funcțiile virtuale prin pointer
de bază, eventual prin interfața non-virtuală din bază
- suprascris cc/op= pentru copieri/atribuiri corecte, copy and swap
-
dynamic_cast
/std::dynamic_pointer_cast
pentru downcast cu sens - smart pointers (recomandat, opțional)
- excepții
- ierarhie proprie cu baza
std::exception
sau derivată dinstd::exception
; minim 3 clase pentru erori specifice - utilizare cu sens: de exemplu,
throw
în constructor (sau funcție care întoarce un obiect),try
/catch
înmain
- această ierarhie va fi complet independentă de ierarhia cu funcții virtuale
- ierarhie proprie cu baza
- funcții și atribute
static
- STL
- cât mai multe
const
- funcții de nivel înalt, de eliminat cât mai mulți getters/setters/funcții low-level
- tag de
git
: de exempluv0.2
- 2 șabloane de proiectare (design patterns)
- o clasă șablon cu sens; minim 2 instanțieri
- preferabil și o funcție șablon (template) cu sens; minim 2 instanțieri
- tag de
git
: de exempluv0.3
sauv1.0
- adăugați trimiteri către resursele externe care v-au ajutat sau pe care le-ați folosit