gradido/src/cpsp/resetPassword.cpsp
2020-07-20 17:29:24 +02:00

168 lines
6.2 KiB
Plaintext

<%@ page class="ResetPassword" %>
<%@ page form="true" %>
<%@ page baseClass="PageRequestMessagedHandler" %>
<%@ header include="PageRequestMessagedHandler.h" %>
<%@ page compressed="true" %>
<%!
#include "../SingletonManager/LanguageManager.h"
#include "../SingletonManager/SessionManager.h"
#include "../SingletonManager/EmailManager.h"
#include "../controller/User.h"
#include "../controller/UserBackups.h"
enum PageState {
PAGE_EMAIL_ASK,
PAGE_ASK,
PAGE_WAIT_EMAIL,
PAGE_WAIT_ADMIN,
PAGE_EMAIL_ALREADY_SEND
};
%><%%
PageState state = PAGE_EMAIL_ASK;
auto lm = LanguageManager::getInstance();
auto sm = SessionManager::getInstance();
auto adminReceiver = EmailManager::getInstance()->getAdminReceiver();
const char* pageName = "Passwort vergessen";
auto lang = chooseLanguage(request);
// class="btn btn-outline-secondary flag-btn"
// class="btn btn-secondary disabled flag-btn" disabled
std::string eng_btn_classes = "";
std::string de_btn_classes = "";
auto langCatalog = lm->getFreeCatalog(lang);
std::string emailInputClass = "form-control";
std::string passphraseRadioClass = "group";
std::string email = "";
if(!form.empty()) {
auto session = sm->getNewSession();
email = form.get("email", "");
auto passphraseMemorized = form.get("passphrase_memorized", "");
auto user = controller::User::create();
auto ask = form.get("ask_passphrase", "");
if(email != "")
{
bool user_exist = false;
bool sendUserEmail = false;
if(!sm->isValid(email, VALIDATE_EMAIL)) {
addError(new Error(gettext(session, "E-Mail"), gettext(session, "Das ist keine g&uuml;ltige E-Mail Adresse")), false);
emailInputClass += " is-invalid";
}
user_exist = user->load(email) == 1;
if(ask == "true")
{
if(passphraseMemorized == "") {
addError(new Error(gettext(session, "Passphrase"), gettext(session, "Bitte w&auml;hle eine Option aus.")), false);
passphraseRadioClass += " group-is-invalid";
} else if(passphraseMemorized == "true") {
sendUserEmail = true;
}
}
else
{
if(user_exist && (!user->tryLoadPassphraseUserBackup() || !user->hasPublicKey())) {
sendUserEmail = true;
}
}
if(!errorCount())
{
// send reset password email
int result = 0;
if(user_exist) {
result = session->sendResetPasswordEmail(user, sendUserEmail);
}
if(2 == result) {
state = PAGE_EMAIL_ALREADY_SEND;
} else if(sendUserEmail) {
state = PAGE_WAIT_EMAIL;
} else {
state = PAGE_WAIT_ADMIN;
}
}
}
else
{
addError(new Error(gettext(session, "E-Mail"), gettext(session, "E-Mail Adresse nicht angegeben.")), false);
emailInputClass += " is-invalid";
}
}
%><%@ include file="header.cpsp" %>
<%= getErrorsHtml() %>
<div class="center-form-container">
<div class="center-form-title">
<h1>Passwort zurücksetzen</h1>
</div>
<% if(state == PAGE_EMAIL_ASK) { %>
<div class="center-form-form">
<form action="<%= ServerConfig::g_serverPath %>/resetPassword">
<div class="item-wrapper">
<div class="form-group">
<label class="form-label" for="email"><%= langCatalog->gettext("Gib bitte hier deine E-Mail Adresse an:") %></label>
<input class="form-control" type="text" class="<%= emailInputClass %>" name="email" id="email" placeholder="E-Mail" value="<%= email %>">
</div>
<button type="submit" class="center-form-submit form-button" ><%= langCatalog->gettext("Bestätigen") %></button>
</div>
</form>
</div>
<% } else if(state == PAGE_ASK) { %>
<div class="center-form-form">
<%@ include file="flags.cpsp" %>
<form action="<%= ServerConfig::g_serverPath %>/resetPassword">
<label class="form-label" for="email"><%= langCatalog->gettext("Gib bitte hier deine E-Mail Adresse an:") %></label>
<input class="form-control" type="text" class="<%= emailInputClass %>" name="email" id="email" placeholder="E-Mail" value="<%= email %>">
<label><%= langCatalog->gettext("Hast du dir deine Passphrase notiert oder gemerkt?") %></label>
<input class="form-control" type="hidden" name="ask_passphrase" value="true">
<div class="<%= passphraseRadioClass %>">
<div class="radio">
<label class="form-label" class="radio-label mr-4">
<input class="form-control" name="passphrase_memorized" onclick="removeGroupInvalidClass()" type="radio" value="true"><%= langCatalog->gettext("Ja") %> <i class="input-frame"></i>
</label>
</div>
<div class="radio">
<label class="form-label" class="radio-label">
<input class="form-control" name="passphrase_memorized" onclick="removeGroupInvalidClass()" type="radio" value="false"><%= langCatalog->gettext("Nein") %> <i class="input-frame"></i>
</label>
</div>
</div>
<button type="submit" class="center-form-submit form-button" name="ask" ><%= langCatalog->gettext("Absenden") %></button>
</div>
</form>
</div>
<% } else if(state == PAGE_WAIT_EMAIL) { %>
<%= langCatalog->gettext("Dir wird eine E-Mail zugeschickt um dein Passwort zur&uuml;ckzusetzen.") %>
<% } else if(state == PAGE_WAIT_ADMIN) { %>
<%= langCatalog->gettext("Der Admin hat eine E-Mail bekommen und wird sich bei dir melden.") %>
<% } else if(state == PAGE_EMAIL_ALREADY_SEND) { %>
<p><%= langCatalog->gettext("Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-Verzeichnis nach. ") %></p>
<p><%= langCatalog->gettext("Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten gewartet?") %></p>
<p><b><a href="mailto:<%= adminReceiver %>?subject=Error Reset Password email&amp;body=Hallo Dario,%0D%0A%0D%0Aich habe keine Passwort zurücksetzen E-Mail erhalten,%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A"><%= langCatalog->gettext("E-Mail an Support schicken")%></a></b></p>
<% } %>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
function removeGroupInvalidClass() {
var elements = document.getElementsByClassName("group-is-invalid");
if(elements.length > 0) {
elements[0].classList.remove("group-is-invalid");
}
}
</script>
<%@ include file="footer.cpsp" %>