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;
std::string loggedInUsername;
std::string loggedInPassword;
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) {
size = strlen(buffer);
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, "QUIT") == 0) break;
char username[BUF], msgNum[10];
char msgNum[10];
std::string username, password;
switch (cmd) {
case LOGIN:
@ -148,14 +148,13 @@ int main(int argc, char **argv)
}
printf("LDAP Username: ");
fgets(buffer, BUF - 1, stdin);
loggedInUsername = buffer;
loggedInUsername.pop_back();
username = buffer;
username.pop_back();
printf("Password: ");
loggedInPassword = getpass();
password = getpass();
snprintf(buffer, sizeof(buffer), "LOGIN\n%s\n%s\n", loggedInUsername.c_str(), loggedInPassword.c_str());
isLoggedIn = true;
snprintf(buffer, sizeof(buffer), "LOGIN\n%s\n%s\n", username.c_str(), password.c_str());
break;
case SEND:
@ -177,14 +176,15 @@ int main(int argc, char **argv)
break;
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;
case LIST:
if (!isLoggedIn) {
printf("Please login first.\n");
continue;
}
snprintf(buffer, sizeof(buffer), "LIST\n%s", loggedInUsername.c_str());
snprintf(buffer, sizeof(buffer), "LIST\n");
printf("%s", buffer);
break;
case READ:
if (!isLoggedIn) {
@ -193,7 +193,7 @@ int main(int argc, char **argv)
}
printf("Message Number: ");
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;
case DEL:
if (!isLoggedIn) {
@ -202,7 +202,7 @@ int main(int argc, char **argv)
}
printf("Message Number: ");
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;
case QUIT:
// should never be reached;
@ -258,6 +258,12 @@ int main(int argc, char **argv)
{
buffer[size] = '\0';
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
{
fprintf(stderr, "<< Server error occured, abort\n");

View File

@ -225,6 +225,8 @@ void *clientCommunication(void *data)
std::string incomplete_message = "";
std::string loggedInUsername;
do {
std::string response;
@ -271,8 +273,6 @@ void *clientCommunication(void *data)
else if (iequals(lines.at(0), "QUIT")) break;
else continue; // TODO: error message
std::string loggedInUsername;
switch (cmd) {
case LOGIN:
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) {
if (loggedInUsername.empty()) {
printf("%s %zu\n", loggedInUsername.c_str(), received.size());
return "ERR\n";
}
user* currentUser = user_handler::getInstance().getUser(loggedInUsername);
if (currentUser == nullptr) {
return "ERR\n";
return "0\n";
}
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) {
if (loggedInUsername.empty() || received.size() < 2) {
printf("%s %zu\n", loggedInUsername.c_str(), received.size());
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) {
if (loggedInUsername.empty() || received.size() < 2) {
printf("%s %zu\n", loggedInUsername.c_str(), received.size());
return "ERR\n";
}