Compare commits

...

18 Commits
v1.1 ... main

Author SHA1 Message Date
andreaskurz 8fdf751d37
Create localization fallback (#17)
* Fix function call

get_email_from is a class function and should therefore be called like one.

* Create default localization

This will use en_US as a default fallback for localization in case the user has configured a language in roundcube where localization is missing.
This lead to empty emails without any confirmation code being sent.
2023-04-13 05:56:23 +03:00
freibadschwimmer 0d1b340499
Add line break to fix "broken headers" in rspamd to avoid confirmation mails gettings stuck in spam filter (#13)
* Translation added

* Add line break in mail function
2023-01-30 06:12:07 +03:00
Gitea af71dd7ffe Merge branch 'main' of https://github.com/AlfnRU/roundcube-password_recovery 2023-01-29 08:51:28 +03:00
Gitea d01f5fc1bd added reply-to address 2023-01-29 08:46:10 +03:00
freibadschwimmer 72d03ca0f0
Translation added (#12) 2023-01-29 07:33:25 +03:00
Jonas Flodén df793ebec4
Add swedish translations (#7) 2022-11-07 06:15:12 +03:00
Gitea 028db01314 Add include for PostfixAdmin 2022-03-10 20:43:47 +03:00
AlfnRU 36a04049d5
Update password_recovery.php 2022-03-01 23:47:04 +03:00
Bbertatum 485605f85b
Create fr_FR.inc (#4)
* Create fr_FR.inc

* add specific changes to make it work with SHA512
2022-03-01 23:44:30 +03:00
alf 3620ae3639 add error messages from plugin password to debug 2022-02-01 06:07:18 +03:00
AlfnRU 16a4ce9320
Merge pull request #2 from Bbertatum/main
Add FR translate for html
2022-02-01 05:54:30 +03:00
Bbertatum 2b89909246
Create alert_for_admin_to_reset_pw.html 2022-01-31 20:09:36 +01:00
Bbertatum 1673b75b3b
Create reset_pw_body.html 2022-01-31 20:07:23 +01:00
alf 0bcfb0b470 fixed error checking additional properties of users 2022-01-26 17:33:44 +03:00
alf 27b62af5ce fixed error checking additional properties of users 2022-01-26 17:23:03 +03:00
alf 9dec9cc91a fixed error checking additional properties of users 2022-01-26 16:58:12 +03:00
alf d316ccd944 fixed error checking additional properties of users 2022-01-26 16:42:51 +03:00
alf bf4c8b0bad fixed error checking additional properties of users 2022-01-26 16:26:52 +03:00
15 changed files with 258 additions and 11 deletions

View File

@ -2,10 +2,10 @@
# only for Russia!!!
COUNTRY_CODE="7"
SPOOLDIR="/srv/data/sms-outgoing/"
USER="smsd"
GROUP="smsd"
SPOOLDIR="/srv/data/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}

View File

@ -2,7 +2,7 @@
"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.1",
"version": "1.2",
"license": "GPL-3.0-or-later",
"homepage": "https://github.com/AlfnRU/roundcube-password_recovery/",
"authors": [

View File

@ -17,6 +17,9 @@ $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'] = false;

View File

@ -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;
}
?>

View File

@ -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;
}
}
?>

58
localization/de_DE.inc Normal file
View 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!';
?>

View File

@ -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>

View File

@ -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>

58
localization/fr_FR.inc Normal file
View File

@ -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";
?>

View File

@ -0,0 +1,2 @@
<p>L'utilisateur [USER] a demand&eacute; un changement de mot de passe mais n'a pas d'e-mail alternatif renseign&eacute;.</p>
<p>Merci de changer son mot de passe ou de lui ajouter un e-mail alternatif.</p>

View File

@ -0,0 +1,3 @@
<p>Bonjour,</p>
<p>Vous avez demand&eacute; un changement de mot de passe.</p>
<p>Code de confirmation: [CODE]</p>

58
localization/sv_SE.inc Normal file
View File

@ -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!';
?>

View File

@ -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>

View File

@ -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>

View File

@ -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);
}
}
@ -278,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)) {
@ -451,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)) {