241 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			241 lines
		
	
	
		
			8.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers\Auth;
 | |
| 
 | |
| use App\Http\Controllers\Controller;
 | |
| use App\Providers\RouteServiceProvider;
 | |
| use Illuminate\Foundation\Auth\AuthenticatesUsers;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Http\Response;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use App\Helper;
 | |
| use App\Models\Users;
 | |
| use Illuminate\Support\Facades\Auth;
 | |
| use Illuminate\Http\JsonResponse;
 | |
| use Illuminate\Validation\ValidationException;
 | |
| use App\Models\UserLogs;
 | |
| 
 | |
| 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 = RouteServiceProvider::HOME;
 | |
| 
 | |
|     /**
 | |
|      * Create a new controller instance.
 | |
|      *
 | |
|      * @return void
 | |
|      */
 | |
|     public function __construct()
 | |
|     {
 | |
|         $this->middleware("guest")->except("logout");
 | |
|     }
 | |
| 
 | |
|     public function username()
 | |
|     {
 | |
|         return "email";
 | |
|     }
 | |
| 
 | |
|     // public function login(Request $req)
 | |
|     // {
 | |
|     //     $this->validateLogin($req);
 | |
| 
 | |
|     //     if (method_exists($this, "hasTooManyLoginAttempts") && $this->hasTooManyLoginAttempts($req)) {
 | |
|     //         $this->fireLockoutEvent($req);
 | |
| 
 | |
|     //         return $this->sendLockoutResponse($req);
 | |
|     //     }
 | |
| 
 | |
|     //     if ($this->guard()->validate($this->credentials($req))) {
 | |
|     //         $user = $this->guard()->getLastAttempted();
 | |
| 
 | |
|     //         if ($user->dlt != null) {
 | |
|     //             $this->incrementLoginAttempts($req);
 | |
|     //             throw ValidationException::withMessages([
 | |
|     //                 $this->username() => [trans("auth.failed")],
 | |
|     //             ]);
 | |
|     //         }
 | |
|     //         if ($user->status != Users::STATUS_ACTIVE) {
 | |
|     //             $this->incrementLoginAttempts($req);
 | |
| 
 | |
|     //             throw ValidationException::withMessages([
 | |
|     //                 $this->username() => __("Your account not active, please contact admin."),
 | |
|     //             ]);
 | |
|     //         }
 | |
| 
 | |
|     //         if ($this->attemptLogin($req)) {
 | |
|     //             return $this->sendLoginResponse($req);
 | |
|     //         }
 | |
|     //     }
 | |
| 
 | |
|     //     $this->incrementLoginAttempts($req);
 | |
| 
 | |
|     //     return $this->sendFailedLoginResponse($req);
 | |
|     // }
 | |
|     public function login(Request $req)
 | |
|     {
 | |
|         $this->validateLogin($req);
 | |
| 
 | |
|         if (method_exists($this, "hasTooManyLoginAttempts") && $this->hasTooManyLoginAttempts($req)) {
 | |
|             $this->fireLockoutEvent($req);
 | |
|             return $this->sendLockoutResponse($req);
 | |
|         }
 | |
| 
 | |
|         // Cari user yang belum dihapus (dlt == null)
 | |
|         $user = Users::where("email", $req->email)
 | |
|             ->whereNull("dlt")
 | |
|             ->first();
 | |
| 
 | |
|         if (!$user || !\Hash::check($req->password, $user->password)) {
 | |
|             $this->incrementLoginAttempts($req);
 | |
|             return $this->sendFailedLoginResponse($req);
 | |
|         }
 | |
| 
 | |
|         if ($user->status != Users::STATUS_ACTIVE) {
 | |
|             $this->incrementLoginAttempts($req);
 | |
|             throw ValidationException::withMessages([
 | |
|                 $this->username() => __("Your account not active, please contact admin."),
 | |
|             ]);
 | |
|         }
 | |
| 
 | |
|         // Login manual
 | |
|         $this->guard()->login($user);
 | |
| 
 | |
|         return $this->sendLoginResponse($req);
 | |
|     }
 | |
| 
 | |
|     protected function validateLogin(Request $req)
 | |
|     {
 | |
|         $this->validate($req, [
 | |
|             $this->username() => "required|string|email",
 | |
|             "password" => "required|string",
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     protected function sendLoginResponse(Request $req)
 | |
|     {
 | |
|         $req->session()->regenerate();
 | |
| 
 | |
|         $this->clearLoginAttempts($req);
 | |
| 
 | |
|         if ($response = $this->authenticated($req, $this->guard()->user())) {
 | |
|             return $response;
 | |
|         }
 | |
| 
 | |
|         // return $req->wantsJson()
 | |
|         //     ? new JsonResponse([], 204)
 | |
|         //     : redirect()->intended($this->redirectPath());
 | |
|         // return $req->wantsJson()
 | |
|         //     ? new JsonResponse([], 204)
 | |
|         //     : redirect(route('view_dashboard'));
 | |
| 		$log = [
 | |
| 			"module" => "Auth",
 | |
| 			"action" => "Login",
 | |
| 			"desc" => "User login",
 | |
| 		];
 | |
| 		UserLogs::insert(Auth::user()->id, $log);
 | |
| 
 | |
|         if ($req->wantsJson()) {
 | |
|             return new JsonResponse([], 204);
 | |
|         } else {
 | |
|             $user = Auth::user();
 | |
|             if ($user->role == Users::ROLE_ADMIN) {
 | |
|                 return redirect(route("view_dashboard"));
 | |
|             } elseif ($user->role == Users::ROLE_VENDOR) {
 | |
|                 return redirect(route("view_dashboard"));
 | |
|             } elseif ($user->role == Users::ROLE_CHECKER) {
 | |
|                 return redirect(route("view_user_checker"));
 | |
|             } elseif ($user->role == Users::ROLE_CLIENT_ADMIN) {
 | |
|                 return redirect(route("view_user_client_transaction_add") . "?rdl=1");
 | |
|             } elseif ($user->role == Users::ROLE_SPECIAL_TRACKING) {
 | |
|                 return redirect(route("view_dashboard"));
 | |
|             } elseif ($user->role == Users::ROLE_FINANCE) {
 | |
|                 return redirect(route("view_keuangan_payment"));
 | |
|             } else {
 | |
|                 $this->guard()->logout();
 | |
|                 $req->session()->invalidate();
 | |
|                 $req->session()->regenerateToken();
 | |
|                 // return redirect(route('login'));
 | |
|                 return redirect(route("login"));
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function logout(Request $req)
 | |
|     {
 | |
|         $user = Auth::user();
 | |
| 		$log = [
 | |
| 			"module" => "Auth",
 | |
| 			"action" => "Logout",
 | |
| 			"desc" => "User logout",
 | |
| 		];
 | |
| 		UserLogs::insert(Auth::user()->id, $log);
 | |
| 
 | |
| 		if ($user->role == Users::ROLE_ADMIN) {
 | |
|             $this->guard()->logout();
 | |
|             $req->session()->invalidate();
 | |
|             $req->session()->regenerateToken();
 | |
|             if ($response = $this->loggedOut($req)) {
 | |
|                 return $response;
 | |
|             }
 | |
|             return $req->wantsJson() ? new JsonResponse([], 204) : redirect(route("login_admin"));
 | |
|         } elseif ($user->role == Users::ROLE_FINANCE) {
 | |
|             $this->guard()->logout();
 | |
|             $req->session()->invalidate();
 | |
|             $req->session()->regenerateToken();
 | |
|             if ($response = $this->loggedOut($req)) {
 | |
|                 return $response;
 | |
|             }
 | |
|             return $req->wantsJson() ? new JsonResponse([], 204) : redirect(route("login_admin"));
 | |
|         } elseif ($user->role == Users::ROLE_VENDOR) {
 | |
|             $this->guard()->logout();
 | |
|             $req->session()->invalidate();
 | |
|             $req->session()->regenerateToken();
 | |
|             if ($response = $this->loggedOut($req)) {
 | |
|                 return $response;
 | |
|             }
 | |
|             return $req->wantsJson() ? new JsonResponse([], 204) : redirect(route("login_vendor"));
 | |
|         } elseif ($user->role == Users::ROLE_CHECKER) {
 | |
|             $this->guard()->logout();
 | |
|             $req->session()->invalidate();
 | |
|             $req->session()->regenerateToken();
 | |
|             if ($response = $this->loggedOut($req)) {
 | |
|                 return $response;
 | |
|             }
 | |
|             return $req->wantsJson() ? new JsonResponse([], 204) : redirect(route("login_checker"));
 | |
|         } elseif ($user->role == Users::ROLE_CLIENT_ADMIN) {
 | |
|             $this->guard()->logout();
 | |
|             $req->session()->invalidate();
 | |
|             $req->session()->regenerateToken();
 | |
|             if ($response = $this->loggedOut($req)) {
 | |
|                 return $response;
 | |
|             }
 | |
|             return $req->wantsJson() ? new JsonResponse([], 204) : redirect(route("login_client"));
 | |
|         } elseif ($user->role == Users::ROLE_SPECIAL_TRACKING) {
 | |
|             $this->guard()->logout();
 | |
|             $req->session()->invalidate();
 | |
|             $req->session()->regenerateToken();
 | |
|             if ($response = $this->loggedOut($req)) {
 | |
|                 return $response;
 | |
|             }
 | |
|             return $req->wantsJson() ? new JsonResponse([], 204) : redirect(route("login_admin"));
 | |
|         }
 | |
|     }
 | |
| }
 | 
