/**
  * Create a new file driven handler instance.
  *
  * @param \Illuminate\Filesystem\Filesystem $files
  * @param React\EventLoop\LoopInterface $loop
  * @param string $path
  * 
  * @return void
  */
 public function __construct(Factory $factory, LoopInterface $loop, Server $server, $lifetime)
 {
     $this->factory = $factory;
     $this->lifetime = $lifetime;
     $this->server = $server;
     $this->loop = $loop;
     // PING redis connection every 5 minutes
     // and try to reconnect on connection error
     $this->timer = $loop->addPeriodicTimer(60 * 1, function () use($server) {
         $this->promise->then(function ($client) use($server) {
             $client->PING()->then(function ($pong) use($server) {
                 $server->log('Redis server responded ping with: %s', [$pong]);
                 return $pong == 'PONG';
             }, function ($e) {
                 return $this->reconnectByError($e);
             });
         });
     });
     // server statistics for redis connection
     $this->loop->addPeriodicTimer(60 * 30, function () {
         $this->server->log('Server statistics to the last 30 minutes.');
         $this->server->log('Best time of %fs, poor time of %fs and a average of %f seconds for total %d requests.', array_values($this->statistics));
         $this->statistics = array('best' => 0, 'poor' => 0, 'avg' => 0, 'total' => 0);
     });
 }
Exemple #2
0
 /**
  * 
  * 
  */
 protected function updateCredentials($response, $callback)
 {
     $session = $response->originRequest()->session();
     $url = $this->server->get('api_url') . $this->server['config']->get('grant_path');
     $data = json_encode(array('client_id' => $this->server['config']->get('client_id'), 'client_secret' => $this->server['config']->get('client_secret'), 'refresh_token' => $session->get('oauth_grant.refresh_token'), 'grant_type' => 'refresh_token'));
     $request = $this->client->request('POST', $url, array('content-type' => 'application/json;charset=UTF-8', 'content-length' => strlen($data)));
     $request->on('response', function ($clientResponse) use($response, $request, $callback, $session) {
         if ($clientResponse->getCode() != 200) {
             $clientResponse->on('data', function ($data) use($clientResponse, $request, $callback, $session) {
                 $session->forget('oauth_grant');
                 $this->server->log('Não foi possível autenticar o usuário utilizando o refresh token (%s).', [$data]);
             });
             return $callback($clientResponse);
         }
         $clientResponse->on('data', function ($data) {
             $this->bufferData($data);
         });
         $clientResponse->on('end', function ($data) use($clientResponse, $response, $callback) {
             $data = $this->getDataEnd();
             $this->processResponse($response, json_decode($data, true));
             $callback($clientResponse);
         });
     });
     $request->end($data);
 }
Exemple #3
0
 /**
  * Catch a proxied request
  * 
  * @param Irto\OAuth2Proxy\ProxyRequest $request
  * @param Closure $next
  * 
  * @throws Exception
  * 
  * @return Irto\OAuth2Proxy\ProxyRequest
  */
 public function request($request, Closure $next)
 {
     $response = $request->futureResponse();
     $request->session()->start()->then(function () use($response, $request, $next) {
         $config = $this->server['config']['session'];
         $session = $request->session();
         $response->setCookie(new Cookie($session->getName(), $session->getId(), Carbon::now()->addMinutes($config['lifetime']), $config['path'], $config['domain'], array_get($config, 'secure', false)));
         try {
             return $next($request);
         } catch (\Exception $e) {
             $session->save();
             $this->server->catchException($e, $response);
         }
     }, function ($e) use($response) {
         return $this->server->catchException($e, $response);
     });
 }
Exemple #4
0
 /**
  * Ends request and dispatch
  * 
  * @return void
  */
 public function dispatch()
 {
     $method = $this->original->getMethod();
     $url = $this->server->get('api_url') . $this->getPath();
     $headers = Arr::except($this->headers()->all(), ['cookie']);
     $this->request = $this->createClientRequest($method, $url, $headers);
     $this->request->end($this->getBufferEnd());
 }
 /**
  * Connect to server and retrun promise with client.
  * 
  * @return \React\Promise\PromiseInterface
  */
 public function createClient()
 {
     return $this->factory->createClient($this->savePath)->then(function ($client) {
         $this->server->log('Connected with success to Redis server.');
         return $client;
     }, function ($e) {
         $this->server->log('Application got an error on try to connect with Redis server: %s.', [$e->getMessage()]);
         throw $e;
     });
 }