/**
  * Handle an incoming request.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Closure  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $key = $request->input('key');
     if (empty($key) || ApiKey::where('api_key', $key)->count() !== 1) {
         return response()->json(array('error' => 'Requires a valid key.'), 401);
         // unauthroized
     }
     return $next($request);
 }
 public function getToken($token)
 {
     return ApiKey::where('key', $token)->first();
 }
Route::get('/home', 'HomeController@index');
Route::controllers(['auth' => 'Auth\\AuthController', 'password' => 'Auth\\PasswordController']);
//api routes
Route::group(['prefix' => 'v1', 'before' => 'auth.api_key'], function () {
    Route::get('/data', 'ApiController@data');
    Route::get('/variables', 'ApiController@variables');
    Route::get('/entities', 'ApiController@entities');
});
Route::get('api', 'ApiController@index');
Route::filter('auth.api_key', function ($route, $request) {
    $apiKey = Input::has('api_key') ? Input::get('api_key') : '';
    $errorMessage = '';
    if (empty($apiKey)) {
        $errorMessage = 'All API calls have to be made with an api_key paramater.';
    } else {
        $validKeys = ApiKey::where('value', $apiKey)->get();
        if ($validKeys->isEmpty()) {
            $errorMessage = 'Invalid API key.';
        }
    }
    if (!empty($errorMessage)) {
        $response = Response::json(['error' => true, 'message' => $errorMessage, 'code' => 401], 401);
        $response->header('Content-Type', 'application/json');
        return $response;
    }
});
Route::get('/logout', ['as' => 'logout', 'uses' => 'Auth\\AuthController@getLogout']);
Route::group(['middleware' => 'auth'], function () {
    Route::resource('entities', 'EntitiesController');
    Route::resource('datasources', 'DatasourcesController');
    Route::resource('datasets', 'DatasetsController');
 /**
  * Used to delete the api key.
  * 
  * @return json  Empty response on successful or error on failure
  */
 public function delete()
 {
     //must be ajax
     if (Request::ajax()) {
         $user = Auth::user();
         $userId = $user->id;
         //users should only have one api key
         $apiKeyModel = ApiKey::where('user_id', $userId)->first();
         $deleted = $apiKeyModel->delete();
         if ($deleted) {
             return response()->json();
         } else {
             return response()->json(array('error' => 'Unable to delete key'), 500);
         }
     }
 }
 /** Удаление ключа **/
 public static function deleteKey($id)
 {
     ApiKey::where('id', $id)->delete();
 }