#include "LoginPage.h" #include "Poco/Net/HTTPServerRequest.h" #include "Poco/Net/HTTPServerResponse.h" #include "Poco/Net/HTMLForm.h" #include "Poco/DeflatingStream.h" #line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" #include "../gettext.h" #include "Poco/Net/HTTPCookie.h" #include "Poco/Net/HTTPServerParams.h" #include "Poco/Logger.h" #include "../SingletonManager/SessionManager.h" #include "../SingletonManager/LanguageManager.h" #line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" #include "../ServerConfig.h" LoginPage::LoginPage(Session* arg): SessionHTTPRequestHandler(arg) { } void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response) { response.setChunkedTransferEncoding(true); response.setContentType("text/html"); bool _compressResponse(request.hasToken("Accept-Encoding", "gzip")); if (_compressResponse) response.set("Content-Encoding", "gzip"); Poco::Net::HTMLForm form(request, request.stream()); #line 17 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp" const char* pageName = "Login"; auto sm = SessionManager::getInstance(); auto lm = LanguageManager::getInstance(); auto lang = chooseLanguage(request); auto langCatalog = lm->getFreeCatalog(lang); std::string presetEmail(""); if(mSession && mSession->getUser()) { presetEmail = mSession->getUser()->getEmail(); } if(!form.empty()) { bool langUpdatedByBtn = false; auto langBtn = form.get("lang-btn", ""); auto langInput = form.get("lang", ""); auto updatedLang = LANG_NULL; if(langBtn != "") { updatedLang = chooseLanguage(request, langBtn); langUpdatedByBtn = true; } else if(langInput != "") { updatedLang = chooseLanguage(request, langInput); } if(updatedLang != LANG_NULL && updatedLang != lang) { lang = updatedLang; langCatalog = lm->getFreeCatalog(lang); } auto email = form.get("login-email", ""); auto password = form.get("login-password", ""); if(email != "" && password != "") { //auto session = sm->getSession(request); if(!mSession) { mSession = sm->getNewSession(); mSession->setLanguageCatalog(langCatalog); // get language // first check url, second check language header // for debugging client ip auto client_ip = request.clientAddress(); std::string clientIpString = "client ip: "; clientIpString += client_ip.toString(); Poco::Logger::get("requestLog").information(clientIpString); // debugging end auto user_host = request.clientAddress().host(); mSession->setClientIp(user_host); response.addCookie(mSession->getLoginCookie()); } else { langCatalog = mSession->getLanguageCatalog(); } auto userState = mSession->loadUser(email, password); getErrors(mSession); auto uri_start = request.serverParams().getServerName(); switch(userState) { case USER_EMPTY: case USER_PASSWORD_INCORRECT: addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("E-Mail or password isn't right, please try again!"))); break; case USER_PASSWORD_ENCRYPTION_IN_PROCESS: addError(new Error(langCatalog->gettext("Passwort"), langCatalog->gettext("Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."))); break; case USER_EMAIL_NOT_ACTIVATED: mSession->addError(new Error(langCatalog->gettext("Account"), langCatalog->gettext("E-Mail Address not checked, do you already get one?"))); response.redirect(ServerConfig::g_serverPath + "/checkEmail"); return; case USER_NO_KEYS: response.redirect(ServerConfig::g_serverPath + "/passphrase"); return; case USER_NO_PRIVATE_KEY: case USER_COMPLETE: response.redirect(ServerConfig::g_php_serverPath + "/"); return; } } else if(!langUpdatedByBtn) { addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!"))); } } else { // on enter login page with empty form //auto session = sm->getSession(request); // remove old cookies and session if exist if(mSession) { getErrors(mSession); sm->releaseSession(mSession); } sm->deleteLoginCookies(request, response); } std::ostream& _responseStream = response.send(); Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1); std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream; responseStream << "\n"; // begin include header.cpsp responseStream << "\n"; responseStream << "\n"; responseStream << "\n"; responseStream << "
\n"; responseStream << "\n"; responseStream << "\n"; responseStream << "Login Server in Entwicklung
\n"; responseStream << "\tAlpha "; #line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" responseStream << ( ServerConfig::g_versionString ); responseStream << "
\n"; responseStream << "