#include "PassphrasePage.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\\passphrase.cpsp" #include "../SingletonManager/SessionManager.h" #include "../SingletonManager/LanguageManager.h" #include "../Crypto/KeyPair.h" #include "../ServerConfig.h" //#include "Poco/Net/HTTPServerParams.h" enum PageState { PAGE_ASK_PASSPHRASE, PAGE_SHOW_PASSPHRASE, PAGE_ASK_ENSURE_PASSPHRASE, PAGE_FORCE_ASK_PASSPHRASE }; #line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" #include "../ServerConfig.h" PassphrasePage::PassphrasePage(Session* arg): SessionHTTPRequestHandler(arg) { } void PassphrasePage::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 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp" chooseLanguage(request); const char* pageName = gettext("Passphrase"); std::string pageTitle = gettext("Neues Konto anlegen"); std::string pageSubtitle = gettext("2/3"); PageState state = PAGE_ASK_PASSPHRASE; // variable needed for flags auto lang = mSession->getLanguage(); auto sm = SessionManager::getInstance(); auto lm = LanguageManager::getInstance(); auto uri_start = ServerConfig::g_serverPath;//request.serverParams().getServerName(); //Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER]; Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER]; if(lang == LANG_DE) { wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER]; } // remove old cookies if exist sm->deleteLoginCookies(request, response, mSession); // save login cookie, because maybe we've get an new session response.addCookie(mSession->getLoginCookie()); if(mSession->getSessionState() == SESSION_STATE_RESET_PASSWORD_REQUEST) { state = PAGE_FORCE_ASK_PASSPHRASE; } if (!form.empty()) { auto btnNext = form.get("nextEnsure", ""); auto btnChecked = form.get("btnChecked", ""); auto langBtn = form.get("lang", ""); if(btnChecked != "") { mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN); response.redirect(ServerConfig::g_serverPath + "/passphrase"); return; } if(btnNext != "") { state = PAGE_ASK_ENSURE_PASSPHRASE; } else if(langBtn == "") { auto registerKeyChoice = form.get("passphrase", "no"); std::string oldPassphrase = ""; if (registerKeyChoice == "no") { auto oldPassphrase = KeyPair::filterPassphrase(form.get("passphrase-existing", "")); if(oldPassphrase != "") { if (User::validatePassphrase(oldPassphrase, &wordSource)) { // passphrase is valid if(PAGE_FORCE_ASK_PASSPHRASE == state) { auto compareResult = mSession->comparePassphraseWithSavedKeys(oldPassphrase, wordSource); if(-2 == compareResult) { response.redirect(ServerConfig::g_serverPath + "/error500"); return; } else if(1 == compareResult) { response.redirect(ServerConfig::g_serverPath + "/updateUserPassword"); return; } } else { mSession->setPassphrase(oldPassphrase); mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN); response.redirect(ServerConfig::g_serverPath + "/saveKeys"); return; //state = PAGE_SHOW_PASSPHRASE; } } else { addError(new Error(gettext("Passphrase"), gettext("Diese Passphrase ist ungültig, bitte überprüfen oder neu generieren (lassen).")), false); } } } else if (registerKeyChoice == "yes") { mSession->generatePassphrase(); } } } // double check passphrase auto passphrase = mSession->getOldPassphrase(); auto langWordSource = wordSource; if("" != passphrase && !User::validatePassphrase(passphrase, &wordSource)) { addError(new Error("PassphrasePage", "Invalid Passphrase after double check")); addError(new ParamError("PassphrasePage", "passphrase", passphrase.data())); if(!mSession->getNewUser().isNull()) { addError(new ParamError("PassphrasePage", "user email", mSession->getNewUser()->getModel()->getEmail())); } sendErrorsAsEmail(); addError(new Error(gettext("Passphrase"), gettext("intern error please try again later")), false); //response.redirect(ServerConfig::g_serverPath + "/error500"); //return; } //printf("wordSource: %d, langWordSource: %d\n", (int)wordSource, (int)langWordSource); if(wordSource != langWordSource) { mSession->generatePassphrase(); User::validatePassphrase(passphrase, &wordSource); } if(mSession->getSessionState() == SESSION_STATE_PASSPHRASE_GENERATED && state != PAGE_ASK_ENSURE_PASSPHRASE) { state = PAGE_SHOW_PASSPHRASE; //mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN); } if(state == PAGE_ASK_ENSURE_PASSPHRASE) { pageSubtitle = gettext("3/3"); } else if(state == PAGE_ASK_PASSPHRASE) { pageSubtitle = gettext("1/3"); } else if(state == PAGE_FORCE_ASK_PASSPHRASE) { pageTitle = gettext("Neues Passwort anlegen"); pageSubtitle = gettext("1/3"); } getErrors(mSession); #line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp" bool withMaterialIcons = false; #line 138 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp" withMaterialIcons = true; std::ostream& _responseStream = response.send(); Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1); std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream; responseStream << "\n"; // begin include login_header.cpsp // begin include header.cpsp responseStream << "\n"; responseStream << "\n"; responseStream << "\n"; responseStream << "
\n"; responseStream << "\n"; responseStream << "\n"; responseStream << ""; #line 249 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp" responseStream << ( gettext("Deine E-Mail Adresse wurde erfolgreich bestätigt.") ); responseStream << "
\n"; responseStream << "\t\t\t"; #line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp" responseStream << ( gettext("Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes wiederherstellen?") ); responseStream << "
\n"; responseStream << "\t\t\t\t \n"; responseStream << "\t\t\t\t"; #line 296 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp" responseStream << ( gettext("Um dein Konto wiederherzustellen und dir ein Neues Passwort auswählen zu können, tippe hier bitte die Wörter deiner Passphrase in der richtigen Reihenfolge ein, welche du dir aufgeschrieben hast.") ); responseStream << "
\n"; responseStream << "\t\t\t"; #line 311 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp" responseStream << ( gettext("Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende dich an den Server-Admin.") ); responseStream << "
\n"; responseStream << "\t\t\t\t