#include "CheckEmailPage.h" #include "Poco/Net/HTTPServerRequest.h" #include "Poco/Net/HTTPServerResponse.h" #include "Poco/Net/HTMLForm.h" #include "Poco/DeflatingStream.h" #line 7 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp" #include "../SingletonManager/SessionManager.h" #include "../model/User.h" #include "Poco/Net/HTTPCookie.h" enum PageState { PAGE_VERIFICATION_FAILED, PAGE_ASK_PASSPHRASE, PAGE_SHOW_PASSPHRASE, PAGE_ASK_VERIFICATION_CODE }; CheckEmailPage::CheckEmailPage(Session* arg): SessionHTTPRequestHandler(arg) { } void CheckEmailPage::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 20 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp" auto sm = SessionManager::getInstance(); bool hasErrors = false; unsigned long long verificationCode = 0; PageState state = PAGE_ASK_PASSPHRASE; std::string uri = request.getURI(); //printf("uri: %s\n", uri.data()); if(!form.empty()) { try { verificationCode = stoll(form.get("email-verification-code", "0")); } catch(...) {} } if(!verificationCode) { size_t pos = uri.find_last_of("/"); try { verificationCode = stoll(uri.substr(pos+1)); } catch(...) {} } if(!verificationCode) { state = PAGE_ASK_VERIFICATION_CODE; } else { // no session if(!mSession || mSession->getEmailVerificationCode() != verificationCode) { mSession = sm->findByEmailVerificationCode(verificationCode); } // no session in server, load from db if(!mSession) { mSession = sm->getNewSession(); if(mSession->loadFromEmailVerificationCode(verificationCode)) { auto cookie_id = mSession->getHandle(); auto user_host = request.clientAddress().host(); mSession->setClientIp(user_host); response.addCookie(Poco::Net::HTTPCookie("user", std::to_string(cookie_id))); } else { sm->releseSession(mSession); mSession = nullptr; state = PAGE_VERIFICATION_FAILED; } } if(mSession) { mSession->updateEmailVerification(verificationCode); hasErrors = mSession->errorCount() > 0; if(!hasErrors && !form.empty()) { auto registerKeyChoice = form.get("register-key", ""); std::string oldPassphrase = ""; if(registerKeyChoice == "no") { auto oldPassphrase = form.get("register-key-existing", ""); if(oldPassphrase != "" && User::validatePassphrase(oldPassphrase)) { // passphrase is valid mSession->setPassphrase(oldPassphrase); mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN); state = PAGE_SHOW_PASSPHRASE; } else { mSession->addError(new Error("Merkspruch", "Dieser Merkspruch ist ungültig, bitte überprüfen oder neu generieren (lassen).")); } } else if(registerKeyChoice == "yes") { mSession->generatePassphrase(); state = PAGE_SHOW_PASSPHRASE; } } } else { state = PAGE_VERIFICATION_FAILED; } } std::ostream& _responseStream = response.send(); Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1); std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream; responseStream << "\n"; responseStream << "\n"; responseStream << "\n"; responseStream << "
\n"; responseStream << "\n"; responseStream << "\n"; responseStream << "Bitte versuche es erneut
\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t"; #line 155 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp" } else if(mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) { responseStream << "\n"; responseStream << "\t\t\t\tFehler, bitte wende dich an den Server-Admin order versuche dich erneut zu registrieren.
\n"; responseStream << "\t\t"; #line 163 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp" } responseStream << "\n"; responseStream << "\t"; #line 164 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp" } else { responseStream << "\n"; responseStream << "\t\t