54void saveAdminCredentials(
void) {
56 FILE* file = fopen(
"resources/db/admin_credentials.dat",
"wb");
58 if (errno != ENOENT) {
59 printf(
"Error opening admin credentials file: %s\n", strerror(errno));
65 while (temp != NULL) {
66 if (fwrite(temp,
sizeof(
Admin), 1, file)) {
69 printf(
"Error writing admin credentials: %s\n", strerror(errno));
96void loadAdminCredentials(
void) {
98 FILE* file = fopen(
"resources/db/admin_credentials.dat",
"rb");
100 if (errno == ENOENT) {
103 strcpy(newAdmin->
username,
"admin");
105 newAdmin->
next = NULL;
107 saveAdminCredentials();
109 printf(
"Error allocating memory for admin: %s\n", strerror(errno));
112 printf(
"Error opening admin credentials file: %s\n", strerror(errno));
118 while (fread(&tempAdmin,
sizeof(
Admin), 1, file)) {
121 *newAdmin = tempAdmin;
125 printf(
"Error allocating memory for admin: %s\n", strerror(errno));
151bool adminExists(
const char* username) {
152 if (strcmp(username,
"") == 0) {
153 printf(
"Error: Admin username cannot be empty.\n");
157 if (!checkUsername(username)) {
158 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
163 while (temp != NULL) {
164 if (strcmp(temp->
username, username) == 0) {
190bool validateAdmin(
const char* username,
const char* password) {
191 if (strcmp(username,
"") == 0 || strcmp(password,
"") == 0) {
192 printf(
"Error: Admin credentials cannot be empty.\n");
196 if (!checkUsername(username)) {
197 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
202 while (temp != NULL) {
203 if (strcmp(username, temp->
username) == 0 && strcmp(password, temp->
password) == 0) {
240bool addAdmin(
const char* username,
const char* password,
const char* currentAdminUsername,
const char* currentAdminPassword) {
241 if (strcmp(currentAdminUsername,
"") == 0 || strcmp(currentAdminPassword,
"") == 0) {
242 printf(
"Error: Current admin credentials cannot be empty.\n");
246 if (!checkUsername(currentAdminUsername) || !checkUsername(username)) {
247 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
251 if (!validateAdmin(currentAdminUsername, currentAdminPassword)) {
252 printf(
"Error: Invalid current admin credentials.\n");
256 if (adminExists(username)) {
257 printf(
"Error: Admin already exists.\n");
261 if (strcmp(username,
"") == 0 || strcmp(password,
"") == 0) {
262 printf(
"Error: Admin credentials cannot be empty.\n");
268 printf(
"Error allocating memory for admin: %s\n", strerror(errno));
278 saveAdminCredentials();
306bool deleteAdmin(
const char* username,
const char* currentAdminUsername,
const char* currentAdminPassword) {
307 if (strcmp(currentAdminUsername,
"") == 0 || strcmp(currentAdminPassword,
"") == 0) {
308 printf(
"Error: Current admin credentials cannot be empty.\n");
312 if (!checkUsername(currentAdminUsername) || !checkUsername(username)) {
313 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
317 if (!validateAdmin(currentAdminUsername, currentAdminPassword)) {
318 printf(
"Error: Invalid current admin credentials.\n");
322 if (!adminExists(username)) {
323 printf(
"Error: Admin does not exist.\n");
327 if (strcmp(username,
"") == 0) {
328 printf(
"Error: Admin username cannot be empty.\n");
332 if (strcmp(username, currentAdminUsername) == 0) {
333 printf(
"Error: Cannot delete current admin.\n");
340 while (temp != NULL) {
341 if (strcmp(temp->
username, username) == 0) {
348 saveAdminCredentials();
380bool changeAdminPassword(
const char* username,
const char* oldPassword,
const char* newPassword) {
381 if (strcmp(username,
"") == 0 || strcmp(oldPassword,
"") == 0) {
382 printf(
"Error: Username or old password cannot be empty.\n");
386 if (!checkUsername(username)) {
387 printf(
"Error: Invalid username. Username can only contain lowercase letters and digits.\n");
391 if (!validateAdmin(username, oldPassword)) {
392 printf(
"Error: Invalid password.\n");
396 if (strcmp(newPassword,
"") == 0) {
397 printf(
"Error: New password cannot be empty.\n");
402 while (temp != NULL) {
403 if (strcmp(username, temp->
username) == 0 && strcmp(oldPassword, temp->
password) == 0) {
406 saveAdminCredentials();
422void displayAdmin(
void) {
424 printf(
"\nRegistered Admins:\n");
425 while (temp != NULL) {
426 printf(
"\tUsername: %s\n", temp->
username);
429 printf(
"\t----------------------------------\n");
441void freeAdmin(
void) {
443 while (current != NULL) {
444 Admin* temp = current;
445 current = current->
next;
Admin * adminHead
Admin head pointer.
Admin manager header file.
char username[MAX_USERNAME_LENGTH]
char password[MAX_PASSWORD_LENGTH]