Skip to content
Snippets Groups Projects
Auth.php 2.71 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    /**
     * @copyright  2020 Podlibre
     * @license    https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
     * @link       https://castopod.org/
     */
    
    namespace App\Controllers;
    
    use Myth\Auth\Models\UserModel;
    
    class Auth extends \Myth\Auth\Controllers\AuthController
    {
        /**
         * An array of helpers to be loaded automatically upon
         * class instantiation. These helpers will be available
         * to all other controllers that extend BaseController.
         *
         * @var array
         */
        protected $helpers = ['auth'];
    
        /**
         * Displays the login form, or redirects
         * the user to their destination/home if
         * they are already logged in.
         */
        public function changePassword()
        {
            return view('auth/change_password', [
                'config' => $this->config,
                'email' => user()->email,
                'token' => user()->reset_hash,
            ]);
        }
    
        public function attemptChange()
        {
            $users = new UserModel();
    
            // First things first - log the reset attempt.
            $users->logResetAttempt(
                $this->request->getPost('email'),
                $this->request->getPost('token'),
                $this->request->getIPAddress(),
                (string) $this->request->getUserAgent()
            );
    
            $rules = [
                'token' => 'required',
                'email' => 'required|valid_email',
                'password' => 'required|strong_password',
                'pass_confirm' => 'required|matches[password]',
            ];
    
            if (!$this->validate($rules)) {
                return redirect()
                    ->back()
                    ->withInput()
                    ->with('errors', $users->errors());
            }
    
            $user = $users
                ->where('email', $this->request->getPost('email'))
                ->where('reset_hash', $this->request->getPost('token'))
                ->first();
    
            if (is_null($user)) {
                return redirect()
                    ->back()
                    ->with('error', lang('Auth.forgotNoUser'));
            }
    
            // Reset token still valid?
            if (
                !empty($user->reset_expires) &&
                time() > $user->reset_expires->getTimestamp()
            ) {
                return redirect()
                    ->back()
                    ->withInput()
                    ->with('error', lang('Auth.resetTokenExpired'));
            }
    
            // Success! Save the new password, and cleanup the reset hash.
            $user->password = $this->request->getPost('password');
            $user->reset_hash = null;
            $user->reset_at = date('Y-m-d H:i:s');
            $user->reset_expires = null;
            $user->force_pass_reset = false;
            $users->save($user);
    
            return redirect()
                ->route('login')
                ->with('message', lang('Auth.resetSuccess'));
        }
    }