From 7f228274e16292a32fe707a0dc13fa6f2938f391 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 26 Jun 2019 09:36:50 +0200 Subject: [PATCH] init --- .env.dist | 1 + .gitignore | 2 + composer.json | 15 ++++++ src/functions/simple-router.php | 88 +++++++++++++++++++++++++++++++++ web/.htaccess | 5 ++ web/index.php | 85 +++++++++++++++++++++++++++++++ 6 files changed, 196 insertions(+) create mode 100644 .env.dist create mode 100644 .gitignore create mode 100644 composer.json create mode 100644 src/functions/simple-router.php create mode 100644 web/.htaccess create mode 100644 web/index.php diff --git a/.env.dist b/.env.dist new file mode 100644 index 0000000..a56d18d --- /dev/null +++ b/.env.dist @@ -0,0 +1 @@ +API_HOSTNAME=api.example.com diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a8b5f43 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/vendor +/.env diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..f2aa192 --- /dev/null +++ b/composer.json @@ -0,0 +1,15 @@ +{ + "autoload": { + "files": [ + "src/functions/simple-router.php" + ] + }, + "require": { + "j0k3r/graby": "^2.0", + "php-http/guzzle6-adapter": "^2.0", + "pecee/simple-router": "4.2.0.6", + "fusonic/linq": "dev-master", + "fusonic/opengraph": "^1.0", + "vlucas/phpdotenv": "^3.4" + } +} diff --git a/src/functions/simple-router.php b/src/functions/simple-router.php new file mode 100644 index 0000000..cbb3e8f --- /dev/null +++ b/src/functions/simple-router.php @@ -0,0 +1,88 @@ +getInputHandler()->value($index, $defaultValue, ...$methods); + } + + return request()->getInputHandler(); +} + +/** + * @param string $url + * @param int|null $code + */ +function redirect(string $url, ?int $code = null): void +{ + if ($code !== null) { + response()->httpCode($code); + } + + response()->redirect($url); +} + +/** + * Get current csrf-token + * @return string|null + */ +function csrf_token(): ?string +{ + $baseVerifier = Router::router()->getCsrfVerifier(); + if ($baseVerifier !== null) { + return $baseVerifier->getTokenProvider()->getToken(); + } + + return null; +} diff --git a/web/.htaccess b/web/.htaccess new file mode 100644 index 0000000..1c534bd --- /dev/null +++ b/web/.htaccess @@ -0,0 +1,5 @@ +RewriteEngine on +RewriteCond %{SCRIPT_FILENAME} !-f +RewriteCond %{SCRIPT_FILENAME} !-d +RewriteCond %{SCRIPT_FILENAME} !-l +RewriteRule ^(.*)$ index.php/$1 diff --git a/web/index.php b/web/index.php new file mode 100644 index 0000000..10d4e7a --- /dev/null +++ b/web/index.php @@ -0,0 +1,85 @@ +load(); + +function isValidUrl( ? string $url, ? string $hostname) : bool +{ + if ($url === null) { + return false; + } + + if (trim($url) === '') { + return false; + } + + if (filter_var($url, FILTER_VALIDATE_URL) === false) { + return false; + } + + echo '
', var_dump($hostname), '
'; + die; + + return parse_url($url)['host'] !== $hostname; +} + +function graby(string $url) : array +{ + $graby = new Graby(); + $result = $graby->fetchContent($url); + + if (isset($result['headers'])) { + unset($result['headers']); + } + + return $result; +} + +function opengraph(string $url) : array +{ + $consumer = new Consumer(); + $object = $consumer->loadUrl($url); + + return json_decode(json_encode($object), true); +} + +SimpleRouter::get('/do/{parser}', function ($parser) { + $url = input()->get('url')->value; + + if (!isValidUrl($url, getenv('API_HOSTNAME'))) { + return response() + ->httpCode(400) + ->json(['error' => 'Invalid URL']); + } + + $parsers = [ + 'graby' => 'graby', + 'opengraph' => 'opengraph', + ]; + + if (!isset($parsers[$parser])) { + return response() + ->httpCode(400) + ->json(['error' => 'Invalid parser']); + } + + try { + $result = call_user_func_array($parsers[$parser], [$url]); + + return response() + ->httpCode(200) + ->json($result); + } catch (\Exception $e) { + return response() + ->httpCode(500) + ->json(['error' => $e->getMessage()]); + } +}); + +SimpleRouter::start();