-
Notifications
You must be signed in to change notification settings - Fork 0
/
security.cpp
147 lines (121 loc) · 4.97 KB
/
security.cpp
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
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
// Function to check if a user with the given username and password exists in the file
bool userExists(const std::string& username, const std::string& password, std::ifstream& inputFile);
bool updatePassword(const std::string& username, const std::string& newPassword, std::ifstream& inputFile);
int main() {
string user, oldPassword, newPassword;
cout << " Security system " << endl;
cout << "_______________________________" << endl;
cout << "| 1. Register |" << endl;
cout << "| 2. Login |" << endl;
cout << "| 3. Change Password |" << endl;
cout << "|_______4. Exit_______________|" << endl << endl;
do {
cout << endl;
cout << "Enter your choice: ";
int choice;
cin >> choice;
switch (choice) {
case 1:
{
cout << "_______________________________" << endl;
cout << "|-----------Register-----------|" << endl;
cout << "|______________________________|" << endl;
string name, password0;
cout << "Please enter username: ";
cin >> name;
cout << "Please enter password: ";
cin >> password0;
// Open the file in append mode to add new users
std::ofstream outputFile1("file.txt", std::ios::app);
if (!outputFile1) {
cerr << "Failed to open the file." << endl;
return 1; // Return an error code
}
// Write user data to the file
outputFile1 << name << '\n';
outputFile1 << password0 << '\n';
cout << "Registration successful" << endl;
outputFile1.close(); // Close the file
}
break;
case 2:
{
cout << "_______________________________" << endl;
cout << "|-----------Login--------------|" << endl;
cout << "|______________________________|" << endl;
cout << "Please enter your username: ";
cin >> user;
cout << "Please enter your password: ";
cin >> oldPassword;
std::ifstream inputFile("file.txt");
if (userExists(user, oldPassword, inputFile)) {
cout << "Login successful!" << endl;
} else {
cout << "Login failed. Invalid username or password." << endl;
}
inputFile.close();
}
break;
case 3:
{
cout << "_______________________________" << endl;
cout << "|-------Change Password--------|" << endl;
cout << "|______________________________|" << endl;
cout << "Please enter your username: ";
cin >> user;
cout << "Please enter your old password: ";
cin >> oldPassword;
cout << "Please enter your new password: ";
cin >> newPassword;
std::ifstream inputFile("file.txt");
if (updatePassword(user, newPassword, inputFile)) {
cout << "Password changed successfully!" << endl;
} else {
cout << "Password change failed. Invalid username or old password." << endl;
}
inputFile.close();
}
break;
default:
cout << "Invalid choice. Please enter a valid option." << endl;
break;
}
} while (true);
return 0;
}
bool userExists(const std::string& username, const std::string& password, std::ifstream& inputFile) {
std::string line;
while (std::getline(inputFile, line)) {
if (line == username) {
if (std::getline(inputFile, line) && line == password) {
return true; // User found with matching username and password
}
}
}
return false; // User not found
}
bool updatePassword(const std::string& username, const std::string& newPassword, std::ifstream& inputFile) {
std::ofstream tempFile("temp.txt");
std::string line;
bool userFound = false;
while (std::getline(inputFile, line)) {
if (line == username) {
userFound = true;
tempFile << line << '\n'; // Write the username
tempFile << newPassword << '\n'; // Write the new password
inputFile.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Skip the old password
} else {
tempFile << line << '\n'; // Copy other lines as-is
}
}
tempFile.close();
inputFile.close();
if (userFound && std::rename("temp.txt", "file.txt") == 0) {
return true; // Password updated successfully
}
return false; // Password update failed
}