]> git.mxchange.org Git - friendica.git/blobdiff - mod/lostpass.php
Bugfix Diaspora: We exited with the wrong return values and the guid for messages...
[friendica.git] / mod / lostpass.php
index 530619bc4f7fa484c29be5a5a6166fb57a5d9789..37ef3e2f82f6a461bc78d7a38381309a35d67486 100644 (file)
@@ -1,52 +1,85 @@
 <?php
 
+use Friendica\App;
 
-function lostpass_post(&$a) {
+require_once('include/email.php');
+require_once('include/enotify.php');
+require_once('include/text.php');
 
-       $email = notags(trim($_POST['login-name']));
-       if(! $email)
-               goaway($a->get_baseurl());
+function lostpass_post(App $a) {
 
-       $r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) LIMIT 1",
-               dbesc($email),
-               dbesc($email)
+       $loginame = notags(trim($_POST['login-name']));
+       if(! $loginame)
+               goaway(z_root());
+
+       $r = q("SELECT * FROM `user` WHERE ( `email` = '%s' OR `nickname` = '%s' ) AND `verified` = 1 AND `blocked` = 0 LIMIT 1",
+               dbesc($loginame),
+               dbesc($loginame)
        );
-       if(! count($r))
-               goaway($a->get_baseurl());
+
+       if (! dbm::is_result($r)) {
+               notice( t('No valid account found.') . EOL);
+               goaway(z_root());
+       }
+
        $uid = $r[0]['uid'];
        $username = $r[0]['username'];
+       $email = $r[0]['email'];
 
        $new_password = autoname(12) . mt_rand(100,9999);
        $new_password_encoded = hash('whirlpool',$new_password);
 
-       $r = q("UPDATE `user` SET `pwdreset` = '%s' WHERE `uid` = %d LIMIT 1",
+       $r = q("UPDATE `user` SET `pwdreset` = '%s' WHERE `uid` = %d",
                dbesc($new_password_encoded),
                intval($uid)
        );
        if($r)
-               notice( t('Password reset request issued. Check your email.') . EOL);
+               info( t('Password reset request issued. Check your email.') . EOL);
+
+
+       $sitename = $a->config['sitename'];
+       $resetlink = App::get_baseurl() . '/lostpass?verify=' . $new_password;
+
+       $preamble = deindent(t('
+               Dear %1$s,
+                       A request was recently received at "%2$s" to reset your account
+               password. In order to confirm this request, please select the verification link
+               below or paste it into your web browser address bar.
+
+               If you did NOT request this change, please DO NOT follow the link
+               provided and ignore and/or delete this email.
+
+               Your password will not be changed unless we can verify that you
+               issued this request.'));
+       $body = deindent(t('
+               Follow this link to verify your identity:
+
+               %1$s
 
-       $email_tpl = get_intltext_template("lostpass_eml.tpl");
-       $email_tpl = replace_macros($email_tpl, array(
-                       '$sitename' => $a->config['sitename'],
-                       '$siteurl' =>  $a->get_baseurl(),
-                       '$username' => $username,
-                       '$email' => $email,
-                       '$reset_link' => $a->get_baseurl() . '/lostpass?verify=' . $new_password
-       ));
+               You will then receive a follow-up message containing the new password.
+               You may change that password from your account settings page after logging in.
 
-       $res = mail($email, sprintf( t('Password reset requested at %s'),$a->config['sitename']),
-                       $email_tpl,
-                       'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
-                       . 'Content-type: text/plain; charset=UTF-8' . "\n"
-                       . 'Content-transfer-encoding: 8bit' );
+               The login details are as follows:
 
+               Site Location:  %2$s
+               Login Name:     %3$s'));
+
+       $preamble = sprintf($preamble, $username, $sitename);
+       $body = sprintf($body, $resetlink, App::get_baseurl(), $email);
+
+       notification(array(
+               'type' => "SYSTEM_EMAIL",
+               'to_email' => $email,
+               'subject'=> sprintf( t('Password reset requested at %s'),$sitename),
+               'preamble'=> $preamble,
+               'body' => $body));
+
+       goaway(z_root());
 
-       goaway($a->get_baseurl());
 }
 
 
-function lostpass_content(&$a) {
+function lostpass_content(App $a) {
 
 
        if(x($_GET,'verify')) {
@@ -56,10 +89,9 @@ function lostpass_content(&$a) {
                $r = q("SELECT * FROM `user` WHERE `pwdreset` = '%s' LIMIT 1",
                        dbesc($hash)
                );
-               if(! count($r)) {
-                       notice( t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.") . EOL);
-                       goaway($a->get_baseurl());
-                       return;
+               if (! dbm::is_result($r)) {
+                       $o =  t("Request could not be verified. \x28You may have previously submitted it.\x29 Password reset failed.");
+                       return $o;
                }
                $uid = $r[0]['uid'];
                $username = $r[0]['username'];
@@ -68,44 +100,59 @@ function lostpass_content(&$a) {
                $new_password = autoname(6) . mt_rand(100,9999);
                $new_password_encoded = hash('whirlpool',$new_password);
 
-               $r = q("UPDATE `user` SET `password` = '%s', `pwdreset` = ''  WHERE `uid` = %d LIMIT 1",
+               $r = q("UPDATE `user` SET `password` = '%s', `pwdreset` = ''  WHERE `uid` = %d",
                        dbesc($new_password_encoded),
                        intval($uid)
                );
-               if($r) {
+
+               /// @TODO Is dbm::is_result() okay here?
+               if ($r) {
                        $tpl = get_markup_template('pwdreset.tpl');
                        $o .= replace_macros($tpl,array(
                                '$lbl1' => t('Password Reset'),
                                '$lbl2' => t('Your password has been reset as requested.'),
                                '$lbl3' => t('Your new password is'),
                                '$lbl4' => t('Save or copy your new password - and then'),
-                               '$lbl5' => '<a href="' . $a->get_baseurl() . '">' . t('click here to login') . '</a>.',
+                               '$lbl5' => '<a href="' . App::get_baseurl() . '">' . t('click here to login') . '</a>.',
                                '$lbl6' => t('Your password may be changed from the <em>Settings</em> page after successful login.'),
                                '$newpass' => $new_password,
-                               '$baseurl' => $a->get_baseurl()
+                               '$baseurl' => App::get_baseurl()
 
                        ));
-                               notice("Your password has been reset." . EOL);
+                               info("Your password has been reset." . EOL);
 
 
+                       $sitename = $a->config['sitename'];
+                       // $username, $email, $new_password
+                       $preamble = deindent(t('
+                               Dear %1$s,
+                                       Your password has been changed as requested. Please retain this
+                               information for your records (or change your password immediately to
+                               something that you will remember).
+                       '));
+                       $body = deindent(t('
+                               Your login details are as follows:
 
-                       $email_tpl = get_intltext_template("passchanged_eml.tpl");
-                       $email_tpl = replace_macros($email_tpl, array(
-                       '$sitename' => $a->config['sitename'],
-                       '$siteurl' =>  $a->get_baseurl(),
-                       '$username' => $username,
-                       '$email' => $email,
-                       '$new_password' => $new_password,
-                       '$uid' => $newuid ));
+                               Site Location:  %1$s
+                               Login Name:     %2$s
+                               Password:       %3$s
 
-                       $res = mail($email,"Your password has changed at {$a->config['sitename']}",$email_tpl,
-                               'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
-                               . 'Content-type: text/plain; charset=UTF-8' . "\n"
-                               . 'Content-transfer-encoding: 8bit' );
+                               You may change that password from your account settings page after logging in.
+                       '));
+
+                       $preamble = sprintf($preamble, $username);
+                       $body = sprintf($body, App::get_baseurl(), $email, $new_password);
+
+                       notification(array(
+                               'type' => "SYSTEM_EMAIL",
+                               'to_email' => $email,
+                               'subject'=> sprintf( t('Your password has been changed at %s'),$sitename),
+                               'preamble'=> $preamble,
+                               'body' => $body));
 
                        return $o;
                }
-       
+
        }
        else {
                $tpl = get_markup_template('lostpass.tpl');
@@ -114,10 +161,10 @@ function lostpass_content(&$a) {
                        '$title' => t('Forgot your Password?'),
                        '$desc' => t('Enter your email address and submit to have your password reset. Then check your email for further instructions.'),
                        '$name' => t('Nickname or Email: '),
-                       '$submit' => t('Reset') 
+                       '$submit' => t('Reset')
                ));
 
                return $o;
        }
 
-}
\ No newline at end of file
+}