update styling

This commit is contained in:
Dario 2019-11-01 12:58:48 +01:00
parent 0c00a3e809
commit aa9169bd34
21 changed files with 316 additions and 64 deletions

View File

@ -8,10 +8,12 @@
#include <sodium.h>
class UserWriteKeysIntoDB;
class UserGenerateKeys;
// TODO: https://libsodium.gitbook.io/doc/advanced/ed25519-curve25519
class KeyPair
{
friend UserWriteKeysIntoDB;
friend UserGenerateKeys;
public:
KeyPair();
~KeyPair();

184
src/cpp/DRMemoryList.h Normal file
View File

@ -0,0 +1,184 @@
/*/*************************************************************************
* *
* Core, Core-Lib for my programs, Core doesn't need any libraries *
* Copyright (C) 2012, 2013, 2014 Dario Rekowski *
* Email: ***REMOVED*** Web: ***REMOVED*** *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation, either version 3 of the License, or *
* any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
***************************************************************************/
/*
Speichermanager mit Free Listen
Damit man häufig Speicher reservieren kann ohne den
Speicher zu defragmentieren.
Nach einem Artikel aus Gems4: "Speicherfragmentierung mit Templated Free-Lists bekämmpfen"
von Paul Glinker Rockstar Games Toronto
Programmierer: Dario Rekowski
*/
//DRLogger Log;
//Deklaration
//#ifdef _TEMPLATEFREE_
#ifndef __DR_CORE2_MEMORY_LIST__
#define __DR_CORE2_MEMORY_LIST__
#ifndef __CORE_2_MAIN_H__
#include "Core2Main.h"
#endif
template <typename FLDataType> class DRMemoryList
{
public:
//Standard Konstruktor
DRMemoryList(int iNumObjects);
//Konstruktor für Daten ohne Standard Konstruktor
DRMemoryList(FLDataType* pObjectData, FLDataType** ppFreeObjects, int iNumObjects);
//Deskonstruktor, wichtig!!
~DRMemoryList();
//füllt den Zeigerstack (Stapel)
void FillStack();
//Liefert den Zeiger auf einen freien Spiecherplatz zurück
FLDataType* NewInstance();
//Und die Instance freigeben
void FreeInstance(FLDataType* pInstance);
//liefert die anzahl der noch freien Speicherplätze zurück
int getFreeCount() {return m_iTop;}
int getObjectCount() {return m_iNumObject;}
FLDataType** getDataPointer() {return m_ppFreeObjects;}
private:
FLDataType* m_pObjectData; //Zeiger auf den reservieretn Speicher
FLDataType** m_ppFreeObjects; //Zeiger auf die anderen Zeiger
int m_iNumObject; //Anzahl der Objecte
bool m_bFreeOnDestroy; //Weiß nicht
int m_iTop; //Keine Ahnung
};
//******************************************************************************++
//Funktionen
template <typename FLDataType> DRMemoryList<FLDataType>::DRMemoryList(int iNumObjects)
{
//Fehler abfangen
//ASSERT(iNumObjects > 0);
if(iNumObjects <= 0) LOG_ERROR_VOID("not enough objects ");
//Speicher reservieren
m_pObjectData = new FLDataType[iNumObjects];
m_ppFreeObjects = new FLDataType*[iNumObjects];
//Checken ob der Speicher reserviert wurde
// ASSERT(m_pObjectData);
// ASSERT(m_ppFreeObjects);
if(!m_pObjectData || !m_ppFreeObjects) LOG_ERROR_VOID("Es konnte kein Speicher reserviert werden!");
//Anzahl zuweisen
m_iNumObject = iNumObjects;
m_bFreeOnDestroy = true;
//Zeiger zuweisen
FillStack();
}
//------------------------------------------------------------------------------------
template <typename FLDataType> DRMemoryList<FLDataType>::DRMemoryList(FLDataType* pObjectData, FLDataType** ppFreeObjects, int iNumObjects)
{
//Fehler abfangen
// ASSERT(iNumObjects > 0);
if(iNumObjects <= 0) LOG_ERROR_VOID("not enough objects ");
//Speicher reservieren
m_pObjectData = pObjectData;
m_ppFreeObjects = ppFreeObjects;
//Checken ob der Speicher reserviert wurde
// ASSERT(m_pObjectData);
// ASSERT(m_ppFreeObjects);
if(!m_pObjectData || !m_ppFreeObjects) LOG_ERROR_VOID("Es konnte kein Speicher reserviert werden!");
//Anzahl zuweisen
m_iNumObject = iNumObjects;
m_bFreeOnDestroy = false;
//Zeiger zuweisen
FillStack();
}
//---------------------------------------------------------------------------------------------
template <typename FLDataType> DRMemoryList<FLDataType>::~DRMemoryList()
{
DR_SAVE_DELETE_ARRAY(m_pObjectData);
DR_SAVE_DELETE_ARRAY(m_ppFreeObjects);
}
//****************************************************************************++
template <typename FLDataType> void DRMemoryList<FLDataType>::FillStack()
{
int iIndex = m_iNumObject - 1;
//Die Zeiger in m_ppFreeObjects werden von vorne nach hinten,
//von hinten nach vorne auf den reservierten Speicher ausgerichtet
for(m_iTop = 0; m_iTop < m_iNumObject; m_iTop++)
{
m_ppFreeObjects[m_iTop] = &(m_pObjectData[iIndex--]);
}
}
//*********************************************************************************
template <typename FLDataType> FLDataType* DRMemoryList<FLDataType>::NewInstance()
{
// ASSERT(m_iTop);
if(m_iTop <= 0)
{
LOG_ERROR("Kein Platz mehr in der Liste!", NULL);
}
return m_ppFreeObjects[--m_iTop];
}
//********************************************************************************
template <typename FLDataType> void DRMemoryList<FLDataType>::FreeInstance(FLDataType* pInstance)
{
//Fehler kontrolle
// ASSERT(pInstance >= &(m_pObjectData[0]) &&
// pInstance < &(m_pObjectData[m_iNumObject]));
// ASSERT(m_iTop < m_iNumObject);
m_ppFreeObjects[m_iTop++] = pInstance;
}
#endif //__DR_CORE2_MEMORY_LIST__
//#endif //_TEMPLATEFREE_

View File

@ -110,7 +110,7 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";
@ -155,7 +155,7 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
#line 46 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkEmail.cpsp"
} responseStream << "\n";
responseStream << "\t\t<input type=\"number\" name=\"email-verification-code\">\n";
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" value=\"Überprüfe Code\">\n";
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed grd_clickable\" type=\"submit\" value=\"Überprüfe Code\">\n";
responseStream << "\t\t<p>Du hast bisher keinen Code erhalten? </p>\n";
responseStream << "\t\t<p>E-Mail erneut zuschicken (in Arbeit)</p>\n";
responseStream << "\t</form>\n";

View File

@ -66,7 +66,8 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
size_t notReadyTransactions = 0;
size_t sumTransactions = mSession->getProcessingTransactionCount();
if(sumTransactions == 0) {
response.redirect(ServerConfig::g_php_serverPath + "/");
response.redirect(ServerConfig::g_php_serverPath);
return;
}
auto processingTransaction = mSession->getNextReadyTransaction(&notReadyTransactions);
if(sumTransactions > 0) {
@ -143,7 +144,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";
@ -180,54 +181,54 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "<div class=\"grd_container\">\n";
responseStream << "\t<h1>Eine Transaktion pr&uuml;fen</h1>\n";
responseStream << "\t";
#line 67 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 68 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( getErrorsHtml() );
responseStream << "\n";
responseStream << "\t";
#line 68 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 69 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
if(sumTransactions > 0 && sumTransactions - notReadyTransactions != 1) { responseStream << "\n";
responseStream << "\t\t";
#line 69 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 70 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
if(notReadyTransactions > 0) { responseStream << " \n";
responseStream << "\t\t\t<pre>";
#line 70 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 71 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( sumTransactions - notReadyTransactions );
responseStream << " von ";
#line 70 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 71 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( sumTransactions );
responseStream << " Transaktionen sind bereit zum pr&uuml;fen</pre>\n";
responseStream << "\t\t";
#line 71 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 72 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} else { responseStream << "\n";
responseStream << "\t\t\t<pre>";
#line 72 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 73 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( sumTransactions );
responseStream << " Transaktionen warten darauf &uuml;berpr&uuml;ft zu werden.</pre>\n";
responseStream << "\t\t";
#line 73 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t";
#line 74 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t";
#line 75 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t";
#line 76 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
if(state == PAGE_NO_TRANSACTIONS) { responseStream << "\n";
responseStream << "\t<div class=\"grd_text-max-width\">\n";
responseStream << "\t\t";
#line 77 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 78 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
if(sumTransactions == 0) { responseStream << "\n";
responseStream << "\t\t\t<div class=\"grd_text\">Es gibt zurzeit keine Transaktionen zum &uuml;berpr&uuml;fen</div>\n";
responseStream << "\t\t";
#line 79 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 80 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} else { responseStream << "\n";
responseStream << "\t\t\t<div class=\"grd_text\">Transaktion(en) werden noch vorbereitet, bitte lade die Seite in wenigen Augenblicken erneut.</div>\n";
responseStream << "\t\t";
#line 81 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 82 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t</div>\n";
responseStream << "\t\n";
responseStream << "\t";
#line 84 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 85 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} else if(state == PAGE_TRANSACTION_CREATION) {
auto creationTransaction = processingTransaction->getCreationTransaction();
auto transactionUser = creationTransaction->getUser();
@ -237,57 +238,57 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "\t\t<h2>Sch&ouml;pfungstransaktion</h2>\n";
responseStream << "\t\t<b>Memo: </b>\n";
responseStream << "\t\t<p>";
#line 92 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 93 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( creationTransaction->getMemo() );
responseStream << "</p>\n";
responseStream << "\t\t<b>Empf&auml;nger: </b>\n";
responseStream << "\t\t";
#line 94 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 95 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
if(transactionUser) { responseStream << "\n";
responseStream << "\t\t\t<p class=\"grd_small\">";
#line 95 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 96 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( transactionUser->getFirstName() );
responseStream << " ";
#line 95 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 96 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( transactionUser->getLastName() );
responseStream << "</p>\n";
responseStream << "\t\t\t<p class=\"grd_small\">";
#line 96 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 97 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( transactionUser->getEmail() );
responseStream << "</p>\n";
responseStream << "\t\t";
#line 97 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 98 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} else { responseStream << "\n";
responseStream << "\t\t\t<p class=\"grd_small\">";
#line 98 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 99 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( creationTransaction->getPublicHex() );
responseStream << "</p>\n";
responseStream << "\t\t";
#line 99 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 100 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t\t<b>Summe: </b>\n";
responseStream << "\t\t";
#line 101 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 102 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( creationTransaction->getAmountString() );
responseStream << "&nbsp;Gradido\n";
responseStream << "\t\t<form >\n";
responseStream << "\t\t\tUnterschreiben mit aktuellem Account?<br>\n";
responseStream << "\t\t\t<p class=\"grd_small\">";
#line 104 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 105 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( accountUser->getFirstName() );
responseStream << " ";
#line 104 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 105 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( accountUser->getLastName() );
responseStream << "</p>\n";
responseStream << "\t\t\t<p class=\"grd_small\">";
#line 105 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 106 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
responseStream << ( accountUser->getEmail() );
responseStream << "</p>\n";
responseStream << "\t\t\t";
#line 106 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 107 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
// TODO: additional password check responseStream << "\n";
responseStream << "\t\t\t";
#line 107 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 108 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
if(!accountUser->hasCryptoKey()) { responseStream << "\n";
responseStream << "\t\t\t<p>Ich brauche nochmal dein Passwort</p>\n";
responseStream << "\t\t\t\t<p class=\"grd_small\">\n";
@ -295,14 +296,14 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
responseStream << "\t\t\t\t\t<input id=\"sign-password\" type=\"password\" name=\"sign-password\"/>\n";
responseStream << "\t\t\t\t</p>\n";
responseStream << "\t\t\t";
#line 113 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 114 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "\t\t\t<input class=\"grd-form-bn grd-form-bn-succeed grd_clickable\" type=\"submit\" name=\"ok\" value=\"Transaktion unterzeichnen\">\n";
responseStream << "\t\t\t<input class=\"grd-form-bn grd-form-bn-discard grd_clickable\" type=\"submit\" name=\"abort\" value=\"Transaktion verwerfen\">\n";
responseStream << "\t\t</form>\n";
responseStream << "\t</div>\t\n";
responseStream << "\t";
#line 118 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
#line 119 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\checkTransaction.cpsp"
} responseStream << "\n";
responseStream << "</div>\n";
// begin include footer.cpsp

View File

@ -82,7 +82,7 @@ void ConfigPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net:
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";

View File

@ -98,7 +98,7 @@ void DashboardPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";

View File

@ -312,10 +312,7 @@ int HandleElopageRequestTask::run()
sendEmail->scheduleTask(sendEmail);
}
// if errors occured, send via email
// if errors occured, send via email
if (errorCount() > 1) {
sendErrorsAsEmail();
}

View File

@ -97,7 +97,7 @@ void Error500Page::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";

View File

@ -146,7 +146,7 @@ void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";

View File

@ -134,7 +134,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";
@ -168,7 +168,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << ( mSession->getPassphrase() );
responseStream << "\n";
responseStream << "\t\t\t</div>\n";
responseStream << "\t\t\t<a href=\"saveKeys\" class=\"grd-form-bn-succeed\">Weiter</a>\n";
responseStream << "\t\t\t<a href=\"saveKeys\" class=\"grd-margin-top-10 grd-form-bn grd-form-bn-succeed\">Weiter</a>\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 69 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\passphrase.cpsp"
@ -194,7 +194,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
responseStream << ( !form.empty() ? form.get("passphrase-existing", "") : "" );
responseStream << "</textarea>\n";
responseStream << "\t\t</fieldset>\n";
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Weiter\">\n";
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed grd-margin-top-10\" type=\"submit\" name=\"submit\" value=\"Weiter\">\n";
responseStream << "\t\t\n";
responseStream << "\t</form>\n";
responseStream << "\t";

View File

@ -116,7 +116,7 @@ void RegisterPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";

View File

@ -152,7 +152,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";
@ -237,7 +237,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
responseStream << "\t\t\t<a class=\"grd-form-bn\" href=\"";
#line 127 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"
responseStream << ( uri_start );
responseStream << "/\">Zur&uuml;ck zur Startseite</a>\n";
responseStream << "\">Zur&uuml;ck zur Startseite</a>\n";
responseStream << "\t\t</div>\n";
responseStream << "\t";
#line 129 "I:\\Code\\C++\\Eigene_Projekte\\Gradido_LoginServer\\src\\cpsp\\saveKeys.cpsp"

View File

@ -121,7 +121,7 @@ void UpdateUserPasswordPage::handleRequest(Poco::Net::HTTPServerRequest& request
responseStream << "<body>\n";
responseStream << "<div class=\"versionstring dev-info\">\n";
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.3</p>\n";
responseStream << "\t<p class=\"grd_small\">Alpha 0.4.4</p>\n";
responseStream << "</div>\n";
responseStream << "<!--<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\n";
responseStream << "\t<div class=\"grd-left-bar-section\">\n";

View File

@ -49,6 +49,9 @@ int UserGenerateKeys::run()
mKeys.generateFromPassphrase(mPassphrase.data(), &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER]);
mUser->setPublicKeyHex(mKeys.getPubkeyHex());
if (mUser->hasCryptoKey()) {
mUser->setPrivKey(mKeys.getPrivateKey());
}
//printf("[UserGenerateKeys::run] time: %s\n", timeUsed.string().data());
@ -112,7 +115,10 @@ int UserWriteKeysIntoDB::run()
// TODO: encrypt privkey
auto privKey = keyPairs->getPrivateKey();
//printf("[UserWriteKeysIntoDB] privKey hex: %s\n", KeyPair::getHex(*privKey, privKey->size()).data());
pprivkey_blob = mUser->encrypt(privKey);
auto encryptedPrivKey = mUser->encrypt(privKey);
//pprivkey_blob = mUser->encrypt(privKey);
pprivkey_blob = new Poco::Data::BLOB(*encryptedPrivKey, encryptedPrivKey->size());
//printf("[UserWriteKeysIntoDB] privkey encrypted\n");
//Poco::Data::BLOB privkey_blob(*privKey, privKey->size());
@ -142,10 +148,12 @@ int UserWriteKeysIntoDB::run()
}
return -1;
}
//printf("[UserWriteKeysIntoDB] after saving into db\n");
if (pprivkey_blob) {
delete pprivkey_blob;
}
//printf("UserWritePrivKeyIntoDB time: %s\n", timeUsed.string().data());
return 0;
}
@ -663,7 +671,7 @@ bool User::generateKeys(bool savePrivkey, const std::string& passphrase, Session
}
Poco::Data::BLOB* User::encrypt(const ObfusArray* data)
ObfusArray* User::encrypt(const ObfusArray* data)
{
if (!hasCryptoKey()) {
addError(new Error("User::encrypt", "hasn't crypto key"));
@ -678,19 +686,22 @@ Poco::Data::BLOB* User::encrypt(const ObfusArray* data)
unsigned char* ciphertext = (unsigned char*)malloc(ciphertext_len);
memset(ciphertext, 0, ciphertext_len);
lock();
if (0 != crypto_secretbox_easy(ciphertext, *data, message_len, nonce, *mCryptoKey)) {
//printf("[%s] error encrypting message \n", __FUNCTION__);
addError(new Error("User::encrypt", "encrypting message failed"));
free(ciphertext);
unlock();
return nullptr;
}
unlock();
//printf("[User::encrypt] encrypted: %s\n", KeyPair::getHex(ciphertext, ciphertext_len).data());
auto result_blob = new Poco::Data::BLOB(ciphertext, ciphertext_len);
//printf("[User::encrypt] encrypted: %s, ciphertext len: %u\n", KeyPair::getHex(ciphertext, ciphertext_len).data(), ciphertext_len);
auto resultObfus = new ObfusArray(ciphertext_len, ciphertext);
free(ciphertext);
return result_blob;
return resultObfus;
}
ObfusArray* User::decrypt(const ObfusArray* encryptedData)
@ -699,7 +710,7 @@ ObfusArray* User::decrypt(const ObfusArray* encryptedData)
addError(new Error("User::decrypt", "hasn't crypto key"));
return nullptr;
}
//printf("[User::decrypt] decrypt: %s, ciphertext len: %u\n", KeyPair::getHex(*encryptedData, encryptedData->size()).data(), encryptedData->size());
//ObfusArray* decrypetData = new ObfusArray(encryptedData->size() - crypto_secretbox_MACBYTES);
size_t decryptSize = encryptedData->size() - crypto_secretbox_MACBYTES;
@ -722,6 +733,33 @@ ObfusArray* User::decrypt(const ObfusArray* encryptedData)
return decryptedData;
}
ObfusArray* User::sign(const unsigned char* message, size_t messageSize)
{
/*
if (!message || !messageSize) return nullptr;
if (!hasCryptoKey()) {
addError(new Error("User::sign", "hasn't crypto key"));
return nullptr;
}
//binArrayObj = new BinaryArray(crypto_sign_BYTES);
unsigned char* signBinBuffer = (unsigned char*)malloc(crypto_sign_BYTES);
crypto_sign_detached(signBinBuffer, NULL, message, messageSize, key->sodium_secret);
if (crypto_sign_verify_detached(binArrayObj->bytes, binArray, binArraySize, key->sodium_public) != 0) {
// Incorrect signature!
printf("c[KeyBuffer::%s] sign verify failed\n", __FUNCTION__);
}
size_t hex_sig_size = crypto_sign_BYTES * 2;
char sig_hex[crypto_sign_BYTES * 2 + 1];
sodium_bin2hex(sig_hex, hex_sig_size + 1, binArrayObj->bytes, crypto_sign_BYTES);
printf("c[KeyBuffer::%s] signature hex: %s\n", __FUNCTION__, sig_hex);
*/
return nullptr;
}
Poco::Data::Statement User::insertIntoDB(Poco::Data::Session session)
{
@ -812,7 +850,7 @@ const char* User::userStateToString(UserStates state)
ObfusArray* User::getPrivKey()
{
if (mState != USER_COMPLETE) {
if (!mPrivateKey) {
addError(new Error("User::getPrivKey", "no private key saved"));
return nullptr;
}
@ -821,4 +859,21 @@ ObfusArray* User::getPrivKey()
return nullptr;
}
return decrypt(mPrivateKey);
}
bool User::setPrivKey(const ObfusArray* privKey)
{
if (!hasCryptoKey()) {
lock();
addError(new Error("User::getPrivKey", "no crypto key set for encrypting priv key"));
unlock();
return false;
}
auto encyrptedPrivKey = encrypt(privKey);
lock();
mState = USER_COMPLETE;
mPrivateKey = encrypt(privKey);
unlock();
return true;
}

View File

@ -17,6 +17,7 @@ class UserWriteIntoDB;
class Session;
class UserWriteCryptoKeyHashIntoDB;
class SigningTransaction;
class UserGenerateKeys;
enum UserStates
{
@ -45,6 +46,7 @@ class User : public ErrorList
friend UserWriteIntoDB;
friend UserWriteCryptoKeyHashIntoDB;
friend SigningTransaction;
friend UserGenerateKeys;
public:
// new user
User(const char* email, const char* first_name, const char* last_name);
@ -88,8 +90,9 @@ public:
bool validatePwd(const std::string& pwd, ErrorList* validationErrorsToPrint);
bool validateIdentHash(HASH hash);
Poco::Data::BLOB* encrypt(const ObfusArray* data);
ObfusArray* encrypt(const ObfusArray* data);
ObfusArray* decrypt(const ObfusArray* encryptedData);
ObfusArray* sign(const unsigned char* message, size_t messageSize);
Poco::JSON::Object getJson();
@ -116,6 +119,7 @@ protected:
inline void unlock() { mWorkingMutex.unlock(); }
ObfusArray* getPrivKey();
bool setPrivKey(const ObfusArray* privKey);
private:
UserStates mState;

View File

@ -50,6 +50,7 @@ public:
static HASH calculateHash(const std::string& proto_message_base64);
inline HASH getHash() { mHashMutex.lock(); HASH hs = mHash; mHashMutex.unlock(); return hs; }
protected:
TransactionType mType;
std::string mProtoMessageBase64;

View File

@ -17,10 +17,12 @@ int SigningTransaction::run() {
auto em = ErrorManager::getInstance();
Error* transactionError = new Error("SigningTransaction start", mProcessingeTransaction->mTransactionBody.SerializeAsString().data());
Error* transactionError = new Error("SigningTransaction start", mProcessingeTransaction->mProtoMessageBase64.data());
//= new Error("SigningTransaction start", mProcessingeTransaction->g)
if (mUser.isNull() || !mUser->hasCryptoKey()) {
em->addError(transactionError);
em->addError(new Error("SigningTransaction", "user hasn't crypto key or is null"));
em->sendErrorsAsEmail();
return -1;
@ -28,12 +30,15 @@ int SigningTransaction::run() {
auto privKey = mUser->getPrivKey();
if (!privKey) {
em->addError(transactionError);
em->getErrors(mUser);
em->addError(new Error("SigningTransaction", "couldn't get user priv key"));
em->sendErrorsAsEmail();
return -2;
}
delete transactionError;
delete privKey;
return 0;

View File

@ -45,7 +45,7 @@ enum PageState
<p>Er wurde an deine E-Mail Adresse: <%= mSession->getUser()->getEmail() %> gesendet.</p>
<% } %>
<input type="number" name="email-verification-code">
<input class="grd-form-bn grd-form-bn-succeed" type="submit" value="Überprüfe Code">
<input class="grd-form-bn grd-form-bn-succeed grd_clickable" type="submit" value="Überprüfe Code">
<p>Du hast bisher keinen Code erhalten? </p>
<p>E-Mail erneut zuschicken (in Arbeit)</p>
</form>

View File

@ -45,7 +45,8 @@ enum PageState {
size_t notReadyTransactions = 0;
size_t sumTransactions = mSession->getProcessingTransactionCount();
if(sumTransactions == 0) {
response.redirect(ServerConfig::g_php_serverPath + "/");
response.redirect(ServerConfig::g_php_serverPath);
return;
}
auto processingTransaction = mSession->getNextReadyTransaction(&notReadyTransactions);
if(sumTransactions > 0) {

View File

@ -64,7 +64,8 @@ enum PageState
<div class="grd_textarea">
<%= mSession->getPassphrase() %>
</div>
<a href="saveKeys" class="grd-form-bn-succeed">Weiter</a>
<div class="grd-margin-top-10"></div>
<a href="saveKeys" class="grd-form-bn grd-form-bn-succeed grd_clickable">Weiter</a>
</div>
<% } else if(state == PAGE_ASK_PASSPHRASE) { %>
<p>Deine E-Mail Adresse wurde erfolgreich bestätigt. </p>
@ -82,7 +83,8 @@ enum PageState
</p>
<textarea style="width:100%;height:100px" name="passphrase-existing"><%= !form.empty() ? form.get("passphrase-existing", "") : "" %></textarea>
</fieldset>
<input class="grd-form-bn grd-form-bn-succeed" type="submit" name="submit" value="Weiter">
<input class="grd-form-bn grd-form-bn-succeed grd_clickable" type="submit" name="submit" value="Weiter">
</form>
<% } else { %>

View File

@ -124,7 +124,7 @@ enum PageState
<p class="grd_textarea">
<%= mSession->getUser()->getPublicKeyHex() %>
</p>-->
<a class="grd-form-bn" href="<%= uri_start %>/">Zur&uuml;ck zur Startseite</a>
<a class="grd-form-bn" href="<%= uri_start %>">Zur&uuml;ck zur Startseite</a>
</div>
<% } else if(state == PAGE_ERROR) { %>
<div class="grd_text">