some cleanup

This commit is contained in:
Benedikt Galbavy 2023-11-19 18:32:56 +01:00
parent ad9ce0d2d0
commit f66d895326
2 changed files with 24 additions and 15 deletions

View File

@ -113,10 +113,9 @@ int main(int argc, char **argv)
bool isLoggedIn = false; bool isLoggedIn = false;
std::string loggedInUsername; std::string loggedInUsername;
std::string loggedInPassword;
do { do {
printf("Please specify a command (LOGIN, SEND, LIST, READ, DEL, QUIT): "); printf("Please specify a command (%s): ", isLoggedIn ? "SEND, LIST, READ, DEL, QUIT" : "LOGIN, QUIT");
if (fgets(buffer, BUF - 1, stdin) != NULL) { if (fgets(buffer, BUF - 1, stdin) != NULL) {
size = strlen(buffer); size = strlen(buffer);
if (buffer[size - 2] == '\r' && buffer[size - 1] == '\n') if (buffer[size - 2] == '\r' && buffer[size - 1] == '\n')
@ -138,7 +137,8 @@ int main(int argc, char **argv)
else if (strcmp(buffer, "DEL") == 0) cmd = DEL; else if (strcmp(buffer, "DEL") == 0) cmd = DEL;
else if (strcmp(buffer, "QUIT") == 0) break; else if (strcmp(buffer, "QUIT") == 0) break;
char username[BUF], msgNum[10]; char msgNum[10];
std::string username, password;
switch (cmd) { switch (cmd) {
case LOGIN: case LOGIN:
@ -148,14 +148,13 @@ int main(int argc, char **argv)
} }
printf("LDAP Username: "); printf("LDAP Username: ");
fgets(buffer, BUF - 1, stdin); fgets(buffer, BUF - 1, stdin);
loggedInUsername = buffer; username = buffer;
loggedInUsername.pop_back(); username.pop_back();
printf("Password: "); printf("Password: ");
loggedInPassword = getpass(); password = getpass();
snprintf(buffer, sizeof(buffer), "LOGIN\n%s\n%s\n", loggedInUsername.c_str(), loggedInPassword.c_str()); snprintf(buffer, sizeof(buffer), "LOGIN\n%s\n%s\n", username.c_str(), password.c_str());
isLoggedIn = true;
break; break;
case SEND: case SEND:
@ -177,14 +176,15 @@ int main(int argc, char **argv)
break; break;
strcat(message, line); strcat(message, line);
} }
snprintf(buffer, sizeof(buffer), "SEND\n%s\n%s\n%s\n%s.\n", loggedInUsername.c_str(), receiver, subject, message); snprintf(buffer, sizeof(buffer), "SEND\n%s%s%s.\n", receiver, subject, message);
break; break;
case LIST: case LIST:
if (!isLoggedIn) { if (!isLoggedIn) {
printf("Please login first.\n"); printf("Please login first.\n");
continue; continue;
} }
snprintf(buffer, sizeof(buffer), "LIST\n%s", loggedInUsername.c_str()); snprintf(buffer, sizeof(buffer), "LIST\n");
printf("%s", buffer);
break; break;
case READ: case READ:
if (!isLoggedIn) { if (!isLoggedIn) {
@ -193,7 +193,7 @@ int main(int argc, char **argv)
} }
printf("Message Number: "); printf("Message Number: ");
fgets(msgNum, 9, stdin); fgets(msgNum, 9, stdin);
snprintf(buffer, sizeof(buffer), "READ\n%s\n%s", loggedInUsername.c_str(), msgNum); snprintf(buffer, sizeof(buffer), "READ\n%s", msgNum);
break; break;
case DEL: case DEL:
if (!isLoggedIn) { if (!isLoggedIn) {
@ -202,7 +202,7 @@ int main(int argc, char **argv)
} }
printf("Message Number: "); printf("Message Number: ");
fgets(msgNum, 9, stdin); fgets(msgNum, 9, stdin);
snprintf(buffer, sizeof(buffer), "DEL\n%s\n%s", loggedInUsername.c_str(), msgNum); snprintf(buffer, sizeof(buffer), "DEL\n%s", msgNum);
break; break;
case QUIT: case QUIT:
// should never be reached; // should never be reached;
@ -258,6 +258,12 @@ int main(int argc, char **argv)
{ {
buffer[size] = '\0'; buffer[size] = '\0';
printf("<< %s\n", buffer); // ignore error printf("<< %s\n", buffer); // ignore error
if (cmd == LOGIN && strcmp("OK\n", buffer) == 0) {
loggedInUsername = username;
isLoggedIn = true;
}
/*if (strcmp("OK", buffer) != 0) // needs proper verification, since responses vary between commands /*if (strcmp("OK", buffer) != 0) // needs proper verification, since responses vary between commands
{ {
fprintf(stderr, "<< Server error occured, abort\n"); fprintf(stderr, "<< Server error occured, abort\n");

View File

@ -225,6 +225,8 @@ void *clientCommunication(void *data)
std::string incomplete_message = ""; std::string incomplete_message = "";
std::string loggedInUsername;
do { do {
std::string response; std::string response;
@ -271,8 +273,6 @@ void *clientCommunication(void *data)
else if (iequals(lines.at(0), "QUIT")) break; else if (iequals(lines.at(0), "QUIT")) break;
else continue; // TODO: error message else continue; // TODO: error message
std::string loggedInUsername;
switch (cmd) { switch (cmd) {
case LOGIN: case LOGIN:
response = cmdLOGIN(lines, loggedInUsername); response = cmdLOGIN(lines, loggedInUsername);
@ -463,12 +463,13 @@ std::string cmdSEND(std::vector<std::string>& received, const std::string& logge
std::string cmdLIST(std::vector<std::string>& received, const std::string& loggedInUsername) { std::string cmdLIST(std::vector<std::string>& received, const std::string& loggedInUsername) {
if (loggedInUsername.empty()) { if (loggedInUsername.empty()) {
printf("%s %zu\n", loggedInUsername.c_str(), received.size());
return "ERR\n"; return "ERR\n";
} }
user* currentUser = user_handler::getInstance().getUser(loggedInUsername); user* currentUser = user_handler::getInstance().getUser(loggedInUsername);
if (currentUser == nullptr) { if (currentUser == nullptr) {
return "ERR\n"; return "0\n";
} }
maillist inbox = currentUser->getMails(); maillist inbox = currentUser->getMails();
@ -484,6 +485,7 @@ std::string cmdLIST(std::vector<std::string>& received, const std::string& logge
std::string cmdREAD(std::vector<std::string>& received, const std::string& loggedInUsername) { std::string cmdREAD(std::vector<std::string>& received, const std::string& loggedInUsername) {
if (loggedInUsername.empty() || received.size() < 2) { if (loggedInUsername.empty() || received.size() < 2) {
printf("%s %zu\n", loggedInUsername.c_str(), received.size());
return "ERR\n"; return "ERR\n";
} }
@ -509,6 +511,7 @@ std::string cmdREAD(std::vector<std::string>& received, const std::string& logge
std::string cmdDEL(std::vector<std::string>& received, const std::string& loggedInUsername) { std::string cmdDEL(std::vector<std::string>& received, const std::string& loggedInUsername) {
if (loggedInUsername.empty() || received.size() < 2) { if (loggedInUsername.empty() || received.size() < 2) {
printf("%s %zu\n", loggedInUsername.c_str(), received.size());
return "ERR\n"; return "ERR\n";
} }