Compare commits
30 Commits
Author | SHA1 | Date |
---|---|---|
andreaskurz | 8fdf751d37 | |
freibadschwimmer | 0d1b340499 | |
Gitea | af71dd7ffe | |
Gitea | d01f5fc1bd | |
freibadschwimmer | 72d03ca0f0 | |
Jonas Flodén | df793ebec4 | |
Gitea | 028db01314 | |
AlfnRU | 36a04049d5 | |
Bbertatum | 485605f85b | |
alf | 3620ae3639 | |
AlfnRU | 16a4ce9320 | |
Bbertatum | 2b89909246 | |
Bbertatum | 1673b75b3b | |
alf | 0bcfb0b470 | |
alf | 27b62af5ce | |
alf | 9dec9cc91a | |
alf | d316ccd944 | |
alf | bf4c8b0bad | |
alf | e6ef6ac019 | |
AlfnRU | fa7ddadb24 | |
alf | 07027df181 | |
AlfnRU | e0d4048bcf | |
AlfnRU | db9faad180 | |
AlfnRU | 874bfbb343 | |
alf | c9beadff8f | |
alf | ca5b762dd5 | |
alf | a5121f77e2 | |
alf | cb22d08cad | |
alf | 7eae79a035 | |
alf | 700be9eb9d |
24
README.md
|
@ -17,6 +17,30 @@
|
|||
|
||||
|
||||
### Install
|
||||
|
||||
1. Place this plugin folder into plugins directory of Roundcube
|
||||
2. Add 'password_recovery' to $config['plugins'] in your Roundcube config
|
||||
3. Rename 'config.inc.php.dist' to 'config.inc.php'
|
||||
4. Configure the credentials to access the postfix database in the config.inc.php file
|
||||
|
||||
|
||||
### Screenshots
|
||||
|
||||
![Login with Elastic Skin](docs/login.png)
|
||||
|
||||
![Recovery password](docs/reset.png)
|
||||
|
||||
![Identities](docs/identities.png)
|
||||
|
||||
|
||||
### Settings
|
||||
|
||||
![Settings for confirmation code](docs/config_code.png)
|
||||
|
||||
![Recovery with code](docs/recovery.png)
|
||||
|
||||
|
||||
![Settings for secret question/answer](docs/config_answer.png)
|
||||
|
||||
![Recovery with code and answer](docs/recovery2.png)
|
||||
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
# only for Russia!!!
|
||||
COUNTRY_CODE="7"
|
||||
SPOOLDIR="/srv/data/sms-outgoing/"
|
||||
|
||||
USER="smsd"
|
||||
GROUP="smsd"
|
||||
SPOOLDIR="/var/spool/sms/outgoing/"
|
||||
|
||||
if [ -z "$*" ]; then
|
||||
echo "Usage: ./sendsms.sh \"phone number\" \"message\""
|
||||
|
@ -40,13 +40,14 @@ if [[ ${#DST} != 11 ]]; then
|
|||
exit -1
|
||||
fi
|
||||
|
||||
SMS=$(mktemp /tmp/sms_XXXXXXX)
|
||||
FILENAME="/tmp/"`date +"%Y.%m.%d-%H:%M:%S"`"_${DST}.XXXXX"
|
||||
SMS=$(mktemp $FILENAME)
|
||||
chown :${GROUP} ${SMS}
|
||||
chmod 0666 ${SMS}
|
||||
|
||||
echo "To: ${DST}" >> $SMS
|
||||
echo "" >> $SMS
|
||||
echo $MSG >> $SMS
|
||||
echo -en $MSG >> $SMS
|
||||
|
||||
mv ${SMS} ${SPOOLDIR}
|
||||
|
||||
|
|
|
@ -1,17 +1,24 @@
|
|||
{
|
||||
"name": "AlfnRU/password_recovery",
|
||||
"name": "alfnru/password_recovery",
|
||||
"type": "roundcube-plugin",
|
||||
"description": "Plugin that adds functionality so that a user can create a new password if the original is lost.",
|
||||
"version": "1.2",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"homepage": "https://github.com/AlfnRU/roundcube-password_recovery/",
|
||||
"license": "GPL",
|
||||
"version": "1.0",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Alexander Alferov",
|
||||
"email": "a@alfn.ru",
|
||||
"role": "Lead"
|
||||
"role": "Developer"
|
||||
}
|
||||
],
|
||||
"keywords": [
|
||||
"login",
|
||||
"authentication",
|
||||
"security",
|
||||
"password",
|
||||
"recovery"
|
||||
],
|
||||
"repositories": [
|
||||
{
|
||||
"type": "composer",
|
||||
|
|
|
@ -17,8 +17,11 @@ $config['pr_fields'] = [
|
|||
// Admin email (this account will receive alerts when an user does not have an alternative email and phone)
|
||||
$config['pr_admin_email'] = 'postmaster@your.domain.com';
|
||||
|
||||
// Address to be indicated as reply-to in mail notifications
|
||||
$config['pr_replyto_email'] = 'postmaster@your.domain.com';
|
||||
|
||||
// Use secret question/answer to confirmation password recovery
|
||||
$config['pr_use_question'] = true;
|
||||
$config['pr_use_question'] = false;
|
||||
|
||||
// Use message with code to confirmation password recovery
|
||||
$config['pr_use_confirm_code'] = true;
|
||||
|
|
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 9.1 KiB |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 20 KiB |
After Width: | Height: | Size: 9.7 KiB |
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
/* Addition for PostfixAdmin (for plugin roundcube password recovery)
|
||||
add this to the end of the file 'config.inc.php' or 'config.local.inc.php'
|
||||
|
||||
if (file_exists(dirname(__FILE__) . '/roundcube_password_recovery.php')) {
|
||||
require_once(dirname(__FILE__) . '/roundcube_password_recovery.php');
|
||||
}
|
||||
*/
|
||||
|
||||
$CONF['language_hook'] = 'a_language_hook';
|
||||
function a_language_hook($PALANG, $language) {
|
||||
$PALANG['pQuestion'] = 'Secret question';
|
||||
$PALANG['pAnswer'] = 'Answer';
|
||||
return $PALANG;
|
||||
}
|
||||
|
||||
|
||||
$CONF['mailbox_struct_hook'] = 'a_struct_mailbox_modify';
|
||||
function a_struct_mailbox_modify($struct) {
|
||||
$struct['phone'] = pacol(1, 1, 1, 'text', 'pCreate_mailbox_phone', 'pCreate_mailbox_phone_desc');
|
||||
$struct['email_other'] = pacol(1, 1, 1, 'text', 'pCreate_mailbox_email', 'pCreate_mailbox_email_desc');
|
||||
$struct['question'] = pacol(1, 1, 0, 'text', 'pQuestion', '');
|
||||
$struct['answer'] = pacol(1, 1, 0, 'text', 'pAnswer', '');
|
||||
return $struct;
|
||||
}
|
||||
|
||||
?>
|
23
lib/send.php
|
@ -35,7 +35,7 @@ class password_recovery_send {
|
|||
$sms_send_function = $this->rc->config->get('pr_sms_send_function');
|
||||
if ($sms_send_function) {
|
||||
if (is_file($sms_send_function)) {
|
||||
$ret = (int) exec("$sms_send_function $to $message");
|
||||
$ret = (int) exec("bash $sms_send_function $to $message");
|
||||
} else if (is_callable($sms_send_function)) {
|
||||
$ret = $sms_send_function($to, $message);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ class password_recovery_send {
|
|||
$headers .= "Subject: $subject\r\n";
|
||||
$headers .= "Reply-To: $from\r\n";
|
||||
|
||||
$txt_body = "--=_$ctb";
|
||||
$txt_body = "--=_$ctb\r\n";
|
||||
$txt_body .= "\r\n";
|
||||
$txt_body .= "Content-Transfer-Encoding: 7bit\r\n";
|
||||
$txt_body .= "Content-Type: text/plain; charset=" . $this->rc->config->get('default_charset', RCUBE_CHARSET) . "\r\n";
|
||||
|
@ -101,7 +101,7 @@ class password_recovery_send {
|
|||
|
||||
// Send message to administrator
|
||||
function send_alert_to_admin($user_requesting_new_password) {
|
||||
$file = dirname(__FILE__) . "/../localization/" . $this->rc->user->language . "/alert_for_admin_to_reset_pw.html";
|
||||
$file = $this->get_localization_dir($this->rc->user->language) . "/alert_for_admin_to_reset_pw.html";
|
||||
$body = strtr(file_get_contents($file), array('[USER]' => $user_requesting_new_password));
|
||||
$subject = $this->pr->gettext('email_subject_admin');
|
||||
return $this->send_email(
|
||||
|
@ -121,14 +121,19 @@ class password_recovery_send {
|
|||
if ($confirm_code && $this->pr->set_user_props(['token'=>$confirm_code])) {
|
||||
// send EMail
|
||||
if ($this->user['have_altemail']) {
|
||||
$file = dirname(__FILE__) . "/../localization/" . $this->rc->user->language . "/reset_pw_body.html";
|
||||
$file = $this->get_localization_dir($this->rc->user->language) . "/reset_pw_body.html";
|
||||
$link = "http://{$_SERVER['SERVER_NAME']}/?_task=login&_action=plugin.password_recovery&_username=". $this->user['username'];
|
||||
$body = strtr(file_get_contents($file), ['[LINK]' => $link, '[CODE]' => $confirm_code]);
|
||||
$subject = $this->pr->gettext('email_subject');
|
||||
|
||||
$from = $this->rc->config->get('pr_replyto_email');
|
||||
if(!$from){
|
||||
$from = $this->get_email_from($this->rc->config->get('pr_admin_email'));
|
||||
}
|
||||
|
||||
$send_email = $this->send_email(
|
||||
$this->user['altemail'],
|
||||
$this->get_email_from($this->rc->config->get('pr_admin_email')),
|
||||
$from,
|
||||
$subject,
|
||||
$body
|
||||
);
|
||||
|
@ -190,6 +195,14 @@ class password_recovery_send {
|
|||
$parts = explode('@',$email);
|
||||
return 'no-reply@'.$parts[1];
|
||||
}
|
||||
|
||||
function get_localization_dir($language) {
|
||||
$file = dirname(__FILE__) . "/../localization/" . $language;
|
||||
if (!file_exists($file)) {
|
||||
$file = dirname(__FILE__) . "/../localization/en_US";
|
||||
}
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
$labels['forgot_password'] = 'Passwort vergessen?';
|
||||
$labels['recovery_password'] = 'Wiederhestellungspasswort';
|
||||
$labels['phone'] = 'Telefon';
|
||||
$labels['altemail'] = 'Alternative E-Mail Adresse';
|
||||
$labels['newpassword'] = 'Neues Passwort';
|
||||
$labels['newpassword_confirm'] = 'Bestätigung';
|
||||
$labels['code'] = 'Bestätigungs-Code';
|
||||
$labels['question'] = 'Geheime Frage';
|
||||
$labels['answer'] = 'Antwort auf geheime Frage';
|
||||
$labels['answer_confirm'] = 'Bestätigung';
|
||||
$labels['recovery'] = 'Wiederherstellung';
|
||||
$labels['save'] = 'Speichern';
|
||||
$labels['cancel'] = 'Abbrechen';
|
||||
$labels['email_subject'] = 'E-Mail Zugang wiederherstellen';
|
||||
$labels['email_subject_admin'] = 'Anfrage zur Passwort Wiederherstellung';
|
||||
$labels['click_here'] = 'Hier klicken';
|
||||
$labels['no_identities'] = 'Information zur Passwort-Wiederherstellung ausfüllen.';
|
||||
$labels['no_username'] = 'Benutzernamen eingeben (E-mail Addresse)';
|
||||
$labels['renew_code'] = 'Neuen Wiederherstellungs-Code senden';
|
||||
$labels['count_send_code_maximum'] = 'Maximale Anzahl erlaubter Wiederherstellungs-Codes überschritten';
|
||||
$labels['no_code'] = 'Bestätigungscode eingeben';
|
||||
$labels['no_answer'] = 'Geheime Antwort eingeben';
|
||||
$labels['no_password'] = 'Neues Passwort eingeben';
|
||||
$labels['no_password_confirm'] = 'Passwort-Bestätigung eingeben';
|
||||
$labels['password_inconsistency'] = 'Passwort und Bestätigung stimmen nicht überein';
|
||||
$labels['password_too_short'] = 'Das Passwort muss mundestens %d Zeichen lang sein.';
|
||||
|
||||
$messages['disabled'] = 'Das System ist im Wartungsmodus und eine Passwort-Wiederherstellungs ist momentan nicht möglich. Das System sollte in Kürze wieder normal laufen. Entschuldigung für Unannehmlichkeiten.';
|
||||
$messages['banned'] = 'Zugang vorübergehend gesperrt (zu viele Login Versuche). Bitte versuchen Sie es später noch einmal oder kontaktieren Sie den Administrator.';
|
||||
$messages['no_identities'] = 'The Einstellungen für die Passwort-Wiederherstellung sind nicht vorhanden. %s und konfiguriere!';
|
||||
$messages['user_not_found'] = 'Benutzer nicht gefunden';
|
||||
$messages['check_account_notice'] = 'Der Passwort-Wiederherstellungscode wurde bereits versandt. Bitte überprüfen Sie ihre Email oder das Telefon';
|
||||
$messages['check_account'] = 'Passwort-Wiederherstellungscode wurde an Sie versandt ';
|
||||
$messages['check_email'] = 'an eine alternative E-Mail Adresse ';
|
||||
$messages['check_sms'] = 'am Telefon';
|
||||
$messages['and'] = 'und ';
|
||||
$messages['sent_to_admin'] = 'Passwort-Wiederherstellungsinformationen konnten nicht gefunden werden, daher wurde eine Nachricht an den Administrator gesandt.';
|
||||
$messages['send_failed'] = 'Fehler beim Versenden des Wiederherstellungs-Codes. Bitte später noch ein mal versuchen.';
|
||||
$messages['write_failed'] = 'Fehler beim Schreiben der Daten. bitte den Administrator kontaktieren.';
|
||||
$messages['code_expired'] = 'Wiederherstellungs-Code ist abgelaufen';
|
||||
$messages['code_failed'] = 'Ungültiger Wiederherstellungs-Code';
|
||||
$messages['answer_failed'] = 'Falsche Antwort auf die geheime Frage';
|
||||
$messages['password_invalid'] = 'Ungültiges asswort';
|
||||
$messages['password_check_failed'] = 'Fehler. Das Passwort is zu einfach!';
|
||||
$messages['password_forbidden'] = 'Das Passwort beinhaltet ungültige Zeichen';
|
||||
$messages['password_changed'] = 'Passwortänderung erfolgreich!';
|
||||
$messages['password_not_changed'] = 'Beim Ändern des Passwortes kam es zu einem Fehler. Bitte später noch ein mal versuchen, oder den Administrator verständigen.';
|
||||
$messages['crypt_error'] = 'Ich kann das neue Passwort nicht speichern. Fehlende kryptographische Funktion.';
|
||||
$messages['connect_error'] = 'Ich kann das neue Passwort nicht speichern. Verbindungsproblem.';
|
||||
$messages['password_in_history'] = 'Dieses Passwort wurde bereits verwendet.';
|
||||
$messages['password_const_viol'] = 'Verstoß gegen die Passwort-Richtlinien. Das Passwort könnte zu schwach sein.';
|
||||
$messages['phone_invalid'] = 'Falsche Telefonnummer! Nummer muss %d Zeichen sein';
|
||||
$messages['altemail_invalid'] = 'Die alternative E-Mail Adresse ist ungültig!';
|
||||
$messages['altemail_match_primary'] = 'Die alternative E-Mail Adresse muss sich von der primären Adresse unterscheiden. Die zwei Adressen dürfen nicht ident sein!';
|
||||
|
||||
?>
|
|
@ -0,0 +1,2 @@
|
|||
<p>BenutzerIn [USER] hat eine Passwort-Wiederherstellung angefragt, aber weder eine Telefonnummer noch eine alternative E-Mail Adresse konfiguriert.</p>
|
||||
<p>Bitte ändere das Passwort manuell, oder konfiguriere eine Telefonnummer und/oder eine alternative A-Mail Adresse für den oder die betroffene Benutzerin.</p>
|
|
@ -0,0 +1,3 @@
|
|||
<p>Hallo!</p>
|
||||
<p>Sie haben einen Code für eine Passwort-Wiederherstellung angefragt.</p>
|
||||
<p>Bestätigungs-Code: [CODE]</p>
|
|
@ -6,7 +6,7 @@ $labels['phone'] = 'Phone';
|
|||
$labels['altemail'] = 'Alternate E-mail';
|
||||
$labels['newpassword'] = 'New password';
|
||||
$labels['newpassword_confirm'] = 'Confirmation';
|
||||
$labels['code'] = 'Confirmation code for recovery password';
|
||||
$labels['code'] = 'Confirmation code';
|
||||
$labels['question'] = 'Secret question';
|
||||
$labels['answer'] = 'Answer to a secret question';
|
||||
$labels['answer_confirm'] = 'Confirmation';
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
$labels['forgot_password'] = 'Mot de passe perdu ?';
|
||||
$labels['recovery_password'] = 'Récuperer son mot de passe';
|
||||
$labels['phone'] = 'Téléphone';
|
||||
$labels['altemail'] = 'Adresse mail secondaire';
|
||||
$labels['newpassword'] = 'Nouveau mot de passe';
|
||||
$labels['newpassword_confirm'] = 'Confirmation';
|
||||
$labels['code'] = 'Code de confirmation';
|
||||
$labels['question'] = 'Question secrète';
|
||||
$labels['answer'] = 'Réponse à la question secrète';
|
||||
$labels['answer_confirm'] = 'Confirmation';
|
||||
$labels['recovery'] = 'Retrouver';
|
||||
$labels['save'] = 'Enregistrer';
|
||||
$labels['cancel'] = 'Annuler';
|
||||
$labels['email_subject'] = "Récuperer l'accès aux emails";
|
||||
$labels['email_subject_admin'] = 'Demande de récuperation de mot de passe';
|
||||
$labels['click_here'] = 'Cliquer ici';
|
||||
$labels['no_identities'] = "Compléter les informations pour la récupération des mots de passes.";
|
||||
$labels['no_username'] = "Saisir votre nom d'utilisateur (addresse email)";
|
||||
$labels['renew_code'] = 'Envoyer un nouveau code de confirmation';
|
||||
$labels['count_send_code_maximum'] = 'Nombre maximal de confirmations dépassé';
|
||||
$labels['no_code'] = 'Saisir votre code de confirmation';
|
||||
$labels['no_answer'] = 'Saisir votre réponse secrète';
|
||||
$labels['no_password'] = 'Saisir un nouveau mot de passe';
|
||||
$labels['no_password_confirm'] = 'Confirmer le mot de passe';
|
||||
$labels['password_inconsistency'] = 'Le mot de passe et sa confirmation ne correspondent pas';
|
||||
$labels['password_too_short'] = 'Le mot de passe doit comporter au moins %d caractères';
|
||||
|
||||
$messages['disabled'] = "Le système est actuellement en maintenance. La récuperation de mots de passes n'est sans doute pas possible. Tout reviendra à la normale. Nous nous excusons pour les désagréments";
|
||||
$messages['banned'] = "Accès temporairement désactivé (trop de tentatives infructueuses). Merci d'essayer plus tard ou de contacter votre administrateur.";
|
||||
$messages['no_identities'] = 'Les paramètres nécessaires à la récuperation de mots de passes ne sont pas configurés. %s et configurer!';
|
||||
$messages['user_not_found'] = 'Utilisateur inexistant';
|
||||
$messages['check_account_notice'] = 'Le code de récuperation vous a déjà été envoyé. Merci de vérifier vos messages';
|
||||
$messages['check_account'] = 'Code de récuperation envoyé ';
|
||||
$messages['check_email'] = 'à votre adresse secondaire ';
|
||||
$messages['check_sms'] = 'sur votre téléphone';
|
||||
$messages['and'] = 'et ';
|
||||
$messages['sent_to_admin'] = "Aucune information de récuperation trouvée, votre demande a été transféré à l'administrateur.";
|
||||
$messages['send_failed'] = "Erreur d'envoi du code de restauration. Veuillez essayer plus tard.";
|
||||
$messages['write_failed'] = "Erreur d'écriture des données. Contacter votre administrateur.";
|
||||
$messages['code_expired'] = 'Votre code de confirmation est expiré';
|
||||
$messages['code_failed'] = 'Code de confirmation invalide';
|
||||
$messages['answer_failed'] = 'Réponse invalide';
|
||||
$messages['password_invalid'] = 'Mot de passe invalide';
|
||||
$messages['password_check_failed'] = 'Erreur. Mot de passe trop simple!';
|
||||
$messages['password_forbidden'] = 'Le mot de passe contient des caractères invalides';
|
||||
$messages['password_changed'] = 'Changement de mot de passe réussit !';
|
||||
$messages['password_not_changed'] = "Une erreur est survenue durant le changement de mot de passe. Merci d'éssayer plus tard ou de contacter votre administrateur.";
|
||||
$messages['crypt_error'] = 'Je ne peux pas enregistrer le nouveau mot de passe. Fonction de chiffrement absente.';
|
||||
$messages['connect_error'] = 'Je ne peux pas enregistrer le nouveau mot de passe. Erreur de connexion';
|
||||
$messages['password_in_history'] = 'Ce mot de passe à déjà été utilisé.';
|
||||
$messages['password_const_viol'] = 'Le mot de passe est trop faible.';
|
||||
$messages['phone_invalid'] = 'Mauvais numéro de téléphone! Il doit comporter %d chiffres';
|
||||
$messages['altemail_invalid'] = "L'email secondaire est incorrect";
|
||||
$messages['altemail_match_primary'] = "L'email secondaire ne peut pas être similaire au principal";
|
||||
|
||||
?>
|
|
@ -0,0 +1,2 @@
|
|||
<p>L'utilisateur [USER] a demandé un changement de mot de passe mais n'a pas d'e-mail alternatif renseigné.</p>
|
||||
<p>Merci de changer son mot de passe ou de lui ajouter un e-mail alternatif.</p>
|
|
@ -0,0 +1,3 @@
|
|||
<p>Bonjour,</p>
|
||||
<p>Vous avez demandé un changement de mot de passe.</p>
|
||||
<p>Code de confirmation: [CODE]</p>
|
|
@ -6,7 +6,7 @@ $labels['phone'] = 'Телефон';
|
|||
$labels['altemail'] = 'Альтернативный E-mail';
|
||||
$labels['newpassword'] = 'Новый пароль';
|
||||
$labels['newpassword_confirm'] = 'Подтверждение';
|
||||
$labels['code'] = 'Код для восстановления пароля';
|
||||
$labels['code'] = 'Код подтверждения';
|
||||
$labels['question'] = 'Секретный вопрос';
|
||||
$labels['answer'] = 'Ответ на секретный вопрос';
|
||||
$labels['answer_confirm'] = 'Подтверждение';
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<?php
|
||||
|
||||
$labels['forgot_password'] = 'Glömt lösenord?';
|
||||
$labels['recovery_password'] = 'Återställ lösenord';
|
||||
$labels['phone'] = 'Telefon';
|
||||
$labels['altemail'] = 'Alternativ e-post';
|
||||
$labels['newpassword'] = 'Nytt lösenord';
|
||||
$labels['newpassword_confirm'] = 'Bekräfta';
|
||||
$labels['code'] = 'Återställningskod';
|
||||
$labels['question'] = 'Hemlig fråga';
|
||||
$labels['answer'] = 'Svar till hemlig fråga';
|
||||
$labels['answer_confirm'] = 'Bekräfta';
|
||||
$labels['recovery'] = 'Återställ';
|
||||
$labels['save'] = 'Spara';
|
||||
$labels['cancel'] = 'Avbryt';
|
||||
$labels['email_subject'] = 'Återställ e-poståtkomst';
|
||||
$labels['email_subject_admin'] = 'Återställ lösenord';
|
||||
$labels['click_here'] = 'Klicka här';
|
||||
$labels['no_identities'] = 'Fyll i information för återställning av lösenord.';
|
||||
$labels['no_username'] = 'Ange ditt användarnamn (e-postadress)';
|
||||
$labels['renew_code'] = 'Skicka ny återställningskod';
|
||||
$labels['count_send_code_maximum'] = 'Maximalt antal återställningskoder har skickats!';
|
||||
$labels['no_code'] = 'Ange återställningskod';
|
||||
$labels['no_answer'] = 'Ange svar på hemlig fråga';
|
||||
$labels['no_password'] = 'Ange nytt lösenord';
|
||||
$labels['no_password_confirm'] = 'Bekräfta nytt lösenord';
|
||||
$labels['password_inconsistency'] = 'Lösenordsbekräftelse matchar inte';
|
||||
$labels['password_too_short'] = 'Lösenordet måste vara minst %d tecken långt.';
|
||||
|
||||
$messages['disabled'] = 'Systemet är tillfälligt stängt för underhåll så återställning av lösenord är inte möjligt just nu. Vänligen försök senare. Vi ber om ursäkt för besväret.';
|
||||
$messages['banned'] = 'Tillgång är tillfälligt blockerat (för många misslyckade försök). Vänligen försök senare eller kontakta administratören.';
|
||||
$messages['no_identities'] = 'Inställningarna som krävs för lösenordsåterställning har inte angetts. Vänligen %s och ange!';
|
||||
$messages['user_not_found'] = 'Användare saknas';
|
||||
$messages['check_account_notice'] = 'Återställningskoden har redan skickats. Vänligen kolla din e-post eller telefon.';
|
||||
$messages['check_account'] = 'Återställningskod har skickats till ';
|
||||
$messages['check_email'] = 'din alternativa e-postadress ';
|
||||
$messages['check_sms'] = 'till din telefon';
|
||||
$messages['and'] = 'and ';
|
||||
$messages['sent_to_admin'] = 'Ingen information för lösenordsåterställning hittades. Din förfrågan har skickats till administratören.';
|
||||
$messages['send_failed'] = 'Kunde inte skicka koden för återställning. Försök igen senare.';
|
||||
$messages['write_failed'] = 'Kunde inte spara information. Kontakta din administratör.';
|
||||
$messages['code_expired'] = 'Återställningskoden har gått ut';
|
||||
$messages['code_failed'] = 'Återställningskoden är ogiltig';
|
||||
$messages['answer_failed'] = 'Felaktigt svar på hemlig fråga';
|
||||
$messages['password_invalid'] = 'Ogiltigt lösenord';
|
||||
$messages['password_check_failed'] = 'Lösenordet är för enkelt!';
|
||||
$messages['password_forbidden'] = 'Lösenordet innehåller ogiltiga tecken';
|
||||
$messages['password_changed'] = 'Lösenordet har uppdaterats!';
|
||||
$messages['password_not_changed'] = 'Ett fel uppstod när lösenordet skulle ändras. Vänligen försök igen eller kontakta administratören.';
|
||||
$messages['crypt_error'] = 'Jag kan inte spara mitt nya lösenord. Saknar kryptografisk funktion.';
|
||||
$messages['connect_error'] = 'Jag kan inte spara mitt mya lösenord. Anslutningsproblem.';
|
||||
$messages['password_in_history'] = 'Det här lösenordet har redan använts.';
|
||||
$messages['password_const_viol'] = 'Lösenordet uppfyller inte alla krav. Det är antligen för enkelt.';
|
||||
$messages['phone_invalid'] = 'Felaktigt telefonnummer! Det måsta vara %d siffror';
|
||||
$messages['altemail_invalid'] = 'Den alternativa e-postadressen är felaktig!';
|
||||
$messages['altemail_match_primary'] = 'Den alternativa e-postadressen kan inte vara samma som den primära e-postadressen!';
|
||||
|
||||
?>
|
|
@ -0,0 +1,2 @@
|
|||
<p>Användaren [USER] har begärt att återställa sitt lösenord men har inte angett något telefonnummer eller alternativ e-postadress.</p>
|
||||
<p>Vänligen ändra användarens lösenord eller ange telefonnummer och/eller alternativ e-postadress för denna användaren.</p>
|
|
@ -0,0 +1,4 @@
|
|||
<p>Hej!</p>
|
||||
<p>Någon har begärt återställning av ditt lösenord. Vänligen använd koden nedan för att bekräfta.
|
||||
<br/>Om det inte var du kan du ignorera detta meddelande.</p>
|
||||
<p>Återställningskod: [CODE]</p>
|
|
@ -58,12 +58,20 @@ class password_recovery extends rcube_plugin {
|
|||
|
||||
$this->use_password = ($this->rc->config->get('pr_use_password_plugin') && $this->rc->plugins->load_plugin('password', true));
|
||||
|
||||
$new_fields = [
|
||||
'token' => ['type' => 'VARCHAR(255)', 'default' => '\'\''],
|
||||
'token_validity' => ['type' => 'DATETIME' , 'default' => '\'2000-01-01 00:00:00\'']
|
||||
];
|
||||
|
||||
foreach($this->fields as $field => $field_name){
|
||||
$new_fields[$field_name] = ['type' => ($field == 'phone' ? 'VARCHAR(30)' : 'VARCHAR(255)'), 'default' => '\'\''];
|
||||
}
|
||||
|
||||
foreach($new_fields as $field_name => $field_props){
|
||||
$query = "SELECT " . $field_name . " FROM " . $this->rc->config->get('pr_users_table');
|
||||
$result = $this->db->query($query);
|
||||
if (!$result) {
|
||||
$type = ($field == 'phone' ? 'VARCHAR(30)' : 'VARCHAR(255)');
|
||||
$query = "ALTER TABLE " . $this->rc->config->get('pr_users_table') . " ADD " . $field_name . " " . $type . " CHARACTER SET utf8 NOT NULL";
|
||||
$query = "ALTER TABLE " . $this->rc->config->get('pr_users_table') . " ADD " . $field_name . " " . $field_props['type'] . " DEFAULT " . $field_props['default'];
|
||||
$result = $this->db->query($query);
|
||||
}
|
||||
}
|
||||
|
@ -140,6 +148,11 @@ class password_recovery extends rcube_plugin {
|
|||
// Creating form for new password
|
||||
private function new_password_form() {
|
||||
$this->rc->output->add_label(
|
||||
'password_recovery.newpassword',
|
||||
'password_recovery.newpassword_confirm',
|
||||
'password_recovery.question',
|
||||
'password_recovery.answer',
|
||||
'password_recovery.code',
|
||||
'password_recovery.recovery_password',
|
||||
'password_recovery.renew_code',
|
||||
'password_recovery.count_send_code_maximum',
|
||||
|
@ -273,9 +286,11 @@ class password_recovery extends rcube_plugin {
|
|||
if ($result != 0) {
|
||||
$message = $this->gettext('write_failed') . ": " . $result;
|
||||
$type = 'error';
|
||||
$this->debug($message);
|
||||
}
|
||||
} else {
|
||||
$save['password'] = crypt($newpassword, '$1$' . rcube_utils::random_bytes(9));
|
||||
//$save['password'] = crypt($newpassword, '$6$' . rcube_utils::random_bytes(16));
|
||||
}
|
||||
|
||||
if ($type != 'error' && $this->set_user_props($save)) {
|
||||
|
@ -324,6 +339,12 @@ class password_recovery extends rcube_plugin {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!$this->rc->config->get('pr_use_question')) {
|
||||
unset($new_fields['question']);
|
||||
unset($new_fields['answer']);
|
||||
}
|
||||
|
||||
$p['form']['addressing']['content'] = $new_fields;
|
||||
|
||||
if($this->user['username']){
|
||||
|
@ -440,10 +461,12 @@ class password_recovery extends rcube_plugin {
|
|||
$code_validity_time = (int) $this->rc->config->get('pr_confirm_code_validity_time', 30);
|
||||
}
|
||||
$fields[] = "token = '" . $props['token'] . "', token_validity = NOW() + INTERVAL " . $code_validity_time . " MINUTE";
|
||||
//$fields[] = "token = '" . $props['token'] . "', token_validity = NOW() + '" . $code_validity_time . " MINUTE'";
|
||||
}
|
||||
|
||||
if ($props['password']) {
|
||||
$fields[] = "password = '" . $props['password'] . "'";
|
||||
$fields[] = "mdp = '{SHA512-CRYPT}" . $props['password'] . "'";
|
||||
}
|
||||
|
||||
if (count($fields)) {
|
||||
|
|