more exact error message for password validation

This commit is contained in:
Dario 2019-10-02 16:46:55 +02:00
parent d6e9cc19ab
commit 3de1e21259
23 changed files with 357 additions and 67 deletions

View File

@ -14,7 +14,11 @@ using namespace Poco::Data::Keywords;
KeyPair::KeyPair()
: mPrivateKey(nullptr), mSodiumSecret(nullptr)
{
// TODO: set memory to zero for
// unsigned char mPublicKey[ed25519_pubkey_SIZE];
// unsigned char mSodiumPublic[crypto_sign_PUBLICKEYBYTES];
memset(mPublicKey, 0, ed25519_pubkey_SIZE);
memset(mSodiumPublic, 0, crypto_sign_PUBLICKEYBYTES);
}
KeyPair::~KeyPair()
@ -91,6 +95,14 @@ bool KeyPair::generateFromPassphrase(const char* passphrase, Mnemonic* word_sour
}
mSodiumSecret = new ObfusArray(crypto_sign_SECRETKEYBYTES, sodium_secret);
// print hex for all keys for debugging
printf("//********** Keys *************//\n");
printf("Public: \t%s\n", getHex(mPublicKey, ed25519_pubkey_SIZE).data());
printf("Private: \t%s\n", getHex(*mPrivateKey, mPrivateKey->size()).data());
printf("Sodium Public: \t%s\n", getHex(mSodiumPublic, crypto_sign_PUBLICKEYBYTES).data());
printf("Sodium Private: \t%s\n", getHex(*mSodiumSecret, mSodiumSecret->size()).data());
printf("//********* Keys End ************//\n");
// using
return true;
}
@ -107,6 +119,18 @@ std::string KeyPair::getPubkeyHex()
return pubHex;
}
std::string KeyPair::getHex(const unsigned char* data, size_t size)
{
size_t hexSize = size * 2 + 1;
char* hexString = (char*)malloc(hexSize);
memset(hexString, 0, hexSize);
sodium_bin2hex(hexString, hexSize, data, size);
std::string hex = hexString;
free(hexString);
return hex;
}
bool KeyPair::savePrivKey(int userId)
{
auto cm = ConnectionManager::getInstance();

View File

@ -19,13 +19,15 @@ public:
bool generateFromPassphrase(const char* passphrase, Mnemonic* word_source);
std::string getPubkeyHex();
bool savePrivKey(int userId);
static std::string getHex(const unsigned char* data, size_t size);
inline const unsigned char* getPublicKey() const { return mSodiumPublic; }
protected:
const ObfusArray* getPrivateKey() const { return mSodiumSecret; }
private:
ObfusArray* mPrivateKey;
ObfusArray* mSodiumSecret;

View File

@ -45,6 +45,13 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://gradido2.dario-rekowski.de/css/styles.css\">\n";
responseStream << "<style type=\"text/css\" >\n";
responseStream << ".grd_container\n";
responseStream << "{\n";
responseStream << " max-width:820px;\n";
responseStream << " margin-left:auto;\n";
responseStream << " margin-right:auto;\n";
responseStream << "}\n";
responseStream << "\n";
responseStream << "input:not([type='radio']) {\n";
responseStream << "\twidth:200px;\n";
responseStream << "}\n";
@ -57,25 +64,25 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "<body>\n";
responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t";
#line 38 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
#line 45 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
if(mSession && hasErrors) { responseStream << "\n";
responseStream << "\t\t";
#line 39 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
#line 46 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
responseStream << ( mSession->getErrorsHtml() );
responseStream << "\n";
responseStream << "\t";
#line 40 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
#line 47 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
} responseStream << "\n";
responseStream << "\t<h1>Einen neuen Account anlegen</h1>\n";
responseStream << "\t";
#line 42 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
#line 49 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
if(mSession && mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) { responseStream << "\n";
responseStream << "\t\t<div class=\"grd_text\">\n";
responseStream << "\t\t\t<p>Die E-Mail wurde noch nicht verschickt, bitte habe noch etwas Geduld.</p>\n";
responseStream << "\t\t\t<p>Versuche es einfach in 1-2 Minuten erneut.</p>\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 47 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
#line 54 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
} else { responseStream << "\n";
responseStream << "\t<form method=\"GET\">\n";
responseStream << "\t\t<p>Bitte gebe deinen E-Mail Verification Code ein. </p>\n";
@ -83,7 +90,7 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "\t\t<input class=\"grd_bn_succeed\" type=\"submit\" value=\"Überprüfe Code\">\n";
responseStream << "\t</form>\n";
responseStream << "\t";
#line 53 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
#line 60 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
} responseStream << "\n";
responseStream << "</div>\n";
responseStream << "</body>\n";

View File

@ -58,12 +58,16 @@ void DashboardPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
responseStream << "</p>\n";
responseStream << "\t";
#line 31 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\dashboard.cpsp"
if(mSession->getSessionState() == SESSION_STATE_EMAIL_VERIFICATION_SEND) responseStream << "\n";
if(mSession->getSessionState() == SESSION_STATE_EMAIL_VERIFICATION_SEND) { responseStream << "\n";
responseStream << "\t<p>Verification Code E-Mail wurde erfolgreich an dich verschickt, bitte schaue auch in dein Spam-Verzeichnis nach wenn du sie nicht findest und klicke auf den Link den du dort findest oder kopiere den Code hier her:</p>\n";
responseStream << "\t<form method=\"GET\" action=\"/checkEmail\">\n";
responseStream << "\t\t<input type=\"number\" name=\"email-verification-code\">\n";
responseStream << "\t\t<input class=\"grd_bn_succeed\" type=\"submit\" value=\"Überprüfe Code\">\n";
responseStream << "\t</form>\n";
responseStream << "\t";
#line 37 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\dashboard.cpsp"
} responseStream << "\n";
responseStream << "\t<a class=\"grd_bn\" href=\"/logout\">Abmelden</a>\n";
responseStream << "</div>\n";
responseStream << "</body>\n";
responseStream << "</html>\n";

View File

@ -7,6 +7,9 @@
#line 4 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\login.cpsp"
#include "../SingletonManager/SessionManager.h"
#include "Poco/Net/HTTPCookie.h"
#include "Poco/Net/HTTPServerParams.h"
@ -18,6 +21,23 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::
if (_compressResponse) response.set("Content-Encoding", "gzip");
Poco::Net::HTMLForm form(request, request.stream());
#line 10 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\login.cpsp"
auto session = SessionManager::getInstance()->getNewSession();
if(!form.empty()) {
auto email = form.get("login-email", "");
auto password = form.get("login-password", "");
if(session->loadUser(email, password)) {
auto user_host = request.clientAddress().host();
session->setClientIp(user_host);
response.addCookie(session->getLoginCookie());
auto uri_start = request.serverParams().getServerName();
response.redirect(uri_start + "/");
return;
}
}
std::ostream& _responseStream = response.send();
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
@ -30,11 +50,31 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::
responseStream << "<title>Gradido Login Server: Login</title>\n";
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://gradido2.dario-rekowski.de/css/styles.css\">\n";
responseStream << "<style type=\"text/css\" >\n";
responseStream << ".grd_container\n";
responseStream << "{\n";
responseStream << " max-width:820px;\n";
responseStream << " margin-left:auto;\n";
responseStream << " margin-right:auto;\n";
responseStream << "}\n";
responseStream << "\n";
responseStream << "input:not([type='radio']) {\n";
responseStream << "\twidth:200px;\n";
responseStream << "}\n";
responseStream << "label:not(.grd_radio_label) {\n";
responseStream << "\twidth:80px;\n";
responseStream << "\tdisplay:inline-block;\n";
responseStream << "}\n";
responseStream << "</style>\n";
responseStream << "</head>\n";
responseStream << "<body>\n";
responseStream << "<h1>Login</h1>\n";
responseStream << "<form method=\"POST\">\n";
responseStream << "\t<div class=\"grd_container\">\n";
responseStream << "\t\t<h1>Login</h1>\n";
responseStream << "\t\t";
#line 56 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\login.cpsp"
responseStream << ( session->getErrorsHtml() );
responseStream << "\n";
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
responseStream << "\t\t\t<legend>Login</legend>\n";
responseStream << "\t\t\t<p>Bitte gebe deine Zugangsdaten ein um dich einzuloggen.</p>\n";

View File

@ -51,6 +51,11 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
return handleCheckEmail(s, uri, request);
}
if (s) {
if(url_first_part == "/logout") {
sm->releseSession(s);
printf("session released\n");
return new LoginPage;
}
auto sessionState = s->getSessionState();
if(sessionState == SESSION_STATE_EMAIL_VERIFICATION_CODE_CHECKED ||
sessionState == SESSION_STATE_PASSPHRASE_GENERATED) {
@ -62,10 +67,12 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
//else if (uri == "/saveKeys") {
return new SaveKeysPage(s);
}
return new DashboardPage(s);
if (s && s->getUser()) {
return new DashboardPage(s);
}
} else {
if (uri == "/") {
if (uri == "/config") {
return new ConfigPage;
}
else if (uri == "/login") {
@ -75,7 +82,8 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
return new RegisterPage;
}
}
return new HandleFileRequest;
return new LoginPage;
//return new HandleFileRequest;
//return new PageRequestHandlerFactory;
}

View File

@ -78,6 +78,13 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://gradido2.dario-rekowski.de/css/styles.css\">\n";
responseStream << "<style type=\"text/css\" >\n";
responseStream << ".grd_container\n";
responseStream << "{\n";
responseStream << " max-width:820px;\n";
responseStream << " margin-left:auto;\n";
responseStream << " margin-right:auto;\n";
responseStream << "}\n";
responseStream << "\n";
responseStream << "input:not([type='radio']) {\n";
responseStream << "\twidth:200px;\n";
responseStream << "}\n";
@ -90,18 +97,18 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "<body>\n";
responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t";
#line 71 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 78 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
if(mSession && hasErrors) { responseStream << "\n";
responseStream << "\t\t";
#line 72 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 79 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
responseStream << ( mSession->getErrorsHtml() );
responseStream << "\n";
responseStream << "\t";
#line 73 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 80 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
} responseStream << "\n";
responseStream << "\t<h1>Einen neuen Account anlegen</h1>\n";
responseStream << "\t";
#line 75 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 82 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
if(state == PAGE_SHOW_PASSPHRASE) { responseStream << "\n";
responseStream << "\t\t<div class=\"grd_text-max-width\">\n";
responseStream << "\t\t\t<div class=\"grd_text\">\n";
@ -109,14 +116,14 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "\t\t\t</div>\n";
responseStream << "\t\t\t<div class=\"grd_textarea\">\n";
responseStream << "\t\t\t\t";
#line 81 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 88 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
responseStream << ( mSession->getPassphrase() );
responseStream << "\n";
responseStream << "\t\t\t</div>\n";
responseStream << "\t\t\t<a href=\"/saveKeys\">Weiter</a>\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 85 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 92 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
} else if(state == PAGE_ASK_PASSPHRASE) { responseStream << "\n";
responseStream << "\t<form method=\"POST\">\n";
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
@ -131,7 +138,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "\t\t\t\t<label class=\"grd_radio_label\" for=\"passphrase-new-no\">Ja, bitte wiederherstellen!</label>\n";
responseStream << "\t\t\t</p>\n";
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"passphrase-existing\">";
#line 98 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 105 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
responseStream << ( !form.empty() ? form.get("passphrase-existing", "") : "" );
responseStream << "</textarea>\n";
responseStream << "\t\t</fieldset>\n";
@ -139,13 +146,13 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "\t\t\n";
responseStream << "\t</form>\n";
responseStream << "\t";
#line 103 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 110 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
} else { responseStream << "\n";
responseStream << "\t\t<div class=\"grd_text\">\n";
responseStream << "\t\t\tUngültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende dich an den Server-Admin. \n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 107 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
#line 114 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
} responseStream << "\n";
responseStream << "</div>\n";
responseStream << "</body>\n";

View File

@ -35,12 +35,9 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
);
}
if(userReturned) {
auto cookie_id = session->getHandle();
//auto user_host_string = request.clientAddress().toString();
auto user_host = request.clientAddress().host();
session->setClientIp(user_host);
//printf("cookie: %d, user_host: %s\n", cookie_id, user_host.data());
response.addCookie(Poco::Net::HTTPCookie("user", std::to_string(cookie_id)));
response.addCookie(session->getLoginCookie());
}
}
std::ostream& _responseStream = response.send();
@ -56,6 +53,13 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://gradido2.dario-rekowski.de/css/styles.css\">\n";
responseStream << "<style type=\"text/css\" >\n";
responseStream << ".grd_container\n";
responseStream << "{\n";
responseStream << " max-width:820px;\n";
responseStream << " margin-left:auto;\n";
responseStream << " margin-right:auto;\n";
responseStream << "}\n";
responseStream << "\n";
responseStream << "input:not([type='radio']) {\n";
responseStream << "\twidth:200px;\n";
responseStream << "}\n";
@ -69,7 +73,7 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t<h1>Einen neuen Account anlegen</h1>\n";
responseStream << "\t";
#line 53 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 57 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
if(!form.empty() && userReturned) { responseStream << "\n";
responseStream << "\t\t\n";
responseStream << "\t\t<div class=\"grd_text-max-width\">\n";
@ -79,19 +83,19 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t\t</div>\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 61 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 65 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
} else { responseStream << "\n";
responseStream << "\t<form method=\"POST\">\n";
responseStream << "\t\n";
responseStream << "\t\t";
#line 64 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 68 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
if(!form.empty() && !userReturned) { responseStream << "\n";
responseStream << "\t\t\t";
#line 65 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 69 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
responseStream << ( session->getErrorsHtml() );
responseStream << "\n";
responseStream << "\t\t";
#line 66 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 70 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
} responseStream << "\n";
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
responseStream << "\t\t\t<legend>Account anlegen</legend>\n";
@ -99,14 +103,14 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t\t<p class=\"grd_small\">\n";
responseStream << "\t\t\t\t<label for=\"register-name\">Vorname</label>\n";
responseStream << "\t\t\t\t<input id=\"register-name\" type=\"text\" name=\"register-name\" value=\"";
#line 72 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 76 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
responseStream << ( !form.empty() ? form.get("register-name") : "" );
responseStream << "\"/>\n";
responseStream << "\t\t\t</p>\n";
responseStream << "\t\t\t<p class=\"grd_small\">\n";
responseStream << "\t\t\t\t<label for=\"register-email\">E-Mail</label>\n";
responseStream << "\t\t\t\t<input id=\"register-email\" type=\"email\" name=\"register-email\" value=\"";
#line 76 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 80 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
responseStream << ( !form.empty() ? form.get("register-email") : "" );
responseStream << "\"/>\n";
responseStream << "\t\t\t</p>\n";
@ -123,7 +127,7 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t\n";
responseStream << "\t</form>\n";
responseStream << "\t";
#line 90 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
#line 94 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\register.cpsp"
} responseStream << "\n";
responseStream << "</div>\n";
responseStream << "</body>\n";

View File

@ -7,6 +7,8 @@
#line 7 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#include "Poco/Net/HTTPServerParams.h"
enum PageState
{
PAGE_ASK,
@ -30,7 +32,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
if (_compressResponse) response.set("Content-Encoding", "gzip");
Poco::Net::HTMLForm form(request, request.stream());
#line 16 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 18 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
bool hasErrors = mSession->errorCount() > 0;
@ -65,10 +67,15 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
hasErrors = true;
} else if(mSession->getSessionState() >= SESSION_STATE_KEY_PAIR_GENERATED) {
state = PAGE_SHOW_PUBKEY;
auto uri_start = request.serverParams().getServerName();
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);
}
std::ostream& _responseStream = response.send();
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
@ -83,6 +90,13 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://gradido2.dario-rekowski.de/css/styles.css\">\n";
responseStream << "<style type=\"text/css\" >\n";
responseStream << ".grd_container\n";
responseStream << "{\n";
responseStream << " max-width:820px;\n";
responseStream << " margin-left:auto;\n";
responseStream << " margin-right:auto;\n";
responseStream << "}\n";
responseStream << "\n";
responseStream << "input:not([type='radio']) {\n";
responseStream << "\twidth:200px;\n";
responseStream << "}\n";
@ -95,18 +109,18 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<body>\n";
responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t";
#line 76 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 90 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
if(hasErrors) { responseStream << "\n";
responseStream << "\t\t";
#line 77 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 91 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
responseStream << ( mSession->getErrorsHtml() );
responseStream << "\n";
responseStream << "\t";
#line 78 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 92 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
} responseStream << "\n";
responseStream << "\t<h1>Daten speichern</h1>\n";
responseStream << "\t";
#line 80 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 94 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
if(state == PAGE_ASK) { responseStream << "\n";
responseStream << "\t<form method=\"POST\">\n";
responseStream << "\t\t<fieldset>\n";
@ -121,7 +135,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t\t\t<label class=\"grd_radio_label\" for=\"save-privkey-yes\">Ja, bitte speichern!</label>\n";
responseStream << "\t\t\t</p>\n";
responseStream << "\t\t\t";
#line 93 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 107 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
if(!hasPassword) { responseStream << "\n";
responseStream << "\t\t\t\t<p>Ich brauche nochmal dein Passwort wenn du dich für ja entscheidest.</p>\n";
responseStream << "\t\t\t\t<p class=\"grd_small\">\n";
@ -129,7 +143,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t\t\t\t<input id=\"save-privkey-password\" type=\"password\" name=\"save-privkey-password\"/>\n";
responseStream << "\t\t\t\t</p>\n";
responseStream << "\t\t\t";
#line 99 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 113 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
} responseStream << "\n";
responseStream << "\t\t\t<p class=\"grd_small\">\n";
responseStream << "\t\t\t\t<input id=\"save-privkey-no\" type=\"radio\" name=\"save-privkey\" value=\"no\"/>\n";
@ -154,27 +168,31 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t<input class=\"grd_bn_succeed\" type=\"submit\" value=\"Speichern\">\n";
responseStream << "\t</form>\n";
responseStream << "\t";
#line 122 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 136 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
} else if(state == PAGE_SHOW_PUBKEY) { responseStream << "\n";
responseStream << "\t\t<div class=\"grd_text\">\n";
responseStream << "\t\t\t<p>Je nach Auswahl werden deine Daten nun verschl&uuml;sselt und gespeichert. </p>\n";
responseStream << "\t\t\t<p>Deine Gradido Adresse (Hex): </p>\n";
responseStream << "\t\t\t<p class=\"grd_textarea\">\n";
responseStream << "\t\t\t\t";
#line 127 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 141 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
responseStream << ( mSession->getUser()->getPublicKeyHex() );
responseStream << "\n";
responseStream << "\t\t\t</p>\n";
responseStream << "\t\t\t<a class=\"grd_bn\" href=\"../\">Zur&uuml;ck zur Startseite</a>\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 131 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 145 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
} else if(state == PAGE_ERROR) { responseStream << "\n";
responseStream << "\t\t<div class=\"grd_text\">\n";
responseStream << "\t\t\t<p>Ein Fehler trat auf, bitte versuche es erneut oder wende dich an den Server-Admin</p>\n";
responseStream << "\t\t\t";
#line 148 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
responseStream << ( mSession->getSessionStateString() );
responseStream << "\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 135 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
#line 150 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
} responseStream << "\n";
responseStream << "</div>\n";
responseStream << "</body>\n";

View File

@ -144,7 +144,11 @@ bool Extractor::extract(std::size_t pos, Poco::Data::BLOB& val)
if (_metadata.isNull(static_cast<Poco::UInt32>(pos)))
return false;
if (_metadata.metaColumn(static_cast<Poco::UInt32>(pos)).type() != Poco::Data::MetaColumn::FDT_BLOB)
// UNICORN ADD, Copy from string extract
// mysql reports BINARY types as FDT_STRING when being extracted
auto columnType = _metadata.metaColumn(static_cast<Poco::UInt32>(pos)).type();
//if (_metadata.metaColumn(static_cast<Poco::UInt32>(pos)).type() != Poco::Data::MetaColumn::FDT_BLOB)
if (columnType != Poco::Data::MetaColumn::FDT_STRING && columnType != Poco::Data::MetaColumn::FDT_BLOB)
throw MySQLException("Extractor: not a blob");
val.assignRaw(_metadata.rawData(pos), _metadata.length(pos));

View File

@ -33,6 +33,10 @@ bool SessionManager::init()
case VALIDATE_EMAIL: mValidations[i] = new Poco::RegularExpression("^[a-zA-Z0-9.!#$%&*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$"); break;
case VALIDATE_PASSWORD: mValidations[i] = new Poco::RegularExpression("^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@$!%*?&+-])[A-Za-z0-9@$!%*?&+-]{8,}$"); break;
case VALIDATE_PASSPHRASE: mValidations[i] = new Poco::RegularExpression("^(?:[a-z]* ){23}[a-z]*\s*$"); break;
case VALIDATE_HAS_NUMBER: mValidations[i] = new Poco::RegularExpression("[0-9]"); break;
case VALIDATE_HAS_SPECIAL_CHARACTER: mValidations[i] = new Poco::RegularExpression("[@$!%*?&+-]"); break;
case VALIDATE_HAS_UPPERCASE_LETTER: mValidations[i] = new Poco::RegularExpression("[A-Z]"); break;
case VALIDATE_HAS_LOWERCASE_LETTER: mValidations[i] = new Poco::RegularExpression("[a-z]"); break;
default: printf("[SessionManager::%s] unknown validation type\n", __FUNCTION__);
}
}

View File

@ -24,6 +24,10 @@ enum SessionValidationTypes {
VALIDATE_EMAIL,
VALIDATE_PASSWORD,
VALIDATE_PASSPHRASE,
VALIDATE_HAS_NUMBER,
VALIDATE_HAS_SPECIAL_CHARACTER,
VALIDATE_HAS_UPPERCASE_LETTER,
VALIDATE_HAS_LOWERCASE_LETTER,
VALIDATE_MAX
};

View File

@ -46,11 +46,22 @@ int WritePassphraseIntoDB::run()
size_t mlen = mPassphrase.size();
size_t crypto_size = crypto_box_SEALBYTES + mlen;
auto em = ErrorManager::getInstance();
auto dbSession = ConnectionManager::getInstance()->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
Poco::Data::Statement insert(dbSession);
insert << "INSERT INTO user_backups (user_id, passphrase) VALUES(?,?)",
use(mUserId), use(mPassphrase);
try {
if (insert.execute() != 1) {
em->addError(new ParamError("WritePassphraseIntoDB::run", "inserting passphrase for user failed", std::to_string(mUserId)));
em->sendErrorsAsEmail();
}
}
catch (Poco::Exception& ex) {
em->addError(new ParamError("WritePassphraseIntoDB::run", "insert passphrase mysql error", ex.displayText().data()));
em->sendErrorsAsEmail();
}
printf("[WritePassphraseIntoDB::run] timeUsed: %s\n", timeUsed.string().data());
return 0;
@ -60,7 +71,7 @@ int WritePassphraseIntoDB::run()
// --------------------------------------------------------------------------------------------------------------
Session::Session(int handle)
: mHandleId(handle), mSessionUser(nullptr)
: mHandleId(handle), mSessionUser(nullptr), mEmailVerificationCode(0), mState(SESSION_STATE_EMPTY)
{
}
@ -100,7 +111,23 @@ bool Session::createUser(const std::string& name, const std::string& email, cons
return false;
}
if (!sm->isValid(password, VALIDATE_PASSWORD)) {
addError(new Error("Password", "Bitte gebe ein g&uuml;ltiges Password ein mit mindestens 8 Zeichen, Gro&szlig;- und Kleinbuchstaben, mindestens einer Zahl und einem Sonderzeichen"));
// @$!%*?&+-
if (password.size() < 8) {
addError(new Error("Passwort", "Dein Passwort ist zu kurz!"));
}
else if (!sm->isValid(password, VALIDATE_HAS_LOWERCASE_LETTER)) {
addError(new Error("Passwort", "Dein Passwort enth&auml;lt keine Kleinbuchstaben!"));
}
else if (!sm->isValid(password, VALIDATE_HAS_UPPERCASE_LETTER)) {
addError(new Error("Passwort", "Dein Passwort enth&auml;lt keine Gro&szlig;buchstaben!"));
}
else if (!sm->isValid(password, VALIDATE_HAS_NUMBER)) {
addError(new Error("Passwort", "Dein Passwort enth&auml;lt keine Zahlen!"));
}
else if (!sm->isValid(password, VALIDATE_HAS_SPECIAL_CHARACTER)) {
addError(new Error("Passwort", "Dein Passwort enth&auml;lt keine Sonderzeichen (@$!%*?&+-)!"));
}
addError(new Error("Passwort", "Bitte gebe ein g&uuml;ltiges Password ein mit mindestens 8 Zeichen, Gro&szlig;- und Kleinbuchstaben, mindestens einer Zahl und einem Sonderzeichen"));
return false;
}
/*if (passphrase.size() > 0 && !sm->isValid(passphrase, VALIDATE_PASSPHRASE)) {
@ -248,10 +275,76 @@ bool Session::isPwdValid(const std::string& pwd)
bool Session::loadUser(const std::string& email, const std::string& password)
{
Profiler usedTime;
if (mSessionUser) delete mSessionUser;
mSessionUser = new User(email.data());
if (!mSessionUser->validatePwd(password)) {
addError(new Error("Login", "E-Mail oder Passwort nicht korrekt, bitte versuche es erneut"));
return false;
}
detectSessionState();
return true;
}
/*
SESSION_STATE_CRYPTO_KEY_GENERATED,
SESSION_STATE_USER_WRITTEN,
SESSION_STATE_EMAIL_VERIFICATION_WRITTEN,
SESSION_STATE_EMAIL_VERIFICATION_SEND,
SESSION_STATE_EMAIL_VERIFICATION_CODE_CHECKED,
SESSION_STATE_PASSPHRASE_GENERATED,
SESSION_STATE_PASSPHRASE_SHOWN,
SESSION_STATE_PASSPHRASE_WRITTEN,
SESSION_STATE_KEY_PAIR_GENERATED,
SESSION_STATE_KEY_PAIR_WRITTEN,
SESSION_STATE_COUNT
*/
void Session::detectSessionState()
{
if (!mSessionUser || !mSessionUser->hasCryptoKey()) {
return;
}
if (mSessionUser->getDBId() == 0) {
updateState(SESSION_STATE_CRYPTO_KEY_GENERATED);
return;
}
if (!mSessionUser->isEmailChecked()) {
if (mEmailVerificationCode == 0)
updateState(SESSION_STATE_USER_WRITTEN);
else
updateState(SESSION_STATE_EMAIL_VERIFICATION_WRITTEN);
return;
}
if (mSessionUser->getPublicKeyHex() == "") {
auto dbConnection = ConnectionManager::getInstance()->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
Poco::Data::Statement select(dbConnection);
Poco::Nullable<Poco::Data::BLOB> passphrase;
select << "SELECT passphrase from user_backups where user_id = ?;",
into(passphrase), bind(mSessionUser->getDBId());
try {
if (select.execute() == 1 && !passphrase.isNull()) {
updateState(SESSION_STATE_PASSPHRASE_WRITTEN);
return;
}
}
catch (Poco::Exception& exc) {
printf("mysql exception: %s\n", exc.displayText().data());
}
if (mPassphrase != "") {
updateState(SESSION_STATE_PASSPHRASE_GENERATED);
return;
}
updateState(SESSION_STATE_EMAIL_VERIFICATION_CODE_CHECKED);
return;
}
updateState(SESSION_STATE_KEY_PAIR_WRITTEN);
}
Poco::Net::HTTPCookie Session::getLoginCookie()
{
auto keks = Poco::Net::HTTPCookie("user", std::to_string(mHandleId));
@ -335,6 +428,7 @@ const char* Session::getSessionStateString()
const char* Session::translateSessionStateToString(SessionStates state)
{
switch (state) {
case SESSION_STATE_EMPTY: return "uninitalized";
case SESSION_STATE_CRYPTO_KEY_GENERATED: return "crpyto key generated";
case SESSION_STATE_USER_WRITTEN: return "User saved";
case SESSION_STATE_EMAIL_VERIFICATION_WRITTEN: return "E-Mail verification code saved";

View File

@ -25,6 +25,7 @@
class WriteEmailVerification;
enum SessionStates {
SESSION_STATE_EMPTY,
SESSION_STATE_CRYPTO_KEY_GENERATED,
SESSION_STATE_USER_WRITTEN,
SESSION_STATE_EMAIL_VERIFICATION_WRITTEN,
@ -85,7 +86,7 @@ protected:
void createEmailVerificationCode();
void detectSessionState();
static const char* translateSessionStateToString(SessionStates state);
int mHandleId;

View File

@ -92,6 +92,7 @@ int UserWriteKeysIntoDB::run()
if (mSavePrivKey) {
// TODO: encrypt privkey
auto privKey = keyPairs->getPrivateKey();
printf("[UserWriteKeysIntoDB] privKey hex: %s\n", KeyPair::getHex(*privKey, privKey->size()).data());
pprivkey_blob = mUser->encrypt(privKey);
//Poco::Data::BLOB privkey_blob(*privKey, privKey->size());
@ -129,8 +130,13 @@ int UserWriteKeysIntoDB::run()
}
// *******************************************************************************
// new user
User::User(const char* email, const char* name)
: mDBId(0), mEmail(email), mFirstName(name), mPasswordHashed(0), mEmailChecked(false), mCryptoKey(nullptr)
{
}
// load from db
User::User(const char* email)
: mDBId(0), mEmail(email), mPasswordHashed(0), mEmailChecked(false), mCryptoKey(nullptr)
{
@ -142,10 +148,13 @@ User::User(const char* email)
Poco::Nullable<Poco::Data::BLOB> pubkey;
Poco::Data::Statement select(session);
int email_checked = 0;
select << "SELECT id, name, password, pubkey, email_checked from users where email = ?",
into(mDBId), into(mFirstName), into(mPasswordHashed), into(pubkey), into(mEmailChecked), use(mEmail);
into(mDBId), into(mFirstName), into(mPasswordHashed), into(pubkey), into(email_checked), use(mEmail);
try {
if (select.execute() == 1) {
auto result = select.execute();
int zahl = 1;
if (result == 1) {
if (!pubkey.isNull()) {
auto pubkey_value = pubkey.value();
size_t hexSize = pubkey_value.size() * 2 + 1;
@ -155,14 +164,13 @@ User::User(const char* email)
mPublicHex = hexString;
free(hexString);
}
if (email_checked != 0) mEmailChecked = true;
}
} catch(...) {}
} catch(Poco::Exception& ex) {
addError(new ParamError("User::User", "mysql error", ex.displayText().data()));
}
}
User* User::login(const std::string& email, const std::string& password, ErrorList* errorContainer = nullptr)
{
}
User::~User()
@ -175,13 +183,23 @@ User::~User()
std::string User::generateNewPassphrase(Mnemonic* word_source)
{
auto em = ErrorManager::getInstance();
unsigned int random_indices[PHRASE_WORD_COUNT];
unsigned int str_sizes[PHRASE_WORD_COUNT];
unsigned int phrase_buffer_size = 0;
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
random_indices[i] = randombytes_random() % 2048;
str_sizes[i] = strlen(word_source->getWord(random_indices[i]));
auto word = word_source->getWord(random_indices[i]);
if (!word) {
em->addError(new ParamError("User::generateNewPassphrase", "empty word get for index", random_indices[i]));
em->sendErrorsAsEmail();
random_indices[i] = randombytes_random() % 2048;
word = word_source->getWord(random_indices[i]);
if (!word) return "Ein Fehler, bitte wende dich an den Server-Admin.";
}
str_sizes[i] = strlen(word);
phrase_buffer_size += str_sizes[i];
}
phrase_buffer_size += PHRASE_WORD_COUNT + 1;
@ -285,10 +303,11 @@ bool User::generateKeys(bool savePrivkey, const std::string& passphrase, Session
Profiler timeUsed;
UniLib::controller::TaskPtr generateKeysTask(new UserGenerateKeys(this, passphrase));
generateKeysTask->setFinishCommand(new SessionStateUpdateCommand(SESSION_STATE_KEY_PAIR_GENERATED, session));
//generateKeysTask->setFinishCommand(new SessionStateUpdateCommand(SESSION_STATE_KEY_PAIR_GENERATED, session));
//generateKeysTask->scheduleTask(generateKeysTask);
// run directly because we like to show pubkey on interface, shouldn't last to long
generateKeysTask->run();
session->updateState(SESSION_STATE_KEY_PAIR_GENERATED);
if (mDBId == 0) {
loadEntryDBId(ConnectionManager::getInstance()->getConnection(CONNECTION_MYSQL_LOGIN_SERVER));
@ -332,8 +351,12 @@ Poco::Data::BLOB* User::encrypt(const ObfusArray* data)
free(ciphertext);
return nullptr;
}
printf("[User::encrypt] encrypted: %s\n", KeyPair::getHex(ciphertext, ciphertext_len).data());
auto result_blob = new Poco::Data::BLOB(ciphertext, ciphertext_len);
free(ciphertext);
return new Poco::Data::BLOB(ciphertext, ciphertext_len);
return result_blob;
}
Poco::Data::Statement User::insertIntoDB(Poco::Data::Session session)

View File

@ -21,7 +21,7 @@ class User : public ErrorList
friend UserWriteIntoDB;
public:
// new user
//User(const char* email, const char* name, const char* password);
User(const char* email, const char* name);
// existing user
User(const char* email);
// login
@ -31,7 +31,7 @@ public:
static std::string generateNewPassphrase(Mnemonic* word_source);
static bool validatePassphrase(const std::string& passphrase);
static User* login(const std::string& email, const std::string& password, ErrorList* errorContainer = nullptr);
//static User* login(const std::string& email, const std::string& password, ErrorList* errorContainer = nullptr);
bool generateKeys(bool savePrivkey, const std::string& passphrase, Session* session);
@ -43,6 +43,7 @@ public:
inline const char* getName() const { return mFirstName.data(); }
inline int getDBId() const { return mDBId; }
inline void setEmailChecked() { mEmailChecked = true; }
inline bool isEmailChecked() { return mEmailChecked; }
inline std::string getPublicKeyHex() { lock(); std::string pubkeyHex = mPublicHex; unlock(); return pubkeyHex; }
inline void setPublicKeyHex(const std::string& publicKeyHex) { lock(); mPublicHex = publicKeyHex; unlock(); }

View File

@ -17,7 +17,7 @@ namespace UniLib {
}
CPUTask::CPUTask(size_t taskDependenceCount/* = 0*/)
: Task(), mScheduler(ServerConfig::g_CPUScheduler)
: Task(taskDependenceCount), mScheduler(ServerConfig::g_CPUScheduler)
{
assert(mScheduler);
}

View File

@ -24,6 +24,13 @@
<!--<link rel="stylesheet" type="text/css" href="css/styles.min.css">-->
<link rel="stylesheet" type="text/css" href="https://gradido2.dario-rekowski.de/css/styles.css">
<style type="text/css" >
.grd_container
{
max-width:820px;
margin-left:auto;
margin-right:auto;
}
input:not([type='radio']) {
width:200px;
}

View File

@ -28,12 +28,14 @@
<h1>Willkommen <%= mSession->getUser()->getName() %></h1>
<h3>Status</h3>
<p><%= mSession->getSessionStateString() %></p>
<% if(mSession->getSessionState() == SESSION_STATE_EMAIL_VERIFICATION_SEND) %>
<% if(mSession->getSessionState() == SESSION_STATE_EMAIL_VERIFICATION_SEND) { %>
<p>Verification Code E-Mail wurde erfolgreich an dich verschickt, bitte schaue auch in dein Spam-Verzeichnis nach wenn du sie nicht findest und klicke auf den Link den du dort findest oder kopiere den Code hier her:</p>
<form method="GET" action="/checkEmail">
<input type="number" name="email-verification-code">
<input class="grd_bn_succeed" type="submit" value="Überprüfe Code">
</form>
<% } %>
<a class="grd_bn" href="/logout">Abmelden</a>
</div>
</body>
</html>

View File

@ -4,7 +4,7 @@
<%!
#include "../SingletonManager/SessionManager.h"
#include "Poco/Net/HTTPCookie.h"
#include "Poco/Net/HTTPServerParams.h"
%>
<%%
@ -33,6 +33,13 @@
<!--<link rel="stylesheet" type="text/css" href="css/styles.min.css">-->
<link rel="stylesheet" type="text/css" href="https://gradido2.dario-rekowski.de/css/styles.css">
<style type="text/css" >
.grd_container
{
max-width:820px;
margin-left:auto;
margin-right:auto;
}
input:not([type='radio']) {
width:200px;
}
@ -43,10 +50,10 @@ label:not(.grd_radio_label) {
</style>
</head>
<body>
<%= session->getErrorsHtml() %>
<h1>Login</h1>
<form method="POST">
<div class="grd_container">
<h1>Login</h1>
<%= session->getErrorsHtml() %>
<fieldset class="grd_container_small">
<legend>Login</legend>
<p>Bitte gebe deine Zugangsdaten ein um dich einzuloggen.</p>

View File

@ -57,6 +57,13 @@ enum PageState
<!--<link rel="stylesheet" type="text/css" href="css/styles.min.css">-->
<link rel="stylesheet" type="text/css" href="https://gradido2.dario-rekowski.de/css/styles.css">
<style type="text/css" >
.grd_container
{
max-width:820px;
margin-left:auto;
margin-right:auto;
}
input:not([type='radio']) {
width:200px;
}

View File

@ -35,6 +35,13 @@
<!--<link rel="stylesheet" type="text/css" href="css/styles.min.css">-->
<link rel="stylesheet" type="text/css" href="https://gradido2.dario-rekowski.de/css/styles.css">
<style type="text/css" >
.grd_container
{
max-width:820px;
margin-left:auto;
margin-right:auto;
}
input:not([type='radio']) {
width:200px;
}

View File

@ -5,6 +5,8 @@
<%@ page form="true" %>
<%@ page compressed="true" %>
<%!
#include "Poco/Net/HTTPServerParams.h"
enum PageState
{
PAGE_ASK,
@ -47,10 +49,15 @@ enum PageState
hasErrors = true;
} else if(mSession->getSessionState() >= SESSION_STATE_KEY_PAIR_GENERATED) {
state = PAGE_SHOW_PUBKEY;
auto uri_start = request.serverParams().getServerName();
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);
}
%>
<!DOCTYPE html>
@ -62,6 +69,13 @@ enum PageState
<!--<link rel="stylesheet" type="text/css" href="css/styles.min.css">-->
<link rel="stylesheet" type="text/css" href="https://gradido2.dario-rekowski.de/css/styles.css">
<style type="text/css" >
.grd_container
{
max-width:820px;
margin-left:auto;
margin-right:auto;
}
input:not([type='radio']) {
width:200px;
}
@ -131,6 +145,7 @@ label:not(.grd_radio_label) {
<% } else if(state == PAGE_ERROR) { %>
<div class="grd_text">
<p>Ein Fehler trat auf, bitte versuche es erneut oder wende dich an den Server-Admin</p>
<%= mSession->getSessionStateString() %>
</div>
<% } %>
</div>