/**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $current = \Route::current();
     $prefix = $current->getPrefix();
     if ($prefix == "broadcaster/services") {
         if (\Request::is('broadcaster/services/news*')) {
             $model = "news";
         } else {
             if (\Request::is('broadcaster/services/channel*')) {
                 $model = "channel";
             } else {
                 if (\Request::is('broadcaster/services/vod*')) {
                     $model = "vod";
                 } else {
                     return $next($request);
                 }
             }
         }
         if ($model) {
             if (!$this->broadcasterResource->hasService($model)) {
                 return response(['error' => ['description' => 'No service available']], 401);
             }
         }
         $params = $current->parameters();
         if ($params) {
             if ($this->broadcasterResource->canAccess($model, $params)) {
                 return $next($request);
             } else {
                 return response(['error' => ['code' => 'UNAUTHORIZED', 'description' => 'You are not authorized to access this resource.']], 401);
             }
         }
     }
     return $next($request);
 }
Example #2
0
 public function handle($request, Closure $next, $guard = null)
 {
     \App::setLocale(config('gtcmslang.defaultAdminLocale'));
     $showLoginMessage = true;
     if (config('gtcms.adminAutoLogin') && \Auth::guest()) {
         $user = User::where('role', 'admin')->first();
         \Auth::login($user);
         $showLoginMessage = false;
     }
     $allowedUserRoles = config('gtcms.allowedUserRoles');
     if (\Auth::guest() || !in_array(\Auth::user()->role, $allowedUserRoles)) {
         if (\Route::current()->uri() != "admin/login") {
             if (\Request::ajax() && \Request::get('getIgnore_isAjax')) {
                 $data = array('success' => false, 'message' => "Session timeout", 'redirectToLogin' => true);
                 return \Response::json($data);
             } else {
                 return \Redirect::to('/admin/login');
             }
         }
     } else {
         if (\Route::current()->uri() == "admin/login") {
             if ($showLoginMessage) {
                 MessageManager::setError(trans('gtcms.alreadyLoggedIn'));
             }
             return \Redirect::to("/admin");
         }
     }
     if (\Session::get('accessDenied')) {
         if (\Route::currentRouteName() != "restricted") {
             \Session::put('accessDenied', true);
             return \Redirect::to('/access-denied');
         }
     } else {
         if (\Route::currentRouteName() == "restricted") {
             MessageManager::setError(trans('gtcms.accessGranted'));
             \Session::put('accessDenied', false);
             return \Redirect::to("/admin");
         }
     }
     return $next($request);
 }
 /**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $authorized = false;
     // Default to protect all routes.
     $errorCode = 0;
     // Default to something bogus...
     $method = null;
     $path = null;
     $actionName = null;
     $user = null;
     $username = null;
     $guest = false;
     // Get current route from Laravel.
     $laravelRoute = LaravelRoute::current();
     // If not set we will fallback to error HTTP 500. This should never occur. TODO: remove this check...
     if (isset($laravelRoute)) {
         // Get route info.
         $method = $laravelRoute->getMethods()[0];
         $path = $laravelRoute->getPath();
         $actionName = $laravelRoute->getActionName();
         // Get current user or set guest to true for unauthenticated users.
         if ($this->auth->check()) {
             $user = $this->auth->user();
             $username = $user->username;
         } elseif ($this->auth->guest()) {
             $guest = true;
         }
         // AuthController and PasswordController are exempt from authorization.
         // TODO: Get list of controllers exempt from config.
         if (str_contains($actionName, 'AuthController@') || str_contains($actionName, 'PasswordController@')) {
             $authorized = true;
         } elseif (!$guest && isset($user) && 'root' == $user->username) {
             $authorized = true;
         } elseif (!$guest && isset($user) && $user->hasRole('admins')) {
             $authorized = true;
         } else {
             //                if ($user->enabled)
             //                {
             // Get application route based on info from Laravel route.
             $appRoute = AppRoute::ofMethod($method)->ofActionName($actionName)->ofPath($path)->enabled()->with('permission')->first();
             // If found, proceed with authorization
             if (isset($appRoute)) {
                 // Permission set for route.
                 if (isset($appRoute->permission)) {
                     // Route is open to all.
                     // TODO: Get 'open-to-all' role name from config, and replace all occurrences.
                     if ('open-to-all' == $appRoute->permission->name) {
                         $authorized = true;
                     } elseif ($guest && 'guest-only' == $appRoute->permission->name) {
                         $authorized = true;
                     } elseif (!$guest && isset($user) && $user->enabled && 'basic-authenticated' == $appRoute->permission->name) {
                         $authorized = true;
                     } elseif (!$guest && isset($user) && $user->enabled && $user->can($appRoute->permission->name)) {
                         $authorized = true;
                     } else {
                         Log::error("Authorization denied for request path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "], guest [" . $guest . "], username [" . $username . "].");
                         $errorCode = 403;
                     }
                 } else {
                     Log::error("No permission set for the requested route, path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "], guest [" . $guest . "], username [" . $username . "].");
                     $errorCode = 403;
                 }
             } else {
                 Log::error("No application route found in AuthorizeRoute module for request path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "].");
                 $errorCode = 403;
             }
             // if ( isset($appRoute) )
             //                }
             //                else
             //                {
             //                    return redirect( route('logout') );
             //                }
         }
     }
     // If authorize, proceed
     if ($authorized) {
         return $next($request);
         // Else if error code was set abort with that.
     } elseif (0 != $errorCode) {
         if (!$guest && isset($user) && !$user->enabled) {
             Log::error("User [" . $user->username . "] disabled, forcing logout.");
             return redirect(route('logout'));
         } else {
             abort($errorCode);
         }
         // Lastly Fallback to error HTTP 500: Internal server error. We should not get to this!
     } else {
         Log::error("Server error while trying to authorize route, request path [" . $request->path() . "], method [" . $method . "] and action name [" . $actionName . "].");
         abort(500);
     }
 }