Carga inicial
This commit is contained in:
229
app/Http/Controllers/Auth/AuthenticateController.php
Normal file
229
app/Http/Controllers/Auth/AuthenticateController.php
Normal file
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use const App\Http\Controllers\LLAVE_VERSION_APLICACION;
|
||||
use const App\Http\Controllers\VERSION_APLICACION;
|
||||
use App\Http\Requests\LoginRequest;
|
||||
use App\Http\Requests\TokenFirebaseRequest;
|
||||
use App\Mail\ResetPassword;
|
||||
use App\Models\Parametro;
|
||||
use App\Models\RolUser;
|
||||
use App\Models\TipoEmpleado;
|
||||
use App\Models\User;
|
||||
use Cartalyst\Sentinel\Checkpoints\NotActivatedException;
|
||||
use Cartalyst\Sentinel\Checkpoints\ThrottlingException;
|
||||
use Cartalyst\Sentinel\Native\Facades\Sentinel;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
use Tymon\JWTAuth\Exceptions\JWTException;
|
||||
use Tymon\JWTAuth\Facades\JWTAuth;
|
||||
use Log;
|
||||
use Auth;
|
||||
|
||||
class AuthenticateController extends Controller
|
||||
{
|
||||
public function getAccessToken(LoginRequest $request)
|
||||
{
|
||||
|
||||
$credentials = $request->only('email', 'password');
|
||||
$dispositivo_id = $request->input('dispositivo_id', NULL);
|
||||
$version_apk = $request->input('version_apk', false);
|
||||
$version_parametro = Parametro::where('llave',LLAVE_VERSION_APLICACION)->first();
|
||||
|
||||
|
||||
try {
|
||||
|
||||
$usuario = User::where('email', $credentials['email'])->first();
|
||||
|
||||
|
||||
if ($usuario) {
|
||||
$tipo = TipoEmpleado::where('id', $usuario->tipo_empleado_id)->first();
|
||||
|
||||
if (!$tipo->login) {
|
||||
return response()->forbidden('No cuentas con los suficientes permisos para acceder a este módulo.');
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
if (!$user = Sentinel::forceAuthenticate($credentials)) {
|
||||
return response()->unauthorized('Usuario y/o contraseña incorrectas.');
|
||||
}
|
||||
} catch (ThrottlingException $e) {
|
||||
return response()->tooManyAttempts('too_many_attempts');
|
||||
}
|
||||
|
||||
$token = JWTAuth::attempt($credentials);
|
||||
|
||||
if (!$token) {
|
||||
return response()->unauthorized('Usuario y/o contraseña incorrectas.');
|
||||
}
|
||||
|
||||
$application = $request->header('Application');
|
||||
|
||||
if ($application == 'MOVIL' && (!$version_apk || $version_apk != $version_parametro->valor)){
|
||||
return response()->unauthorized('Existe una nueva versión disponible, contacta con tu supervisor.');
|
||||
}
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
$role_id = RolUser::where('user_id', $user->id)->first();
|
||||
$role = Sentinel::findRoleById($role_id->role_id);
|
||||
|
||||
$this->validarAplicacion($application, $role);
|
||||
|
||||
if ($dispositivo_id != null) {
|
||||
$user->dispositivo_id = $dispositivo_id;
|
||||
$user->update();
|
||||
}
|
||||
|
||||
return response()->success(compact('user', 'token', 'role'));
|
||||
|
||||
|
||||
} catch (JWTException $e) {
|
||||
// something went wrong whilst attempting to encode the token
|
||||
return response()->json(['error' => 'could_not_create_token'], 500);
|
||||
|
||||
} catch (NotActivatedException $e) {
|
||||
|
||||
return response()->badRequest($e->getMessage());
|
||||
} catch (\Exception $e) {
|
||||
|
||||
if ($e->getCode() == 400) {
|
||||
return response()->badRequest($e->getMessage());
|
||||
}
|
||||
|
||||
if ($e->getCode() == 401) {
|
||||
return response()->unauthorized($e->getMessage());
|
||||
}
|
||||
|
||||
if ($e->getCode() == 403) {
|
||||
return response()->forbidden($e->getMessage());
|
||||
}
|
||||
|
||||
if ($e->getCode() == 404) {
|
||||
return response()->notFound($e->getMessage());
|
||||
}
|
||||
|
||||
if ($e->getCode() == 422) {
|
||||
return response()->unprocessable('Error', [$e->getMessage()]);
|
||||
}
|
||||
|
||||
return response()->json(['error' => $e->getMessage()], $e->getCode());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function validarAplicacion($application, $role)
|
||||
{
|
||||
|
||||
if (!$application)
|
||||
throw new \Exception('El header Application es obligatorio.', 400);
|
||||
|
||||
|
||||
if (strtoupper($application) == 'MOVIL') {
|
||||
|
||||
if (!$role->movil) {
|
||||
throw new \Exception('No cuentas con los suficientes permisos para acceder a este módulo.', 403);
|
||||
}
|
||||
|
||||
} elseif (strtoupper($application) == 'WEB') {
|
||||
|
||||
if (!$role->web) {
|
||||
throw new \Exception('No cuentas con los suficientes permisos para acceder a este módulo.', 403);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Actualizar json token web
|
||||
* Retorna un nuevo token de acceso **JWT**
|
||||
*
|
||||
* @param App\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function refreshAccessToken(Request $request)
|
||||
{
|
||||
|
||||
$token = JWTAuth::parseToken()->refresh();
|
||||
|
||||
return response()->success(compact('token'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Recuperar Contraseña
|
||||
* @param App\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function recoverPassword(Request $request)
|
||||
{
|
||||
$email = $request->input('email', false);
|
||||
|
||||
$user = User::where('email', $email)->first();
|
||||
|
||||
if (!$user) {
|
||||
return response()->unprocessable('Error', ['El usuario no se encuentra disponible.']);
|
||||
}
|
||||
|
||||
$newpass = str_random(4);
|
||||
$newpass = strtolower($newpass);
|
||||
$user->password = bcrypt($newpass);
|
||||
$user->solicitar = 1;
|
||||
$user->save();
|
||||
$user['nueva'] = $newpass;
|
||||
Mail::to($email)->send(new ResetPassword($user));
|
||||
$mensaje = "Acabamos de enviar un correo electrónico con su contraseña.";
|
||||
|
||||
return response()->success(['result' => $mensaje]);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Actualizar Contraseña
|
||||
* @param App\Http\Request $request
|
||||
* @return \Illuminate\Http\Response
|
||||
*/
|
||||
public function updatePassword(Request $request)
|
||||
{
|
||||
$user = Auth::user();
|
||||
|
||||
$data = $request->only([
|
||||
'old_password',
|
||||
'password',
|
||||
'password_confirm'
|
||||
]);
|
||||
|
||||
$current_password = Auth::attempt(['email' => $user->email, 'password' => $data['old_password']]);
|
||||
|
||||
if ($current_password) {
|
||||
if ($data['password'] == $data['password_confirm']) {
|
||||
$user->password = bcrypt($data['password']);
|
||||
$user->solicitar = 0;
|
||||
$user->update();
|
||||
return response()->success(['result' => 'Contraseña actualizada correctamente']);
|
||||
} else {
|
||||
$msg = 'Las contraseñas no coinciden.';
|
||||
return response()->unprocessable('Error', [$msg]);
|
||||
}
|
||||
} else {
|
||||
return response()->unprocessable('Error', ['Contraseña actual incorrecta.']);
|
||||
}
|
||||
}
|
||||
|
||||
public function tokenFirebase(TokenFirebaseRequest $request)
|
||||
{
|
||||
|
||||
$user = Auth::user();
|
||||
|
||||
$data = $request->only(['token_firebase']);
|
||||
|
||||
User::where('id', $user->id)->first()->update($data);
|
||||
|
||||
return response()->success(['result' => 'ok']);
|
||||
}
|
||||
}
|
||||
32
app/Http/Controllers/Auth/ForgotPasswordController.php
Normal file
32
app/Http/Controllers/Auth/ForgotPasswordController.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
|
||||
|
||||
class ForgotPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset emails and
|
||||
| includes a trait which assists in sending these notifications from
|
||||
| your application to your users. Feel free to explore this trait.
|
||||
|
|
||||
*/
|
||||
|
||||
use SendsPasswordResetEmails;
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
}
|
||||
39
app/Http/Controllers/Auth/LoginController.php
Normal file
39
app/Http/Controllers/Auth/LoginController.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\AuthenticatesUsers;
|
||||
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Login Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles authenticating users for the application and
|
||||
| redirecting them to your home screen. The controller uses a trait
|
||||
| to conveniently provide its functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
use AuthenticatesUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/home';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
}
|
||||
}
|
||||
71
app/Http/Controllers/Auth/RegisterController.php
Normal file
71
app/Http/Controllers/Auth/RegisterController.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\User;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use Illuminate\Foundation\Auth\RegistersUsers;
|
||||
|
||||
class RegisterController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Register Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles the registration of new users as well as their
|
||||
| validation and creation. By default this controller uses a trait to
|
||||
| provide this functionality without requiring any additional code.
|
||||
|
|
||||
*/
|
||||
|
||||
use RegistersUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after registration.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/home';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a validator for an incoming registration request.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \Illuminate\Contracts\Validation\Validator
|
||||
*/
|
||||
protected function validator(array $data)
|
||||
{
|
||||
return Validator::make($data, [
|
||||
'name' => 'required|string|max:255',
|
||||
'email' => 'required|string|email|max:255|unique:users',
|
||||
'password' => 'required|string|min:6|confirmed',
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a new user instance after a valid registration.
|
||||
*
|
||||
* @param array $data
|
||||
* @return \App\User
|
||||
*/
|
||||
protected function create(array $data)
|
||||
{
|
||||
return User::create([
|
||||
'name' => $data['name'],
|
||||
'email' => $data['email'],
|
||||
'password' => bcrypt($data['password']),
|
||||
]);
|
||||
}
|
||||
}
|
||||
39
app/Http/Controllers/Auth/ResetPasswordController.php
Normal file
39
app/Http/Controllers/Auth/ResetPasswordController.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Foundation\Auth\ResetsPasswords;
|
||||
|
||||
class ResetPasswordController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password Reset Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller is responsible for handling password reset requests
|
||||
| and uses a simple trait to include this behavior. You're free to
|
||||
| explore this trait and override any methods you wish to tweak.
|
||||
|
|
||||
*/
|
||||
|
||||
use ResetsPasswords;
|
||||
|
||||
/**
|
||||
* Where to redirect users after resetting their password.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/home';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user