#include "SaveKeysPage.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\\saveKeys.cpsp" #include "Poco/Net/HTTPServerParams.h" enum PageState { PAGE_ASK, PAGE_SHOW_PUBKEY, PAGE_ERROR }; #line 1 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\header.cpsp" #include "../ServerConfig.h" SaveKeysPage::SaveKeysPage(Session* arg): SessionHTTPRequestHandler(arg) { } void SaveKeysPage::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 18 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp" const char* pageName = "Daten auf Server speichern?"; bool hasErrors = mSession->errorCount() > 0; // crypto key only in memory, if user has tipped in his passwort in this session bool hasPassword = mSession->getUser()->hasCryptoKey(); PageState state = PAGE_ASK; auto uri_start = ServerConfig::g_php_serverPath;//request.serverParams().getServerName(); // skip asking user if he like to save keys and passphrase on server state = PAGE_SHOW_PUBKEY; if(!mSession->generateKeys(true, true)) { getErrors(mSession); } if(!form.empty()) { // privkey auto savePrivkeyChoice = form.get("save-privkey"); bool savePrivkey = false; if(savePrivkeyChoice == "yes") { if(!hasPassword) { // check pwd auto pwd = form.get("save-privkey-password", ""); if(!mSession->isPwdValid(pwd)) { addError(new Error("Passwort", "Das Passwort stimmt nicht. Bitte verwende dein Passwort von der Registrierung")); hasErrors = true; } else { savePrivkey = true; } } else { savePrivkey = true; } } if(!hasErrors) { auto savePassphraseChoice = form.get("save-passphrase"); bool savePassphrase = false; if(savePassphraseChoice == "yes") { savePassphrase = true; } if(!mSession->generateKeys(savePrivkey, savePassphrase)) { hasErrors = true; } else if(mSession->getSessionState() >= SESSION_STATE_KEY_PAIR_GENERATED) { state = PAGE_SHOW_PUBKEY; //printf("uri_start: %s\n", uri_start.data()); //response.redirect(uri_start + "/"); } else { state = PAGE_ERROR; } } //printf("SaveKeysPage: hasErrors: %d, session state: %d, target state: %d\n", //hasErrors, mSession->getSessionState(), SESSION_STATE_KEY_PAIR_GENERATED); } getErrors(mSession); 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 0.4.5
\n"; responseStream << "Deine Daten werden nun verschlüsselt und gespeichert.
\n"; responseStream << "\t\t\t\n"; responseStream << "\t\t\tZurück zur Startseite\n"; responseStream << "\t\tEin Fehler trat auf, bitte versuche es erneut oder wende dich an den Server-Admin
\n"; responseStream << "\t\t\t"; #line 131 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp" responseStream << ( mSession->getSessionStateString() ); responseStream << "\n"; responseStream << "\t\t