add proxy for bnf completion and sparql request + upgrade kernel + route
authorymh <ymh.work@gmail.com>
Fri, 04 Mar 2016 19:18:28 +0100
changeset 139 8d688175513a
parent 138 3079cbf80006
child 140 f851ec12812f
add proxy for bnf completion and sparql request + upgrade kernel + route
server/src/app/Facades/GuzzleFacade.php
server/src/app/Http/Controllers/Proxy/BnfController.php
server/src/app/Http/Kernel.php
server/src/app/Http/Middleware/Authenticate.php
server/src/app/Http/Middleware/EncryptCookies.php
server/src/app/Http/Middleware/RedirectIfAuthenticated.php
server/src/app/Http/Middleware/VerifyCsrfToken.php
server/src/app/Http/routes.php
server/src/app/Providers/GuzzleServiceProvider.php
server/src/app/Providers/ViafServiceProvider.php
server/src/config/app.php
server/src/config/corpusparole.php
--- a/server/src/app/Facades/GuzzleFacade.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Facades/GuzzleFacade.php	Fri Mar 04 19:18:28 2016 +0100
@@ -6,7 +6,7 @@
 class GuzzleFacade extends Facade {
 
     protected static function getFacadeAccessor() {
-        return 'guzzle';
+        return 'Guzzle';
     }
 
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Http/Controllers/Proxy/BnfController.php	Fri Mar 04 19:18:28 2016 +0100
@@ -0,0 +1,53 @@
+<?php
+
+namespace CorpusParole\Http\Controllers\Proxy;
+
+use Guzzle;
+
+use Illuminate\Http\Request;
+
+use CorpusParole\Http\Requests;
+use CorpusParole\Http\Controllers\Controller;
+
+
+class BnfController extends Controller
+{
+
+    const HEADERS_FORWARDED = [ "host", "user-agent", "accept", "accept-language", "accept-encoding", "connection" ];
+
+    private function proxyQuery($req, $url) {
+
+        $headers = [];
+        foreach (BnfController::HEADERS_FORWARDED as $h) {
+            $headerValue = $req->header($h);
+            if($headerValue) {
+                $headers[$h] = $headerValue;
+            }
+        }
+
+        $complResp = Guzzle::get($url, ['query' => $req->all(), 'headers' => $headers]);
+
+        $resp = response((string)$complResp->getBody(), $complResp->getStatusCode());
+        foreach ($complResp->getHeaders() as $name => $values) {
+            if($name != 'Transfer-Encoding') {
+                $resp->header($name, $values);
+            }
+        }
+
+        return $resp;
+
+    }
+
+    // proxy Auto completion query for bnf
+    public function proxyAutoCompletion(Request $req) {
+        return $this->proxyQuery($req, config('corpusparole.bnf_completion_url'));
+    }
+
+    // proxy sparql query for bnf
+    public function proxySparql(Request $req) {
+
+        return $this->proxyQuery($req, config('corpusparole.bnf_query_url'));
+
+    }
+
+}
--- a/server/src/app/Http/Kernel.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Http/Kernel.php	Fri Mar 04 19:18:28 2016 +0100
@@ -6,28 +6,69 @@
 
 class Kernel extends HttpKernel
 {
+
     /**
      * The application's global HTTP middleware stack.
      *
+     * These middleware are run during every request to your application.
+     *
      * @var array
      */
     protected $middleware = [
-        'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
-        'Illuminate\Cookie\Middleware\EncryptCookies',
-        'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
-        'Illuminate\Session\Middleware\StartSession',
-        'Illuminate\View\Middleware\ShareErrorsFromSession',
-        'CorpusParole\Http\Middleware\VerifyCsrfToken',
+        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
     ];
-
+    /**
+     * The application's route middleware groups.
+     *
+     * @var array
+     */
+    protected $middlewareGroups = [
+        'web' => [
+            \CorpusParole\Http\Middleware\EncryptCookies::class,
+            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
+            \Illuminate\Session\Middleware\StartSession::class,
+            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
+            \CorpusParole\Http\Middleware\VerifyCsrfToken::class,
+        ],
+        'api' => [
+            'throttle:60,1',
+        ],
+    ];
     /**
      * The application's route middleware.
      *
+     * These middleware may be assigned to groups or used individually.
+     *
      * @var array
      */
     protected $routeMiddleware = [
-        'auth' => 'CorpusParole\Http\Middleware\Authenticate',
-        'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
-        'guest' => 'CorpusParole\Http\Middleware\RedirectIfAuthenticated',
+        'auth' => \CorpusParole\Http\Middleware\Authenticate::class,
+        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
+        'guest' => \CorpusParole\Http\Middleware\RedirectIfAuthenticated::class,
+        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
     ];
+    // /**
+    //  * The application's global HTTP middleware stack.
+    //  *
+    //  * @var array
+    //  */
+    // protected $middleware = [
+    //     // 'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
+    //     // 'Illuminate\Cookie\Middleware\EncryptCookies',
+    //     // 'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
+    //     // 'Illuminate\Session\Middleware\StartSession',
+    //     // 'Illuminate\View\Middleware\ShareErrorsFromSession',
+    //     // 'CorpusParole\Http\Middleware\VerifyCsrfToken',
+    // ];
+    //
+    // /**
+    //  * The application's route middleware.
+    //  *
+    //  * @var array
+    //  */
+    // protected $routeMiddleware = [
+    //     'auth' => 'CorpusParole\Http\Middleware\Authenticate',
+    //     'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
+    //     'guest' => 'CorpusParole\Http\Middleware\RedirectIfAuthenticated',
+    // ];
 }
--- a/server/src/app/Http/Middleware/Authenticate.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Http/Middleware/Authenticate.php	Fri Mar 04 19:18:28 2016 +0100
@@ -3,42 +3,25 @@
 namespace CorpusParole\Http\Middleware;
 
 use Closure;
-use Illuminate\Contracts\Auth\Guard;
+use Illuminate\Support\Facades\Auth;
 
 class Authenticate
 {
     /**
-     * The Guard implementation.
-     *
-     * @var Guard
-     */
-    protected $auth;
-
-    /**
-     * Create a new filter instance.
-     *
-     * @param Guard $auth
-     */
-    public function __construct(Guard $auth)
-    {
-        $this->auth = $auth;
-    }
-
-    /**
      * Handle an incoming request.
      *
-     * @param \Illuminate\Http\Request $request
-     * @param \Closure                 $next
-     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @param  string|null  $guard
      * @return mixed
      */
-    public function handle($request, Closure $next)
+    public function handle($request, Closure $next, $guard = null)
     {
-        if ($this->auth->guest()) {
-            if ($request->ajax()) {
+        if (Auth::guard($guard)->guest()) {
+            if ($request->ajax() || $request->wantsJson()) {
                 return response('Unauthorized.', 401);
             } else {
-                return redirect()->guest('auth/login');
+                return redirect()->guest('login');
             }
         }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/server/src/app/Http/Middleware/EncryptCookies.php	Fri Mar 04 19:18:28 2016 +0100
@@ -0,0 +1,17 @@
+<?php
+
+namespace CorpusParole\Http\Middleware;
+
+use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
+
+class EncryptCookies extends BaseEncrypter
+{
+    /**
+     * The names of the cookies that should not be encrypted.
+     *
+     * @var array
+     */
+    protected $except = [
+        //
+    ];
+}
--- a/server/src/app/Http/Middleware/RedirectIfAuthenticated.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Http/Middleware/RedirectIfAuthenticated.php	Fri Mar 04 19:18:28 2016 +0100
@@ -3,40 +3,22 @@
 namespace CorpusParole\Http\Middleware;
 
 use Closure;
-use Illuminate\Contracts\Auth\Guard;
-use Illuminate\Http\RedirectResponse;
+use Illuminate\Support\Facades\Auth;
 
 class RedirectIfAuthenticated
 {
     /**
-     * The Guard implementation.
-     *
-     * @var Guard
-     */
-    protected $auth;
-
-    /**
-     * Create a new filter instance.
-     *
-     * @param Guard $auth
-     */
-    public function __construct(Guard $auth)
-    {
-        $this->auth = $auth;
-    }
-
-    /**
      * Handle an incoming request.
      *
-     * @param \Illuminate\Http\Request $request
-     * @param \Closure                 $next
-     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @param  string|null  $guard
      * @return mixed
      */
-    public function handle($request, Closure $next)
+    public function handle($request, Closure $next, $guard = null)
     {
-        if ($this->auth->check()) {
-            return new RedirectResponse(url('/home'));
+        if (Auth::guard($guard)->check()) {
+            return redirect('/');
         }
 
         return $next($request);
--- a/server/src/app/Http/Middleware/VerifyCsrfToken.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Http/Middleware/VerifyCsrfToken.php	Fri Mar 04 19:18:28 2016 +0100
@@ -2,30 +2,17 @@
 
 namespace CorpusParole\Http\Middleware;
 
-use Closure;
 use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as BaseVerifier;
 
 class VerifyCsrfToken extends BaseVerifier
 {
     /**
-     * Handle an incoming request.
-     *
-     * @param \Illuminate\Http\Request $request
-     * @param \Closure                 $next
-     *
-     * @return mixed
-     */
-    public function handle($request, Closure $next)
-    {
-        return parent::handle($request, $next);
-    }
-
-    /**
      * The URIs that should be excluded from CSRF verification.
      *
      * @var array
      */
     protected $except = [
         'api/*',
+        'proxy/*'
     ];
 }
--- a/server/src/app/Http/routes.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Http/routes.php	Fri Mar 04 19:18:28 2016 +0100
@@ -11,21 +11,24 @@
 |
 */
 
-Route::get('/', 'WelcomeController@index');
+Route::group(['middleware' => ['web']], function () {
 
-Route::get('home', 'HomeController@index');
+    Route::get('/', 'WelcomeController@index');
+
+    Route::get('home', 'HomeController@index');
 
-//Route::get('bo/docs/docDetailClient', 'Bo\DocumentListController@showClient');
-Route::resource('bo/docs', 'Bo\DocumentListController');
-Route::controller('bo/docs', 'Bo\DocumentListController', [
-    'getClient' => 'bo.docs.client'
-]);
+    //Route::get('bo/docs/docDetailClient', 'Bo\DocumentListController@showClient');
+    Route::resource('bo/docs', 'Bo\DocumentListController');
+    Route::controller('bo/docs', 'Bo\DocumentListController', [
+        'getClient' => 'bo.docs.client'
+    ]);
 
 
-Route::controllers([
-//    'auth' => 'Auth\AuthController',
-    'password' => 'Auth\PasswordController',
-]);
+    Route::controllers([
+    //    'auth' => 'Auth\AuthController',
+        'password' => 'Auth\PasswordController',
+    ]);
+});
 
 /*
 |--------------------------------------------------------------------------
@@ -47,3 +50,15 @@
     Route::resource('languages', 'Api\LanguageController',
                     ['only' => ['index']]);
 });
+
+/*
+|--------------------------------------------------------------------------
+| Proxy Route
+|--------------------------------------------------------------------------
+|
+|
+*/
+Route::group(['prefix' => 'proxy', 'middleware' => 'cors'] , function() {
+    Route::get('bnf', 'Proxy\BnfController@proxyAutoCompletion');
+    Route::get('bnf-sparql', 'Proxy\BnfController@proxySparql');
+});
--- a/server/src/app/Providers/GuzzleServiceProvider.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Providers/GuzzleServiceProvider.php	Fri Mar 04 19:18:28 2016 +0100
@@ -17,7 +17,7 @@
      */
     public function register()
     {
-        $this->app->bind('guzzle', function() {
+        $this->app->bind('Guzzle', function() {
             $config = isset($this->app['config']['guzzle']) ? $this->app['config']['guzzle'] : [];
             return new Client($config);
         });
--- a/server/src/app/Providers/ViafServiceProvider.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/app/Providers/ViafServiceProvider.php	Fri Mar 04 19:18:28 2016 +0100
@@ -18,7 +18,7 @@
     public function register()
     {
         $this->app->bind('CorpusParole\Services\ViafResolverInterface', function($app) {
-            return new ViafResolver($app['guzzle']);
+            return new ViafResolver($app['Guzzle']);
         });
     }
 }
--- a/server/src/config/app.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/config/app.php	Fri Mar 04 19:18:28 2016 +0100
@@ -206,6 +206,7 @@
         'View' => 'Illuminate\Support\Facades\View',
         'Html' => 'Collective\Html\HtmlFacade',
         'Form' => 'Collective\Html\FormFacade',
+        'Guzzle' => 'CorpusParole\Facades\GuzzleFacade'
     ],
 
 ];
--- a/server/src/config/corpusparole.php	Fri Mar 04 10:08:52 2016 +0100
+++ b/server/src/config/corpusparole.php	Fri Mar 04 19:18:28 2016 +0100
@@ -98,6 +98,7 @@
     'bnf_cache_expiration' => 60*24*30,
     'bnf_max_ids' => 500,
     'bnf_query_url' => 'http://data.bnf.fr/sparql',
+    'bnf_completion_url' => 'http://data.bnf.fr/search-letter/',
 
     'bo_client_environment' => [
         "modulePrefix" => "bo-client",