paragonie / airship

Secure Content Management for the Modern Web - "The sky is only the beginning"
https://cspr.ng
Other
418 stars 41 forks source link

Non-Blocking I/O Servers Support ( Swoole, ReactPHP, Amp ... etc ) #205

Open azjezz opened 5 years ago

azjezz commented 5 years ago

i intend to follow up with PR next week, first i have some questions :

for this i suggest having 1 class AirShip\Networking\Server and multiple drivers ( e.g : AirShip\Networking\Server\Driver\SwooleDriver, AirShip\Networking\Server\Driver\AmpDriver .. etc )

azjezz commented 5 years ago

this is an issue

i think first we need few changes before supporting Swoole or any other non-blocking IO server ( such ReactPHP or Amp ) :

  1. new session interface instead of ParagonIE\Cookie\Session
  2. use dflydev/fig-cookies instead of ParagonIE\Cookie\Cookie
    • we can build a wrapper around this for encryption by example
  3. PSR-15 support :
    • MIDDLEWARES ARE COOL !
    • clean the mess in public/index.php
      • error handling and enabling debug can be done in an early middleware
  4. PSR-6 support :

what do you think @paragonie-scott

azjezz commented 5 years ago

things that can done in a middleware :

  1. AirShip\Networking\Middleware\DebugMiddleware
  2. AirShip\Networking\Middleware\ErrorLoggingMiddleware
  3. AirShip\Networking\Middleware\AutoUpdateMiddleware
  4. AirShip\Networking\Middleware\SessionStartMiddleware
  5. AirShip\Networking\Middleware\SessionCanaryMiddleware
  6. AirShip\Networking\Middleware\CSPMiddleware
  7. AirShip\Networking\Middleware\HPKPMiddleware
  8. AirShip\Networking\Middleware\StaticCacheMiddleware

... and much more

this will result in much cleaner setup and bring us closer to using Servers such as Swoole, ReactPHP, Amp .. etc.

PeeHaa commented 5 years ago

@azjezz how would you envision async support as no part of airship is build with non blocking support in mind?

azjezz commented 5 years ago

@PeeHaa the only problem i currently see is the usage of global variables and the session extension, but for now I'm waiting for @paragonie-scott opinion on this.

the usage of global variables $_GET and $_POST can be avoided by using the PSR7 request, $_COOKIES can be avoided by using dflydev/fig-cookies instead of ParagonIE\Cookie\Cookie and we need a new session implementation, one that doesn't use the session extension, something like this : zendframework/zend-expressive-session-cache