/** * @return \Cawa\App\Module|Module */ public function module() { if (!$this->module) { $this->module = AbstractApp::instance()->getModule('Cawa\\SwaggerServer\\Module'); } return $this->module; }
/** * @param string $service * * @return string */ public function end(string $service) { $provider = AbstractProvider::create($service); $user = $provider->getUser(); self::session()->set(Module::SESSION_NAME, $user); self::session()->remove(SessionStorage::SESSION_VAR_STATE); self::session()->remove(SessionStorage::SESSION_VAR_TOKEN); /* @var \Cawa\Oauth\Module $module */ $module = AbstractApp::instance()->getModule('Cawa\\Oauth\\Module'); $url = self::session()->get(Module::SESSION_FROM); self::session()->remove(Module::SESSION_FROM); if (!$user instanceof User) { $url = null; } if (!$url) { $url = self::uri($module->getRedirectRoute()); } self::response()->redirect($url); }
/** * @param \Throwable $exception * * @return bool */ public static function exceptionHandler(\Throwable $exception) { // This error code is not included in error_reporting if (!error_reporting() || $exception->getLine() == 0) { return; } if ('cli' === PHP_SAPI || isset($_SERVER['HTTP_USER_AGENT']) && stripos($_SERVER['HTTP_USER_AGENT'], 'curl') !== false) { $formatterClass = '\\Cawa\\Error\\Formatter\\CliFormatter'; } else { $formatterClass = '\\Cawa\\Error\\Formatter\\HtmlFormatter'; } if (AbstractApp::isInit() && AbstractApp::instance() instanceof HttpApp) { self::log($exception); self::response()->setStatus(500); if (AbstractApp::env() != AbstractApp::PROD || Ip::isAdmin()) { $formatter = new $formatterClass(); self::render($formatter, $exception); } else { self::clearAllBuffer(); echo self::router()->returnError(500); } AbstractApp::instance()->end(); } else { if (!headers_sent()) { header('HTTP/1.1 500 Internal Server Error'); } if (AbstractApp::env() != AbstractApp::PROD) { $formatter = new $formatterClass(); self::render($formatter, $exception); } else { self::clearAllBuffer(); echo '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">' . "\n" . '<html><head>' . "\n" . '<title>' . self::response()->getStatusString(500) . '</title>' . "\n" . '</head><body>' . "\n" . '<h1>' . self::response()->getStatusString(500) . '</h1>' . "\n" . '</body></html>'; } } }
/** * @param string $file * @param string $extension * @param string $extensionFrom * @param int $width * @param int $height * @param string $position * @param string $effect * * @return string */ public function resize(string $file, string $extension, string $extensionFrom = null, int $width = null, int $height = null, string $position = null, string $effect = null) : string { $options = class_exists('Imagick') ? ['driver' => 'imagick'] : []; $manager = new ImageManager($options); $path = $_SERVER['DOCUMENT_ROOT'] . $file . '.' . ($extensionFrom ? $extensionFrom : $extension); $timerEvent = new TimerEvent('image.make', ['path' => $path]); if (!file_exists($path)) { self::response()->setStatus(404); $img = $manager->make(dirname(__DIR__) . '/assets/404.png'); } else { $img = $manager->make($path); } $timerEvent->addData(['width' => $img->width(), 'heigth' => $img->height(), 'size' => $img->filesize()]); self::emit($timerEvent); if (!$height) { $height = round($width * $img->height() / $img->width()); } if (!$width) { $width = round($height * $img->width() / $img->height()); } $timerEvent = new TimerEvent('image.resize'); $interlace = DI::config()->getIfExists('image/interlace'); $interlace = is_null($interlace) ? true : $interlace; $sharpen = DI::config()->getIfExists('image/sharpen'); $sharpen = is_null($sharpen) ? 5 : $sharpen; $quality = DI::config()->getIfExists('image/quality'); $timerEvent->addData(['width' => $width, 'heigth' => $height]); $positions = []; if ($position) { foreach (str_split($position) as $letter) { if ($letter == 't') { $positions[] = 'top'; } elseif ($letter == 'b') { $positions[] = 'bottom'; } elseif ($letter == 'l') { $positions[] = 'left'; } elseif ($letter == 'r') { $positions[] = 'right'; } } } $encoded = $img->fit($width, $height, null, sizeof($positions) > 0 ? implode('-', $positions) : null); self::emit($timerEvent); if ($interlace) { $timerEvent = new TimerEvent('image.effect', ['type' => 'interlace']); $encoded->interlace(); self::emit($timerEvent); } if ($sharpen) { $timerEvent = new TimerEvent('image.effect', ['type' => 'sharpen']); $encoded->sharpen($sharpen); self::emit($timerEvent); } if ($effect) { /* @var \Cawa\ImageModule\Module $module */ $module = AbstractApp::instance()->getModule('Cawa\\ImageModule\\Module'); foreach (explode('-', $effect) as $currentEffect) { $timerEvent = new TimerEvent('image.effect', ['type' => $currentEffect]); $filter = $module->getEffect($currentEffect); $encoded->filter($filter); self::emit($timerEvent); } } $encoded = $encoded->encode($extension, $quality); self::response()->addHeader('Content-Type', $encoded->mime()); self::response()->addHeader('Content-Length', (string) strlen($encoded->getEncoded())); return $encoded->getEncoded(); }