auth = $auth; $this->authRequired = $authRequired; $this->showDialog = $showDialog; } function call() { $req = $this->app->request(); $uri = $req->getResourceUri(); $httpMethod = $req->getMethod(); if (is_null($this->authRequired)) { $routes = $this->app->router()->getMatchedRoutes($httpMethod, $uri); if (!empty($routes[0])) { $routeConditions = $routes[0]->getConditions(); if (isset($routeConditions['auth']) && $routeConditions['auth'] === false) { $this->auth->useNoAuth(); $this->next->call(); return; } } } else { if (!$this->authRequired) { $this->auth->useNoAuth(); $this->next->call(); return; } } $authKey = $req->headers('PHP_AUTH_USER'); $authSec = $req->headers('PHP_AUTH_PW'); $espoAuth = $req->headers('HTTP_ESPO_AUTHORIZATION'); if (isset($espoAuth)) { $credentials = explode(':', base64_decode($espoAuth)); $authKey = $credentials[0]; $authSec = $credentials[1]; } if ($authKey && $authSec) { $isAuthenticated = false; $username = $authKey; $password = $authSec; $isAuthenticated = $this->auth->login($username, $password); if ($isAuthenticated) { $this->next->call(); } else { $this->processUnauthorized(); } } else { if (!$this->isXMLHttpRequest()) { $this->showDialog = true; } $this->processUnauthorized(); } } protected function processUnauthorized() { $res = $this->app->response(); if ($this->showDialog) { $res->header('WWW-Authenticate', 'Basic realm=""'); } else { $res->header('WWW-Authenticate'); } $res->status(401); } protected function isXMLHttpRequest() { $req = $this->app->request(); $httpXRequestedWith = $req->headers('HTTP_X_REQUESTED_WITH'); if (isset($httpXRequestedWith) && strtolower($httpXRequestedWith) == 'xmlhttprequest') { return true; } return false; } }