-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.cpp
More file actions
198 lines (178 loc) · 7.45 KB
/
Copy pathmain.cpp
File metadata and controls
198 lines (178 loc) · 7.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
#include <iostream>
#include <string>
#include <optional>
#include "password.h"
#include "helperInputFunctions.h"
std::string mainFile;
void begin_password_search();
void sort_password();
void add_password();
void edit_password();
void delete_entry(bool isPasswordDeletion);
void add_category();
int main() {
while (true) {
mainFile = prompt_line("Podaj nazwe pliku znajdujacego sie w obecnym folderze lub sciezke absolutna, aby skorzystac z programu:");
if (does_file_exist(mainFile)) {
auto masterFromFile = read_master_password(mainFile);
if (!masterFromFile) {
std::cout << "Musisz stworzyc glowne haslo:\n";
std::string newMaster = prompt_line("Podaj nowe haslo:");
write_master_password(mainFile, newMaster);
masterFromFile = newMaster;
}
while (true) {
std::string userInput = prompt_line("Podaj haslo do menedzera:");
if (userInput == *masterFromFile) {
break;
}
std::cout << "Nieprawidlowe haslo.\n";
}
break;
}
std::cout << "Wprowadzona nazwa lub sciezka pliku nie istnieje: \"" << mainFile << "\" wprowadz poprawna nazwe lub sciezke pliku." << std::endl;
}
while (true) {
int userInputMainCommand;
std::cout << "Wybierz interesujaca Cie komende, wpisujac jej numer:" << std::endl;
std::cout << "1. Wyszukaj hasla" << std::endl;
std::cout << "2. Posortuj hasla" << std::endl;
std::cout << "3. Dodaj haslo" << std::endl;
std::cout << "4. Edytuj haslo" << std::endl;
std::cout << "5. Usun haslo" << std::endl;
std::cout << "6. Dodaj kategorie" << std::endl;
std::cout << "7. Usun kategorie" << std::endl;
std::cout << "0. Wyjscie" << std::endl;
userInputMainCommand = prompt_int("");
MainMenu chosenCommand = static_cast<MainMenu>(userInputMainCommand);
switch(chosenCommand) {
case MainMenu::Exit:
std::cout << "Zamykam program..." << std::endl;
return 0;
case MainMenu::Search:
begin_password_search();
break;
case MainMenu::Sort:
sort_password();
break;
case MainMenu::Add:
add_password();
break;
case MainMenu::Edit:
edit_password();
break;
case MainMenu::DeletePassword:
delete_entry(true);
break;
case MainMenu::AddCategory:
add_category();
break;
case MainMenu::DeleteCategory:
delete_entry(false);
break;
default:
default_choice_message(0, 7, userInputMainCommand);
break;
}
}
}
void sort_password() {
std::string sortingParameterOne;
std::string sortingParameterTwo;
std::string valueThatWillBeSortedBy;
std::string sortingCategory;
std::string strona_sorotwania;
std::string login_sorotwania;
std::string wartosc_parametru;
std::string kolejny_parametr;
std::cout << "Wybierz wobec jakich parametrow chcesz posortowac hasla:" << std::endl;
print_tags_names("", true);
int inputDecision = prompt_int("");
TagsMenu chosenDecision = static_cast<TagsMenu>(inputDecision);
switch(chosenDecision) {
case TagsMenu::Nazwa:
initialize_sorting_by_params("nazwe", ALL_TAGS[0], mainFile);
break;
case TagsMenu::Kategoria:
initialize_sorting_by_params("kategorie", ALL_TAGS[1], mainFile);
break;
case TagsMenu::StronaWWW:
initialize_sorting_by_params("strone", ALL_TAGS[2], mainFile);
break;
case TagsMenu::Login:
initialize_sorting_by_params("nazwe uzytkownika (login)", ALL_TAGS[3], mainFile);
break;
default:
default_choice_message(1, ALL_TAGS.size(), inputDecision);
break;
}
}
void begin_password_search() {
std::string input;
std::cout << "Wybierz zgodnie z czym chcesz wyszukac swoje haslo:" << std::endl;
print_tags_names("", true);
int userInputSearch = prompt_int("");
TagsMenu chosenDecision = static_cast<TagsMenu>(userInputSearch);
switch(chosenDecision) {
case TagsMenu::Nazwa:
password_search_print_helper("nazwe", ALL_TAGS[0], mainFile);
break;
case TagsMenu::Kategoria:
password_search_print_helper("kategorie", ALL_TAGS[1], mainFile);
break;
case TagsMenu::StronaWWW:
password_search_print_helper("strone", ALL_TAGS[2], mainFile);
break;
case TagsMenu::Login:
password_search_print_helper("nazwe uzytkownika (login)", ALL_TAGS[3], mainFile);
break;
default:
default_choice_message(1, ALL_TAGS.size(), userInputSearch);
break;
}
}
void add_password() {
std::string passwordName;
std::string category;
std::string page;
std::string login;
std::string password;
int charNumberForGeneratedPassword = 0;
bool userInputDecision;
bool agreedForCapitalLetters = false;
bool agreedForSpecialChars = false;
passwordName = prompt_line("Podaj nazwe dla hasla:");
category = prompt_line("Podaj kategorie, w ktorej ma znalezc sie wpis hasla:");
page = prompt_line("Podaj adres WWW strony (opcjonalne, wprowadz \"-\" aby pominac):");
login = prompt_line("Podaj login do portalu (opcjonalne, wprowadz \"-\" aby pominac):");
userInputDecision = prompt_accept_or_skip("Czy wygenerowac haslo?");
if (userInputDecision) {
charNumberForGeneratedPassword = prompt_int("Podaj ilosc znakow hasla:");
agreedForCapitalLetters = prompt_accept_or_skip("Czy haslo ma zawierac wielkie i male litery?");
agreedForSpecialChars = prompt_accept_or_skip("Czy haslo ma zawierac znaki specjalne?");
password = generate_password(charNumberForGeneratedPassword, agreedForCapitalLetters, agreedForSpecialChars, passwordName);
std::cout << "Wygenerowane haslo: " << password << std::endl;
std::cout << "Haslo jest " << password_strength_verifier(password) << "!" << std::endl;
}
else {
password = prompt_line("Podaj swoje haslo:");
std::cout << "Haslo jest " << password_strength_verifier(password) << "!" << std::endl;
std::cout << search_password(mainFile, password, "Haslo: ", false) << std::endl;
}
enter_record_into_file(mainFile, passwordName, password, category, login, page);
std::cout << "Pomyslnie wprowadzono haslo do pliku: " << mainFile << std::endl;
}
void edit_password() {
std::cout << "Lista Twoich hasel: " << std::endl;
std::cout << password_edition(mainFile) << std::endl;
}
void delete_entry(bool isPasswordDeletion) {
std::string terminalMessage = isPasswordDeletion ? "Lista Twoich hasel: " : "Lista Twoich kategorii wraz z przypisanymi do nich haslami: ";
std::cout << terminalMessage << std::endl;
std::cout << read_file_content(mainFile, isPasswordDeletion, !isPasswordDeletion) << std::endl;
}
void add_category() {
std::string newCategory = prompt_line("Wprowadz nazwe nowej kategorii:");
enter_record_into_file(mainFile, "", "", newCategory, "-", "-");
std::cout << "Wprowadzono nowa kategorie do pliku: " << mainFile;
}