#include "__SMTP_AUTH.h" #include "SMTPServer.h" #include "Base64.h" namespace mail { int __SMTP_AUTH::processCommand(coreutils::PString request, SMTPSession &session, SMTPServer &server, std::stringstream &data) { switch(session.authState) { case USER_UNKNOWN: if(request[1].str() == "LOGIN") { data << "334 VXNlcm5hbWU6" << CRLF; // setTimer(10.0f); session.authState = USER_QUERY; session.server.commands.grabInput(&session, *this); } else { data << "504 AUTH method not supported." << CRLF; } return 1; case USER_QUERY: session.userName = request[0].str(); // setTimer(0.0f); data << "334 UGFzc3dvcmQ6" << CRLF; // setTimer(10.0f); session.authState = USER_SECRET_QUERY; return 1; case USER_SECRET_QUERY: session.password = request[0].str(); // setTimer(0.0f); coreutils::Base64 base64; if(authLogin(session.userName, session.password, server)) { data << "235 2.7.0 Authentication successful" << CRLF; session.relay = true; session.authState = USER_KNOWN; session.server.commands.clearGrab(&session); } else { data << "530 Login was unsuccessful." << CRLF; } return 1; } return 0; } bool __SMTP_AUTH::authLogin(std::string userName, std::string password, SMTPServer &server) { std::string secretPath = server.mailFileSystem.getMailBoxPath(userName) + "/.password"; coreutils::File secret(secretPath); secret.read(); return secret.asString() == password; } }