gradido/login_server/src/cpsp/AdminUserPasswordReset.cpsp
2021-05-20 13:45:47 +02:00

120 lines
3.8 KiB
Plaintext

<%@ page class="AdminUserPasswordResetPage" %>
<%@ page form="true" %>
<%@ page baseClass="SessionHTTPRequestHandler" %>
<%@ page ctorArg="Session*" %>
<%@ header include="HTTPInterface/SessionHTTPRequestHandler.h" %>
<%!
// includes
#include "controller/User.h"
#include "controller/EmailVerificationCode.h"
#include "controller/UserBackup.h"
enum PageState
{
PAGE_ASK_EMAIL,
PAGE_SHOW_EMAIL
};
%><%%
// code
PageState state = PAGE_ASK_EMAIL;
Poco::AutoPtr<controller::User> user = controller::User::create();
Poco::AutoPtr<controller::EmailVerificationCode> code;
Poco::AutoPtr<controller::UserBackup> userBackup;
bool validUser = false;
std::string pageName = "Admin User Passwort Reset";
if(!form.empty()) {
auto email = form.get("user-email", "");
if("" != email) {
if(1 != user->load(email)) {
addError(new Error("Benutzer Email", "Konnte keinen passenden Benutzer finden!"));
} else {
validUser = true;
}
}
}
if(validUser) {
auto userId = user->getModel()->getID();
code = controller::EmailVerificationCode::load(userId, model::table::EMAIL_OPT_IN_RESET_PASSWORD);
if(code.isNull()) {
code = controller::EmailVerificationCode::create(userId, model::table::EMAIL_OPT_IN_RESET_PASSWORD);
if(!code->getModel()->insertIntoDB(false)) {
addError(new Error("E-Mail Verification Code", "Fehler beim speichern!"));
getErrors(code->getModel());
}
}
auto backups = controller::UserBackup::load(userId);
auto userPubkey = user->getModel()->getPublicKey();
for(auto it = backups.begin(); it != backups.end(); it++) {
auto keys = (*it)->getKeyPair();
if(keys->isTheSame(userPubkey)) {
userBackup = *it;
break;
}
}
if(userBackup.isNull()) {
addError(new Error("User Backup", "Kein passendes User Backup gefunden!"));
}
if(!userBackup.isNull() && !code.isNull()) {
state = PAGE_SHOW_EMAIL;
}
}
%><%@ include file="include/header_old.cpsp" %>
<div class="grd_container">
<%= getErrorsHtml() %>
<h1>Admin User Passwort Reset</h1>
<p>Ein Benutzer hat ein Passwort Reset angefordert, hat aber seine Passphrase nicht.</p>
<% if(PAGE_ASK_EMAIL == state) { %>
<fieldset class="grd_container_small">
<form method="POST">
<p class="grd_small">
<label for="user-email">Benutzer E-Mail</label>
<input id="user-email" type="text" name="user-email" value="<%= !form.empty() ? form.get("user-email") : "" %>"/>
</p>
<p><input type="submit" style="width:auto" value="Anzeigen"></p>
</form>
</fieldset>
<% } %>
<% if(validUser) {
auto userModel = user->getModel(); %>
<h3>Benutzer gefunden</h3>
<ul>
<li><%= userModel->getFirstName() %> <%= userModel->getLastName() %></li>
<li><%= userModel->getEmail() %></li>
<li>Public Key: <%= userModel->getPublicKeyHex() %></li>
<li>E-Mail überprüft: <%= std::to_string(userModel->isEmailChecked()) %></li>
<li>Private Key verschlüsselt: <%= std::to_string(userModel->hasPrivateKeyEncrypted()) %></li>
<li>Passwort gesetzt: <%= std::to_string(userModel->getPasswordHashed() != 0) %></li>
</ul>
<% } %>
<% if(PAGE_SHOW_EMAIL == state) { %>
<fieldset><legend>E-Mail</legend>
<p>An: <%= user->getEmailWithNames() %>
<p><label style="width:auto" for="memo-text">E-Mail Text:</label></p>
<pre>Liebe(r) <%= user->getModel()->getFirstName() %>,
hier findest du deine Passphrase mit dessen Hilfe du dir ein neues Passwort einstellen kannst.
Bitte schreibe sie dir auf und packe sie gut weg.
<%= controller::UserBackup::formatPassphrase(userBackup->getPassphrase(ServerConfig::Mnemonic_Types::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER)) %>
Unter diesem Link kannst du dir mit Hilfe der Passphrase ein neues Passwort setzen:
<%= code->getLink() %>
Liebe Grüße
Dario, Softwareentwickler bei Gradido
</pre>
</fieldset>
<% } %>
</div>
<%@ include file="include/footer.cpsp" %>