<?php

  /*
  |--------------------------------------------------------------------------
  | Application & Route Filters
  |--------------------------------------------------------------------------
  |
  | Below you will find the "before" and "after" events for the application
  | which may be used to do any work before or after a request into your
  | application. Here you may also register your custom route filters.
  |
  */

  App::before(function ($request) {

  });


  App::after(function ($request, $response) {

  });

  /*
  |--------------------------------------------------------------------------
  | Authentication Filters
  |--------------------------------------------------------------------------
  |
  | The following filters are used to verify that the user of the current
  | session is logged into this application. The "basic" filter easily
  | integrates HTTP Basic authentication for quick, simple checking.
  |
  */

  Route::filter('xss.disable', function () {
    Config::set('xssinput::xssinput.xss_filter_all_inputs', FALSE);
  });

  Route::filter('backend.auth', function () {
    if (Auth::backend()->guest()) {
      if (Request::format() == 'json') {
        return Response::json(
          [
            "error"   => "not_logged",
            "message" => translation("response.not_logged")
          ], 401
        );
      } else {
        return Redirect::guest('/admin/login');
      }

    }
  });

  Route::filter('backend.auth.permission', function () {
    $args = func_get_args();
    $args = array_slice($args, 2);

    if (!Auth::backend()->user()->hasPermission($args)) {
      if (Request::format() == 'json') {
        return Response::json(
          [
            "error"   => "forbidden",
            "message" => translation("response.forbidden")
          ], 403
        );
      } else {
        return Response::view('admin/error', ['msg' => Lang::get('http_status.403')], 403);
      }
    }
  });


  Route::filter('auth.basic', function () {
    return Auth::basic();
  });

  /*
  |--------------------------------------------------------------------------
  | Guest Filter
  |--------------------------------------------------------------------------
  |
  | The "guest" filter is the counterpart of the authentication filters as
  | it simply checks that the current user is not logged in. A redirect
  | response will be issued if they are, which you may freely change.
  |
  */

  Route::filter('guest', function () {
    if (Auth::check()) return Redirect::to('/');
  });

  /*
  |--------------------------------------------------------------------------
  | CSRF Protection Filter
  |--------------------------------------------------------------------------
  |
  | The CSRF filter is responsible for protecting your application against
  | cross-site request forgery attacks. If this special token in a user
  | session does not match the one given in this request, we'll bail.
  |
  */

  Route::filter('csrf', function () {

    $token = Request::ajax() ? Request::header('X-CSRF-Token') : Input::get('_token');

    if (Session::token() !== $token) {
      throw new Illuminate\Session\TokenMismatchException;
    }

  });
