Files
snipe-it/app/controllers/AuthController.php

308 lines
10 KiB
PHP
Executable File

<?php
class AuthController extends BaseController
{
/**
* Account sign in.
*
* @return View
*/
public function getSignin()
{
// Is the user logged in?
if (Sentry::check()) {
return Redirect::route('account');
}
// Show the page
return View::make('frontend.auth.signin');
}
/**
* Account sign in form processing.
*
* @return Redirect
*/
public function postSignin()
{
// Declare the rules for the form validation
$rules = array(
'email' => 'required|email',
'password' => 'required',
);
// Create a new validator instance from our validation rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails()) {
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($validator);
}
try {
// Try to log the user in
Sentry::authenticate(Input::only('email', 'password'), Input::get('remember-me', 0));
// Get the page we were before
$redirect = Session::get('loginRedirect', 'account');
// Unset the page we were before from the session
Session::forget('loginRedirect');
// Redirect to the users page
return Redirect::to($redirect)->with('success', Lang::get('auth/message.signin.success'));
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_not_found'));
} catch (Cartalyst\Sentry\Users\UserNotActivatedException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_not_activated'));
} catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_suspended'));
} catch (Cartalyst\Sentry\Throttling\UserBannedException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_banned'));
}
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($this->messageBag);
}
/**
* Account sign up.
*
* @return View
*/
public function getSignup()
{
// Is the user logged in?
if (Sentry::check()) {
return Redirect::route('account');
}
// Show the page
return View::make('frontend.auth.signup');
}
/**
* Account sign up form processing.
*
* @return Redirect
*/
public function postSignup()
{
// Declare the rules for the form validation
$rules = array(
'first_name' => 'required|min:2',
'last_name' => 'required|min:2',
'email' => 'required|email|unique:users',
'email_confirm' => 'required|email|same:email',
'password' => 'required|between:10,32',
'password_confirm' => 'required|same:password',
);
// Create a new validator instance from our validation rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails()) {
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($validator);
}
try {
// Register the user
$user = Sentry::register(array(
'first_name' => Input::get('first_name'),
'last_name' => Input::get('last_name'),
'email' => Input::get('email'),
'password' => Input::get('password'),
));
// Data to be used on the email view
$data = array(
'user' => $user,
'activationUrl' => URL::route('activate', $user->getActivationCode()),
);
// Send the activation code through email
Mail::send('emails.register-activate', $data, function ($m) use ($user) {
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
$m->subject('Welcome ' . $user->first_name);
});
// Redirect to the register page
return Redirect::back()->with('success', Lang::get('auth/message.signup.success'));
} catch (Cartalyst\Sentry\Users\UserExistsException $e) {
$this->messageBag->add('email', Lang::get('auth/message.account_already_exists'));
}
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($this->messageBag);
}
/**
* User account activation page.
*
* @param string $actvationCode
* @return
*/
public function getActivate($activationCode = null)
{
// Is the user logged in?
if (Sentry::check()) {
return Redirect::route('account');
}
try {
// Get the user we are trying to activate
$user = Sentry::getUserProvider()->findByActivationCode($activationCode);
// Try to activate this user account
if ($user->attemptActivation($activationCode)) {
// Redirect to the login page
return Redirect::route('signin')->with('success', Lang::get('auth/message.activate.success'));
}
// The activation failed.
$error = Lang::get('auth/message.activate.error');
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
$error = Lang::get('auth/message.activate.error');
}
// Ooops.. something went wrong
return Redirect::route('signin')->with('error', $error);
}
/**
* Forgot password page.
*
* @return View
*/
public function getForgotPassword()
{
// Show the page
return View::make('frontend.auth.forgot-password');
}
/**
* Forgot password form processing page.
*
* @return Redirect
*/
public function postForgotPassword()
{
// Declare the rules for the validator
$rules = array(
'email' => 'required|email',
);
// Create a new validator instance from our dynamic rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails()) {
// Ooops.. something went wrong
return Redirect::route('forgot-password')->withInput()->withErrors($validator);
}
try {
// Get the user password recovery code
$user = Sentry::getUserProvider()->findByLogin(Input::get('email'));
// Data to be used on the email view
$data = array(
'user' => $user,
'forgotPasswordUrl' => URL::route('forgot-password-confirm', $user->getResetPasswordCode()),
);
// Send the activation code through email
Mail::send('emails.forgot-password', $data, function ($m) use ($user) {
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
$m->subject('Account Password Recovery');
});
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
// Even though the email was not found, we will pretend
// we have sent the password reset code through email,
// this is a security measure against hackers.
}
// Redirect to the forgot password
return Redirect::route('forgot-password')->with('success', Lang::get('auth/message.forgot-password.success'));
}
/**
* Forgot Password Confirmation page.
*
* @param string $passwordResetCode
* @return View
*/
public function getForgotPasswordConfirm($passwordResetCode = null)
{
try {
// Find the user using the password reset code
$user = Sentry::getUserProvider()->findByResetPasswordCode($passwordResetCode);
} catch(Cartalyst\Sentry\Users\UserNotFoundException $e) {
// Redirect to the forgot password page
return Redirect::route('forgot-password')->with('error', Lang::get('auth/message.account_not_found'));
}
// Show the page
return View::make('frontend.auth.forgot-password-confirm');
}
/**
* Forgot Password Confirmation form processing page.
*
* @param string $passwordResetCode
* @return Redirect
*/
public function postForgotPasswordConfirm($passwordResetCode = null)
{
// Declare the rules for the form validation
$rules = array(
'password' => 'required|between:10,32',
'password_confirm' => 'required|same:password'
);
// Create a new validator instance from our dynamic rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails()) {
// Ooops.. something went wrong
return Redirect::route('forgot-password-confirm', $passwordResetCode)->withInput()->withErrors($validator);
}
try {
// Find the user using the password reset code
$user = Sentry::getUserProvider()->findByResetPasswordCode($passwordResetCode);
// Attempt to reset the user password
if ($user->attemptResetPassword($passwordResetCode, Input::get('password'))) {
// Password successfully reseted
return Redirect::route('signin')->with('success', Lang::get('auth/message.forgot-password-confirm.success'));
} else {
// Ooops.. something went wrong
return Redirect::route('signin')->with('error', Lang::get('auth/message.forgot-password-confirm.error'));
}
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
// Redirect to the forgot password page
return Redirect::route('forgot-password')->with('error', Lang::get('auth/message.account_not_found'));
}
}
/**
* Logout page.
*
* @return Redirect
*/
public function getLogout()
{
// Log the user out
Sentry::logout();
// Redirect to the users page
return Redirect::route('home')->with('success', 'You have successfully logged out!');
}
}