AuthController.php 3.6 KB
Newer Older
1 2 3 4 5 6
<?php namespace Modules\User\Http\Controllers;

use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\View;
use Laracasts\Commander\CommanderTrait;
use Laracasts\Flash\Flash;
7
use Modules\Core\Contracts\Authentication;
8 9 10 11 12 13 14 15 16 17 18
use Modules\User\Exceptions\InvalidOrExpiredResetCode;
use Modules\User\Exceptions\UserNotFoundException;
use Modules\User\Http\Requests\LoginRequest;
use Modules\User\Http\Requests\RegisterRequest;
use Modules\User\Http\Requests\ResetCompleteRequest;
use Modules\User\Http\Requests\ResetRequest;

class AuthController
{
    use CommanderTrait;

19 20 21 22 23
    /**
     * @var AuthenticationRepository
     */
    private $auth;

24
    public function __construct(Authentication $auth)
25
    {
26
        $this->auth = $auth;
27 28 29 30 31 32 33 34 35 36 37 38 39 40
    }

    public function getLogin()
    {
        return View::make('user::public.login');
    }

    public function postLogin(LoginRequest $request)
    {
        $credentials = [
            'email' => $request->email,
            'password' => $request->password
        ];
        $remember = (bool)$request->get('remember_me', false);
41 42 43 44

        $error = $this->auth->login($credentials, $remember);
        if (!$error) {
            Flash::success('Successfully logged in.');
45
            return Redirect::intended('/');
46 47
        }

48
        Flash::error($error);
49 50 51 52 53
        return Redirect::back()->withInput();
    }

    public function getRegister()
    {
54
        return View::make('user::public.register');
55 56 57 58 59 60 61 62 63 64 65 66 67
    }

    public function postRegister(RegisterRequest $request)
    {
        $this->execute('Modules\User\Commands\RegisterNewUserCommand', $request->all());

        Flash::success('Account created. Please check your email to activate your account.');

        return Redirect::route('register');
    }

    public function getLogout()
    {
68
        $this->auth->logout();
69 70 71 72

        return Redirect::route('login');
    }

73 74 75 76 77 78 79 80 81 82
    public function getActivate($userId, $code)
    {
        if ($this->auth->activate($userId, $code)) {
            Flash::success('Account activated. You can now login.');
            return Redirect::route('login');
        }
        Flash::error('There was an error with the activation.');
        return Redirect::route('register');
    }

83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
    public function getReset()
    {
        return View::make('user::public.reset.begin');
    }

    public function postReset(ResetRequest $request)
    {
        try {
            $this->execute('Modules\User\Commands\BeginResetProcessCommand', $request->all());
        } catch (UserNotFoundException $e) {
            Flash::error('No user with that email address belongs in our system.');

            return Redirect::back()->withInput();
        }

        Flash::success('Check your email to reset your password.');

        return Redirect::route('reset');
    }

    public function getResetComplete()
    {
        return View::make('user::public.reset.complete');
    }

    public function postResetComplete($userId, $code, ResetCompleteRequest $request)
    {
        try {
            $this->execute(
                'Modules\User\Commands\CompleteResetProcessCommand',
                array_merge($request->all(), ['userId' => $userId, 'code' => $code])
            );
        } catch (UserNotFoundException $e) {
            Flash::error('The user no longer exists.');
            return Redirect::back()->withInput();
118
        } catch (InvalidOrExpiredResetCode $e) {
119 120 121 122 123 124 125
            Flash::error('Invalid or expired reset code.');
            return Redirect::back()->withInput();
        }

        Flash::success('Password has been reset. You can now login with your new password.');
        return Redirect::route('login');
    }
126
}