/**
  * MaintenanceLibTest::testStatus()
  *
  * @return void
  */
 public function testStatus()
 {
     $status = $this->Maintenance->isMaintenanceMode();
     $this->assertFalse($status);
     $this->Maintenance->setMaintenanceMode(0);
     $status = $this->Maintenance->isMaintenanceMode();
     $this->assertTrue($status);
     $this->Maintenance->setMaintenanceMode(1);
     $status = $this->Maintenance->isMaintenanceMode();
     $this->assertTrue($status);
     $content = file_get_contents(TMP . 'maintenance.txt');
     $this->assertWithinRange(time() + MINUTE, $content, 2);
 }
 /**
  * @param \Cake\Http\ServerRequest $request The request.
  * @param \Cake\Network\Response $response The response.
  * @param callable $next The next middleware to call.
  * @return \Psr\Http\Message\ResponseInterface A response.
  */
 public function __invoke(ServerRequestInterface $request, ResponseInterface $response, $next)
 {
     $ip = $request->clientIp();
     $Maintenance = new Maintenance();
     if (!$Maintenance->isMaintenanceMode($ip)) {
         return $next($request, $response);
     }
     $response = $this->build($response);
     return $response;
 }
 /**
  * MaintenanceMode::beforeDispatch()
  *
  * @param \Cake\Event\Event $event
  * @return \Cake\Network\Response|null
  */
 public function beforeDispatch(Event $event)
 {
     /* @var \Cake\Http\ServerRequest $request */
     $request = $event->data['request'];
     $ip = $request->clientIp();
     $Maintenance = new Maintenance();
     if (!$Maintenance->isMaintenanceMode($ip)) {
         return null;
     }
     $body = __d('setup', 'Maintenance work');
     $body = $this->_body();
     $event->data['response']->header('Retry-After', HOUR);
     $event->data['response']->statusCode(503);
     $event->data['response']->body($body);
     $event->stopPropagation();
     return $event->data['response'];
 }