Add_Git_Notification #23
8 changed files with 63 additions and 36 deletions
|
@ -1,4 +1,5 @@
|
|||
PRODUCTION=false
|
||||
USE_SSL=false
|
||||
|
||||
DISCORD_CLIENT_ID=""
|
||||
DISCORD_CLIENT_SECRET=""
|
||||
|
|
|
@ -5,6 +5,7 @@ namespace GamesShop;
|
|||
|
||||
use League\Container\Container;
|
||||
use League\Container\ReflectionContainer;
|
||||
use Whoops\Handler\HandlerInterface;
|
||||
|
||||
final class ContainerHandler
|
||||
{
|
||||
|
@ -35,5 +36,6 @@ final class ContainerHandler
|
|||
self::$instance = new Container();
|
||||
$reflectionContainer = new ReflectionContainer(true);
|
||||
self::$instance->delegate($reflectionContainer);
|
||||
self::$instance->addShared(Container::class, self::$instance);
|
||||
}
|
||||
}
|
42
src/php/CrashHandler.php
Normal file
42
src/php/CrashHandler.php
Normal file
|
@ -0,0 +1,42 @@
|
|||
<?php declare(strict_types=1);
|
||||
namespace GamesShop;
|
||||
|
||||
use GamesShop\Environment\EnvironmentHandler;
|
||||
use GamesShop\Templates\TemplateEngine;
|
||||
use League\Container\Container;
|
||||
use Whoops\Handler\CallbackHandler;
|
||||
use Whoops\Handler\HandlerInterface;
|
||||
use Whoops\Handler\PrettyPageHandler;
|
||||
use Whoops\Run;
|
||||
|
||||
final class CrashHandler
|
||||
{
|
||||
public function __construct(
|
||||
private readonly Container $container,
|
||||
private readonly EnvironmentHandler $env
|
||||
) { }
|
||||
|
||||
public function register() : void {
|
||||
$handler = $this->getHandler();
|
||||
$this->container->addShared(HandlerInterface::class, $handler);
|
||||
|
||||
$whoops = new Run();
|
||||
$whoops->pushHandler($handler);
|
||||
$whoops->register();
|
||||
}
|
||||
|
||||
private function getHandler(): HandlerInterface
|
||||
{
|
||||
if (!$this->env->isProduction()) {
|
||||
return new PrettyPageHandler();
|
||||
}
|
||||
|
||||
return new CallbackHandler(
|
||||
function ($exception, $inspector, $run) {
|
||||
http_response_code(500);
|
||||
echo ContainerHandler::get(TemplateEngine::class)
|
||||
->renderErrorPage(500);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
|
@ -37,4 +37,9 @@ final class EnvironmentHandler
|
|||
public function isProduction(): bool {
|
||||
return $_SERVER['PRODUCTION'] === 'true';
|
||||
}
|
||||
|
||||
public function useSSL(): bool
|
||||
{
|
||||
return $_SERVER['USE_SSL'] === 'true';
|
||||
}
|
||||
}
|
|
@ -7,12 +7,14 @@ use Doctrine\ORM\EntityManager;
|
|||
use GamesShop\Api\DiscordAPI;
|
||||
use GamesShop\ContainerHandler;
|
||||
use GamesShop\Entities\Account\User;
|
||||
use GamesShop\Environment\EnvironmentHandler;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
final class DiscordLoginProvider implements LoginProvider
|
||||
{
|
||||
public function __construct(
|
||||
private readonly EntityManager $entityManager
|
||||
private readonly EntityManager $entityManager,
|
||||
private readonly EnvironmentHandler $env
|
||||
)
|
||||
{
|
||||
}
|
||||
|
@ -20,7 +22,12 @@ final class DiscordLoginProvider implements LoginProvider
|
|||
public function getUser(ServerRequestInterface $request): User
|
||||
{
|
||||
$discordApiHandler = ContainerHandler::get(DiscordAPI::class);
|
||||
$result = $discordApiHandler->getUserFromCode($request->getQueryParams()['code'], (string)$request->getUri()->withQuery(''));
|
||||
$result = $discordApiHandler->getUserFromCode(
|
||||
$request->getQueryParams()['code'],
|
||||
(string)$request->getUri()
|
||||
->withScheme($this->env->useSSL() ? 'https' : 'http')
|
||||
->withQuery('')
|
||||
);
|
||||
|
||||
$repo = $this->entityManager->getRepository(User::class);
|
||||
$users = $repo->findBy(['loginMethod' => LoginMethod::DISCORD, 'foreignLoginId' => $result['id']]);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
declare(strict_types=1);
|
||||
|
||||
use GamesShop\ContainerHandler;
|
||||
use GamesShop\CrashHandler;
|
||||
use GamesShop\DoctrineManager;
|
||||
use GamesShop\Environment\EnvironmentHandler;
|
||||
use GamesShop\Routing\Router;
|
||||
|
@ -12,12 +13,7 @@ use Whoops\Run;
|
|||
|
||||
require_once __DIR__ . '/../src/php/bootstrap.php';
|
||||
|
||||
$whoops = new Run();
|
||||
$prettyPageHandler = new PrettyPageHandler();
|
||||
$whoops->pushHandler($prettyPageHandler);
|
||||
$whoops->register();
|
||||
|
||||
ContainerHandler::getInstance()->addShared(HandlerInterface::class, $prettyPageHandler);
|
||||
ContainerHandler::get(CrashHandler::class)->register();
|
||||
|
||||
$router = ContainerHandler::getInstance()->get(Router::class);
|
||||
$result = $router->route();
|
|
@ -1,26 +0,0 @@
|
|||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
use GamesShop\ContainerHandler;
|
||||
use GamesShop\DoctrineManager;
|
||||
use GamesShop\Environment\EnvironmentHandler;
|
||||
use GamesShop\Routing\Router;
|
||||
use Laminas\HttpHandlerRunner\Emitter\SapiEmitter;
|
||||
use Whoops\Handler\HandlerInterface;
|
||||
use Whoops\Handler\PrettyPageHandler;
|
||||
use Whoops\Run;
|
||||
|
||||
require_once __DIR__ . '/../src/php/bootstrap.php';
|
||||
|
||||
$whoops = new Run();
|
||||
$prettyPageHandler = new PrettyPageHandler();
|
||||
$whoops->pushHandler($prettyPageHandler);
|
||||
$whoops->register();
|
||||
|
||||
ContainerHandler::getInstance()->addShared(HandlerInterface::class, $prettyPageHandler);
|
||||
|
||||
$router = ContainerHandler::getInstance()->get(Router::class);
|
||||
$result = $router->route();
|
||||
|
||||
(new SapiEmitter)->emit($result);
|
|
@ -10,9 +10,9 @@ const PUBLIC_FOLDER = Path.resolve(__dirname, 'public'),
|
|||
CSS_FOLDER = Path.resolve(SOURCE_FOLDER, 'css'),
|
||||
PHP_FOLDER = Path.resolve(SOURCE_FOLDER, 'php');
|
||||
|
||||
const PROD = false;
|
||||
const PROD = process.env.PROD ?? false;
|
||||
|
||||
const INDEX_PATH = Path.resolve(PHP_FOLDER, PROD ? 'index.prod.php' : 'index.dev.php');
|
||||
const INDEX_PATH = Path.resolve(PHP_FOLDER, 'index.php');
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
|
|
Loading…
Reference in a new issue