Compare commits
5 Commits
624b2f8b31
...
0546e20011
Author | SHA1 | Date | |
---|---|---|---|
0546e20011 | |||
7e23ac7ba1 | |||
52b220a8fa | |||
a910938b5c | |||
fa30f784f9 |
@ -10,7 +10,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"esoko/soko-web": "0.6.1",
|
"esoko/soko-web": "0.6",
|
||||||
"fzaninotto/faker": "^1.9"
|
"fzaninotto/faker": "^1.9"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
8
composer.lock
generated
8
composer.lock
generated
@ -4,15 +4,15 @@
|
|||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "8b291ef6518a20a7cdd71ac2c19763d8",
|
"content-hash": "fd65225819ba36427cdc6a925b417bd1",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "esoko/soko-web",
|
"name": "esoko/soko-web",
|
||||||
"version": "0.6.1",
|
"version": "0.6",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://git.esoko.eu/esoko/soko-web.git",
|
"url": "https://git.esoko.eu/esoko/soko-web.git",
|
||||||
"reference": "445774e59a4891b2e67d151b0cf7b7b880c40e48"
|
"reference": "5e0579463cf0f4203c46e0d4f9c09cd283dbf0b8"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"phpmailer/phpmailer": "^6.8",
|
"phpmailer/phpmailer": "^6.8",
|
||||||
@ -33,7 +33,7 @@
|
|||||||
"GNU GPL 3.0"
|
"GNU GPL 3.0"
|
||||||
],
|
],
|
||||||
"description": "Lightweight web framework",
|
"description": "Lightweight web framework",
|
||||||
"time": "2023-04-19T22:24:31+00:00"
|
"time": "2023-04-19T21:35:03+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "fzaninotto/faker",
|
"name": "fzaninotto/faker",
|
||||||
|
4
main.php
4
main.php
@ -15,11 +15,9 @@ $dotenv->load();
|
|||||||
class Container
|
class Container
|
||||||
{
|
{
|
||||||
static SokoWeb\Interfaces\Database\IConnection $dbConnection;
|
static SokoWeb\Interfaces\Database\IConnection $dbConnection;
|
||||||
static SokoWeb\Interfaces\PersistentData\IPersistentDataManager $persistentDataManager;
|
static SokoWeb\Routing\RouteCollection $routeCollection;
|
||||||
static SokoWeb\Interfaces\Routing\IRouteCollection $routeCollection;
|
|
||||||
static SokoWeb\Interfaces\Session\ISessionHandler $sessionHandler;
|
static SokoWeb\Interfaces\Session\ISessionHandler $sessionHandler;
|
||||||
static SokoWeb\Interfaces\Request\IRequest $request;
|
static SokoWeb\Interfaces\Request\IRequest $request;
|
||||||
}
|
}
|
||||||
|
|
||||||
Container::$dbConnection = new SokoWeb\Database\Mysql\Connection($_ENV['DB_HOST'], $_ENV['DB_USER'], $_ENV['DB_PASSWORD'], $_ENV['DB_NAME']);
|
Container::$dbConnection = new SokoWeb\Database\Mysql\Connection($_ENV['DB_HOST'], $_ENV['DB_USER'], $_ENV['DB_PASSWORD'], $_ENV['DB_NAME']);
|
||||||
Container::$persistentDataManager = new SokoWeb\PersistentData\PersistentDataManager(Container::$dbConnection);
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<?php namespace MapGuesser\Cli;
|
<?php namespace MapGuesser\Cli;
|
||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use Symfony\Component\Console\Command\Command;
|
use Symfony\Component\Console\Command\Command;
|
||||||
use Symfony\Component\Console\Input\InputArgument;
|
use Symfony\Component\Console\Input\InputArgument;
|
||||||
@ -31,7 +32,8 @@ class AddUserCommand extends Command
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
\Container::$persistentDataManager->saveToDb($user);
|
$pdm = new PersistentDataManager();
|
||||||
|
$pdm->saveToDb($user);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
$output->writeln('<error>Adding user failed!</error>');
|
$output->writeln('<error>Adding user failed!</error>');
|
||||||
$output->writeln('');
|
$output->writeln('');
|
||||||
|
@ -4,6 +4,7 @@ use DateTime;
|
|||||||
use SokoWeb\Database\Query\Modify;
|
use SokoWeb\Database\Query\Modify;
|
||||||
use SokoWeb\Database\Query\Select;
|
use SokoWeb\Database\Query\Select;
|
||||||
use SokoWeb\Interfaces\Database\IResultSet;
|
use SokoWeb\Interfaces\Database\IResultSet;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\Repository\MultiRoomRepository;
|
use MapGuesser\Repository\MultiRoomRepository;
|
||||||
use MapGuesser\Repository\UserConfirmationRepository;
|
use MapGuesser\Repository\UserConfirmationRepository;
|
||||||
use MapGuesser\Repository\UserPasswordResetterRepository;
|
use MapGuesser\Repository\UserPasswordResetterRepository;
|
||||||
@ -15,6 +16,8 @@ use Symfony\Component\Console\Output\OutputInterface;
|
|||||||
|
|
||||||
class MaintainDatabaseCommand extends Command
|
class MaintainDatabaseCommand extends Command
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
private UserRepository $userRepository;
|
private UserRepository $userRepository;
|
||||||
|
|
||||||
private UserConfirmationRepository $userConfirmationRepository;
|
private UserConfirmationRepository $userConfirmationRepository;
|
||||||
@ -29,6 +32,7 @@ class MaintainDatabaseCommand extends Command
|
|||||||
{
|
{
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
|
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
$this->userRepository = new UserRepository();
|
$this->userRepository = new UserRepository();
|
||||||
$this->userConfirmationRepository = new UserConfirmationRepository();
|
$this->userConfirmationRepository = new UserConfirmationRepository();
|
||||||
$this->userPasswordResetterRepository = new UserPasswordResetterRepository();
|
$this->userPasswordResetterRepository = new UserPasswordResetterRepository();
|
||||||
@ -73,19 +77,19 @@ class MaintainDatabaseCommand extends Command
|
|||||||
//TODO: these can be in some wrapper class
|
//TODO: these can be in some wrapper class
|
||||||
$userConfirmation = $this->userConfirmationRepository->getByUser($user);
|
$userConfirmation = $this->userConfirmationRepository->getByUser($user);
|
||||||
if ($userConfirmation !== null) {
|
if ($userConfirmation !== null) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userConfirmation);
|
$this->pdm->deleteFromDb($userConfirmation);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userPasswordResetter = $this->userPasswordResetterRepository->getByUser($user);
|
$userPasswordResetter = $this->userPasswordResetterRepository->getByUser($user);
|
||||||
if ($userPasswordResetter !== null) {
|
if ($userPasswordResetter !== null) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userPasswordResetter);
|
$this->pdm->deleteFromDb($userPasswordResetter);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->userPlayedPlaceRepository->getAllByUser($user) as $userPlayedPlace) {
|
foreach ($this->userPlayedPlaceRepository->getAllByUser($user) as $userPlayedPlace) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userPlayedPlace);
|
$this->pdm->deleteFromDb($userPlayedPlace);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($user);
|
$this->pdm->deleteFromDb($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$dbConnection->commit();
|
\Container::$dbConnection->commit();
|
||||||
@ -94,14 +98,14 @@ class MaintainDatabaseCommand extends Command
|
|||||||
private function deleteExpiredPasswordResetters(): void
|
private function deleteExpiredPasswordResetters(): void
|
||||||
{
|
{
|
||||||
foreach ($this->userPasswordResetterRepository->getAllExpired() as $passwordResetter) {
|
foreach ($this->userPasswordResetterRepository->getAllExpired() as $passwordResetter) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($passwordResetter);
|
$this->pdm->deleteFromDb($passwordResetter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function deleteExpiredRooms(): void
|
private function deleteExpiredRooms(): void
|
||||||
{
|
{
|
||||||
foreach ($this->multiRoomRepository->getAllExpired() as $multiRoom) {
|
foreach ($this->multiRoomRepository->getAllExpired() as $multiRoom) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($multiRoom);
|
$this->pdm->deleteFromDb($multiRoom);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
use DateTime;
|
use DateTime;
|
||||||
use Faker\Factory;
|
use Faker\Factory;
|
||||||
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use SokoWeb\Response\HtmlContent;
|
use SokoWeb\Response\HtmlContent;
|
||||||
use SokoWeb\Response\JsonContent;
|
use SokoWeb\Response\JsonContent;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
@ -12,6 +13,7 @@ use MapGuesser\PersistentData\Model\Challenge;
|
|||||||
use MapGuesser\PersistentData\Model\MultiRoom;
|
use MapGuesser\PersistentData\Model\MultiRoom;
|
||||||
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
||||||
use MapGuesser\PersistentData\Model\UserInChallenge;
|
use MapGuesser\PersistentData\Model\UserInChallenge;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\Repository\ChallengeRepository;
|
use MapGuesser\Repository\ChallengeRepository;
|
||||||
use MapGuesser\Repository\MapRepository;
|
use MapGuesser\Repository\MapRepository;
|
||||||
use MapGuesser\Repository\MultiRoomRepository;
|
use MapGuesser\Repository\MultiRoomRepository;
|
||||||
@ -23,6 +25,10 @@ class GameController implements IAuthenticationRequired
|
|||||||
{
|
{
|
||||||
const NUMBER_OF_ROUNDS = 5;
|
const NUMBER_OF_ROUNDS = 5;
|
||||||
|
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
private MultiConnector $multiConnector;
|
private MultiConnector $multiConnector;
|
||||||
|
|
||||||
private MultiRoomRepository $multiRoomRepository;
|
private MultiRoomRepository $multiRoomRepository;
|
||||||
@ -35,8 +41,10 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
private UserInChallengeRepository $userInChallengeRepository;
|
private UserInChallengeRepository $userInChallengeRepository;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(IRequest $request)
|
||||||
{
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
$this->multiConnector = new MultiConnector();
|
$this->multiConnector = new MultiConnector();
|
||||||
$this->multiRoomRepository = new MultiRoomRepository();
|
$this->multiRoomRepository = new MultiRoomRepository();
|
||||||
$this->mapRepository = new MapRepository();
|
$this->mapRepository = new MapRepository();
|
||||||
@ -52,14 +60,14 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function getGame(): IContent
|
public function getGame(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
|
|
||||||
return new HtmlContent('game', ['mapId' => $mapId]);
|
return new HtmlContent('game', ['mapId' => $mapId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getNewMultiGame(): IRedirect
|
public function getNewMultiGame(): IRedirect
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
$map = $this->mapRepository->getById($mapId);
|
$map = $this->mapRepository->getById($mapId);
|
||||||
$roomId = bin2hex(random_bytes(3));
|
$roomId = bin2hex(random_bytes(3));
|
||||||
$token = $this->getMultiToken($roomId);
|
$token = $this->getMultiToken($roomId);
|
||||||
@ -75,7 +83,7 @@ class GameController implements IAuthenticationRequired
|
|||||||
$room->setMembersArray(['owner' => $token, 'all' => []]);
|
$room->setMembersArray(['owner' => $token, 'all' => []]);
|
||||||
$room->setUpdatedDate(new DateTime());
|
$room->setUpdatedDate(new DateTime());
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($room);
|
$this->pdm->saveToDb($room);
|
||||||
|
|
||||||
$this->multiConnector->sendMessage('create_room', ['roomId' => $roomId]);
|
$this->multiConnector->sendMessage('create_room', ['roomId' => $roomId]);
|
||||||
|
|
||||||
@ -89,14 +97,14 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function getMultiGame(): IContent
|
public function getMultiGame(): IContent
|
||||||
{
|
{
|
||||||
$roomId = \Container::$request->query('roomId');
|
$roomId = $this->request->query('roomId');
|
||||||
|
|
||||||
return new HtmlContent('game', ['roomId' => $roomId]);
|
return new HtmlContent('game', ['roomId' => $roomId]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getChallenge(): IContent
|
public function getChallenge(): IContent
|
||||||
{
|
{
|
||||||
$challengeToken = \Container::$request->query('challengeToken');
|
$challengeToken = $this->request->query('challengeToken');
|
||||||
|
|
||||||
return new HtmlContent('game', ['challengeToken' => $challengeToken]);
|
return new HtmlContent('game', ['challengeToken' => $challengeToken]);
|
||||||
}
|
}
|
||||||
@ -113,27 +121,27 @@ class GameController implements IAuthenticationRequired
|
|||||||
$challenge->setToken($challengeToken);
|
$challenge->setToken($challengeToken);
|
||||||
$challenge->setCreatedDate(new DateTime());
|
$challenge->setCreatedDate(new DateTime());
|
||||||
|
|
||||||
if (\Container::$request->post('timerEnabled') !== null && \Container::$request->post('timeLimit') !== null) {
|
if ($this->request->post('timerEnabled') !== null && $this->request->post('timeLimit') !== null) {
|
||||||
$challenge->setTimeLimit(\Container::$request->post('timeLimit'));
|
$challenge->setTimeLimit($this->request->post('timeLimit'));
|
||||||
}
|
}
|
||||||
if (\Container::$request->post('timeLimitType') !== null) {
|
if ($this->request->post('timeLimitType') !== null) {
|
||||||
$challenge->setTimeLimitType(\Container::$request->post('timeLimitType'));
|
$challenge->setTimeLimitType($this->request->post('timeLimitType'));
|
||||||
}
|
}
|
||||||
if (\Container::$request->post('noMove') !== null) {
|
if ($this->request->post('noMove') !== null) {
|
||||||
$challenge->setNoMove(true);
|
$challenge->setNoMove(true);
|
||||||
}
|
}
|
||||||
if (\Container::$request->post('noPan') !== null) {
|
if ($this->request->post('noPan') !== null) {
|
||||||
$challenge->setNoPan(true);
|
$challenge->setNoPan(true);
|
||||||
}
|
}
|
||||||
if (\Container::$request->post('noZoom') !== null) {
|
if ($this->request->post('noZoom') !== null) {
|
||||||
$challenge->setNoZoom(true);
|
$challenge->setNoZoom(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($challenge);
|
$this->pdm->saveToDb($challenge);
|
||||||
|
|
||||||
// save owner/creator
|
// save owner/creator
|
||||||
|
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
$userId = $session->get('userId');
|
$userId = $session->get('userId');
|
||||||
|
|
||||||
$userInChallenge = new UserInChallenge();
|
$userInChallenge = new UserInChallenge();
|
||||||
@ -142,11 +150,11 @@ class GameController implements IAuthenticationRequired
|
|||||||
$userInChallenge->setTimeLeft($challenge->getTimeLimit());
|
$userInChallenge->setTimeLeft($challenge->getTimeLimit());
|
||||||
$userInChallenge->setIsOwner(true);
|
$userInChallenge->setIsOwner(true);
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($userInChallenge);
|
$this->pdm->saveToDb($userInChallenge);
|
||||||
|
|
||||||
// select places
|
// select places
|
||||||
|
|
||||||
$mapId = (int) \Container::$request->post('mapId');
|
$mapId = (int) $this->request->post('mapId');
|
||||||
// $map = $this->mapRepository->getById($mapId);
|
// $map = $this->mapRepository->getById($mapId);
|
||||||
|
|
||||||
$places = $this->placeRepository->getRandomNPlaces($mapId, static::NUMBER_OF_ROUNDS, $userId);
|
$places = $this->placeRepository->getRandomNPlaces($mapId, static::NUMBER_OF_ROUNDS, $userId);
|
||||||
@ -157,7 +165,7 @@ class GameController implements IAuthenticationRequired
|
|||||||
$placeInChallenge->setPlace($place);
|
$placeInChallenge->setPlace($place);
|
||||||
$placeInChallenge->setChallenge($challenge);
|
$placeInChallenge->setChallenge($challenge);
|
||||||
$placeInChallenge->setRound($round++);
|
$placeInChallenge->setRound($round++);
|
||||||
\Container::$persistentDataManager->saveToDb($placeInChallenge);
|
$this->pdm->saveToDb($placeInChallenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new JsonContent(['challengeToken' => dechex($challengeToken)]);
|
return new JsonContent(['challengeToken' => dechex($challengeToken)]);
|
||||||
@ -165,9 +173,9 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function prepareGame(): IContent
|
public function prepareGame(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
$map = $this->mapRepository->getById($mapId);
|
$map = $this->mapRepository->getById($mapId);
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($state = $session->get('state')) || $state['mapId'] !== $mapId) {
|
if (!($state = $session->get('state')) || $state['mapId'] !== $mapId) {
|
||||||
$session->set('state', [
|
$session->set('state', [
|
||||||
@ -190,8 +198,8 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function prepareMultiGame(): IContent
|
public function prepareMultiGame(): IContent
|
||||||
{
|
{
|
||||||
$roomId = \Container::$request->query('roomId');
|
$roomId = $this->request->query('roomId');
|
||||||
$userName = \Container::$request->post('userName');
|
$userName = $this->request->post('userName');
|
||||||
if (empty($userName)) {
|
if (empty($userName)) {
|
||||||
$faker = Factory::create();
|
$faker = Factory::create();
|
||||||
$userName = $faker->userName;
|
$userName = $faker->userName;
|
||||||
@ -220,7 +228,7 @@ class GameController implements IAuthenticationRequired
|
|||||||
$room->setMembersArray($members);
|
$room->setMembersArray($members);
|
||||||
$room->setUpdatedDate(new DateTime());
|
$room->setUpdatedDate(new DateTime());
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($room);
|
$this->pdm->saveToDb($room);
|
||||||
|
|
||||||
$this->multiConnector->sendMessage('join_room', [
|
$this->multiConnector->sendMessage('join_room', [
|
||||||
'roomId' => $roomId,
|
'roomId' => $roomId,
|
||||||
@ -240,8 +248,8 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function prepareChallenge(): IContent
|
public function prepareChallenge(): IContent
|
||||||
{
|
{
|
||||||
$challengeToken_str = \Container::$request->query('challengeToken');
|
$challengeToken_str = $this->request->query('challengeToken');
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
$userId = $session->get('userId');
|
$userId = $session->get('userId');
|
||||||
|
|
||||||
if (!isset($userId))
|
if (!isset($userId))
|
||||||
@ -262,7 +270,7 @@ class GameController implements IAuthenticationRequired
|
|||||||
$userInChallenge->setUserId($userId);
|
$userInChallenge->setUserId($userId);
|
||||||
$userInChallenge->setChallenge($challenge);
|
$userInChallenge->setChallenge($challenge);
|
||||||
$userInChallenge->setTimeLeft($challenge->getTimeLimit());
|
$userInChallenge->setTimeLeft($challenge->getTimeLimit());
|
||||||
\Container::$persistentDataManager->saveToDb($userInChallenge);
|
$this->pdm->saveToDb($userInChallenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
$map = $this->mapRepository->getByChallenge($challenge);
|
$map = $this->mapRepository->getByChallenge($challenge);
|
||||||
@ -276,7 +284,7 @@ class GameController implements IAuthenticationRequired
|
|||||||
|
|
||||||
private function getMultiToken(string $roomId): string
|
private function getMultiToken(string $roomId): string
|
||||||
{
|
{
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
||||||
$token = bin2hex(random_bytes(16));
|
$token = bin2hex(random_bytes(16));
|
||||||
|
@ -2,10 +2,12 @@
|
|||||||
|
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use MapGuesser\Util\Geo\Position;
|
use MapGuesser\Util\Geo\Position;
|
||||||
use SokoWeb\Response\JsonContent;
|
use SokoWeb\Response\JsonContent;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
use MapGuesser\Multi\MultiConnector;
|
use MapGuesser\Multi\MultiConnector;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\Guess;
|
use MapGuesser\PersistentData\Model\Guess;
|
||||||
use MapGuesser\PersistentData\Model\Map;
|
use MapGuesser\PersistentData\Model\Map;
|
||||||
@ -25,6 +27,10 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
const NUMBER_OF_ROUNDS = 5;
|
const NUMBER_OF_ROUNDS = 5;
|
||||||
const MAX_SCORE = 1000;
|
const MAX_SCORE = 1000;
|
||||||
|
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
private MultiConnector $multiConnector;
|
private MultiConnector $multiConnector;
|
||||||
|
|
||||||
private MultiRoomRepository $multiRoomRepository;
|
private MultiRoomRepository $multiRoomRepository;
|
||||||
@ -39,8 +45,10 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
private GuessRepository $guessRepository;
|
private GuessRepository $guessRepository;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(IRequest $request)
|
||||||
{
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
$this->multiConnector = new MultiConnector();
|
$this->multiConnector = new MultiConnector();
|
||||||
$this->multiRoomRepository = new MultiRoomRepository();
|
$this->multiRoomRepository = new MultiRoomRepository();
|
||||||
$this->placeRepository = new PlaceRepository();
|
$this->placeRepository = new PlaceRepository();
|
||||||
@ -57,8 +65,8 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function initialData(): IContent
|
public function initialData(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($state = $session->get('state')) || $state['mapId'] !== $mapId) {
|
if (!($state = $session->get('state')) || $state['mapId'] !== $mapId) {
|
||||||
return new JsonContent(['error' => 'no_session_found']);
|
return new JsonContent(['error' => 'no_session_found']);
|
||||||
@ -95,8 +103,8 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function multiInitialData(): IContent
|
public function multiInitialData(): IContent
|
||||||
{
|
{
|
||||||
$roomId = \Container::$request->query('roomId');
|
$roomId = $this->request->query('roomId');
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
||||||
return new JsonContent(['error' => 'no_session_found']);
|
return new JsonContent(['error' => 'no_session_found']);
|
||||||
@ -114,7 +122,7 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
$this->startNewGame($state, $state['mapId']);
|
$this->startNewGame($state, $state['mapId']);
|
||||||
$room->setStateArray($state);
|
$room->setStateArray($state);
|
||||||
$room->setUpdatedDate(new DateTime());
|
$room->setUpdatedDate(new DateTime());
|
||||||
\Container::$persistentDataManager->saveToDb($room);
|
$this->pdm->saveToDb($room);
|
||||||
}
|
}
|
||||||
|
|
||||||
$places = [];
|
$places = [];
|
||||||
@ -213,9 +221,9 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function challengeInitialData(): IContent
|
public function challengeInitialData(): IContent
|
||||||
{
|
{
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
$userId = $session->get('userId');
|
$userId = $session->get('userId');
|
||||||
$challengeToken_str = \Container::$request->query('challengeToken');
|
$challengeToken_str = $this->request->query('challengeToken');
|
||||||
$userInChallenge = $this->userInChallengeRepository->getByUserIdAndToken($userId, $challengeToken_str, [Challenge::class]);
|
$userInChallenge = $this->userInChallengeRepository->getByUserIdAndToken($userId, $challengeToken_str, [Challenge::class]);
|
||||||
|
|
||||||
if (!isset($userInChallenge)) {
|
if (!isset($userInChallenge)) {
|
||||||
@ -237,15 +245,15 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function guess(): IContent
|
public function guess(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($state = $session->get('state')) || $state['mapId'] !== $mapId) {
|
if (!($state = $session->get('state')) || $state['mapId'] !== $mapId) {
|
||||||
return new JsonContent(['error' => 'no_session_found']);
|
return new JsonContent(['error' => 'no_session_found']);
|
||||||
}
|
}
|
||||||
|
|
||||||
$last = $state['rounds'][$state['currentRound']];
|
$last = $state['rounds'][$state['currentRound']];
|
||||||
$guessPosition = new Position((float) \Container::$request->post('lat'), (float) \Container::$request->post('lng'));
|
$guessPosition = new Position((float) $this->request->post('lat'), (float) $this->request->post('lng'));
|
||||||
$result = $this->evaluateGuess($last['position'], $guessPosition, $state['area']);
|
$result = $this->evaluateGuess($last['position'], $guessPosition, $state['area']);
|
||||||
|
|
||||||
$last['guessPosition'] = $guessPosition;
|
$last['guessPosition'] = $guessPosition;
|
||||||
@ -278,7 +286,7 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
// save the selected place for the round in UserPlayedPlace
|
// save the selected place for the round in UserPlayedPlace
|
||||||
private function saveVisit($placeId): void
|
private function saveVisit($placeId): void
|
||||||
{
|
{
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
$userId = $session->get('userId');
|
$userId = $session->get('userId');
|
||||||
|
|
||||||
if (isset($userId)) {
|
if (isset($userId)) {
|
||||||
@ -291,14 +299,14 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
$userPlayedPlace->incrementOccurrences();
|
$userPlayedPlace->incrementOccurrences();
|
||||||
}
|
}
|
||||||
$userPlayedPlace->setLastTimeDate(new DateTime());
|
$userPlayedPlace->setLastTimeDate(new DateTime());
|
||||||
\Container::$persistentDataManager->saveToDb($userPlayedPlace);
|
$this->pdm->saveToDb($userPlayedPlace);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function multiGuess(): IContent
|
public function multiGuess(): IContent
|
||||||
{
|
{
|
||||||
$roomId = \Container::$request->query('roomId');
|
$roomId = $this->request->query('roomId');
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
||||||
return new JsonContent(['error' => 'no_session_found']);
|
return new JsonContent(['error' => 'no_session_found']);
|
||||||
@ -308,7 +316,7 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
$state = $room->getStateArray();
|
$state = $room->getStateArray();
|
||||||
|
|
||||||
$last = $state['rounds'][$state['currentRound']];
|
$last = $state['rounds'][$state['currentRound']];
|
||||||
$guessPosition = new Position((float) \Container::$request->post('lat'), (float) \Container::$request->post('lng'));
|
$guessPosition = new Position((float) $this->request->post('lat'), (float) $this->request->post('lng'));
|
||||||
$result = $this->evaluateGuess($last['position'], $guessPosition, $state['area']);
|
$result = $this->evaluateGuess($last['position'], $guessPosition, $state['area']);
|
||||||
|
|
||||||
$responseFromMulti = $this->multiConnector->sendMessage('guess', [
|
$responseFromMulti = $this->multiConnector->sendMessage('guess', [
|
||||||
@ -334,9 +342,9 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function challengeGuess(): IContent
|
public function challengeGuess(): IContent
|
||||||
{
|
{
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
$userId = $session->get('userId');
|
$userId = $session->get('userId');
|
||||||
$challengeToken_str = \Container::$request->query('challengeToken');
|
$challengeToken_str = $this->request->query('challengeToken');
|
||||||
$userInChallenge = $this->userInChallengeRepository->getByUserIdAndToken($userId, $challengeToken_str, [Challenge::class]);
|
$userInChallenge = $this->userInChallengeRepository->getByUserIdAndToken($userId, $challengeToken_str, [Challenge::class]);
|
||||||
|
|
||||||
if (!isset($userInChallenge)) {
|
if (!isset($userInChallenge)) {
|
||||||
@ -354,8 +362,8 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
$response = $this->prepareChallengeResponse($userId, $challenge, $nextRound);
|
$response = $this->prepareChallengeResponse($userId, $challenge, $nextRound);
|
||||||
$response['position'] = $currentPlace->getPosition()->toArray();
|
$response['position'] = $currentPlace->getPosition()->toArray();
|
||||||
|
|
||||||
if (\Container::$request->post('lat') && \Container::$request->post('lng')) {
|
if ($this->request->post('lat') && $this->request->post('lng')) {
|
||||||
$guessPosition = new Position((float) \Container::$request->post('lat'), (float) \Container::$request->post('lng'));
|
$guessPosition = new Position((float) $this->request->post('lat'), (float) $this->request->post('lng'));
|
||||||
$result = $this->evaluateGuess($currentPlace->getPosition(), $guessPosition, $map->getArea());
|
$result = $this->evaluateGuess($currentPlace->getPosition(), $guessPosition, $map->getArea());
|
||||||
|
|
||||||
// save guess
|
// save guess
|
||||||
@ -365,7 +373,7 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
$guess->setPosition($guessPosition);
|
$guess->setPosition($guessPosition);
|
||||||
$guess->setDistance($result['distance']);
|
$guess->setDistance($result['distance']);
|
||||||
$guess->setScore($result['score']);
|
$guess->setScore($result['score']);
|
||||||
\Container::$persistentDataManager->saveToDb($guess);
|
$this->pdm->saveToDb($guess);
|
||||||
|
|
||||||
$response['result'] = $result;
|
$response['result'] = $result;
|
||||||
|
|
||||||
@ -376,11 +384,11 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
// save user relevant state of challenge
|
// save user relevant state of challenge
|
||||||
$userInChallenge->setCurrentRound($nextRound);
|
$userInChallenge->setCurrentRound($nextRound);
|
||||||
$timeLeft = \Container::$request->post('timeLeft');
|
$timeLeft = $this->request->post('timeLeft');
|
||||||
if (isset($timeLeft)) {
|
if (isset($timeLeft)) {
|
||||||
$userInChallenge->setTimeLeft(intval($timeLeft));
|
$userInChallenge->setTimeLeft(intval($timeLeft));
|
||||||
}
|
}
|
||||||
\Container::$persistentDataManager->saveToDb($userInChallenge);
|
$this->pdm->saveToDb($userInChallenge);
|
||||||
|
|
||||||
if ($challenge->getTimeLimitType() === 'game' && isset($timeLeft)) {
|
if ($challenge->getTimeLimitType() === 'game' && isset($timeLeft)) {
|
||||||
$timeLimit = max(10, intval($timeLeft));
|
$timeLimit = max(10, intval($timeLeft));
|
||||||
@ -398,8 +406,8 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
public function multiNextRound(): IContent
|
public function multiNextRound(): IContent
|
||||||
{
|
{
|
||||||
$roomId = \Container::$request->query('roomId');
|
$roomId = $this->request->query('roomId');
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
|
|
||||||
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
if (!($multiState = $session->get('multiState')) || $multiState['roomId'] !== $roomId) {
|
||||||
return new JsonContent(['error' => 'no_session_found']);
|
return new JsonContent(['error' => 'no_session_found']);
|
||||||
@ -420,7 +428,7 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
$room->setStateArray($state);
|
$room->setStateArray($state);
|
||||||
$room->setUpdatedDate(new DateTime());
|
$room->setUpdatedDate(new DateTime());
|
||||||
\Container::$persistentDataManager->saveToDb($room);
|
$this->pdm->saveToDb($room);
|
||||||
|
|
||||||
return new JsonContent(['ok' => true]);
|
return new JsonContent(['ok' => true]);
|
||||||
}
|
}
|
||||||
@ -435,7 +443,7 @@ class GameFlowController implements IAuthenticationRequired
|
|||||||
|
|
||||||
private function startNewGame(array &$state, int $mapId): void
|
private function startNewGame(array &$state, int $mapId): void
|
||||||
{
|
{
|
||||||
$session = \Container::$request->session();
|
$session = $this->request->session();
|
||||||
$userId = $session->get('userId');
|
$userId = $session->get('userId');
|
||||||
|
|
||||||
$places = $this->placeRepository->getRandomNPlaces($mapId, static::NUMBER_OF_ROUNDS, $userId);
|
$places = $this->placeRepository->getRandomNPlaces($mapId, static::NUMBER_OF_ROUNDS, $userId);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
<?php namespace MapGuesser\Controller;
|
<?php namespace MapGuesser\Controller;
|
||||||
|
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
use SokoWeb\Interfaces\Response\IRedirect;
|
use SokoWeb\Interfaces\Response\IRedirect;
|
||||||
use SokoWeb\Response\JsonContent;
|
use SokoWeb\Response\JsonContent;
|
||||||
@ -7,6 +8,13 @@ use SokoWeb\Response\Redirect;
|
|||||||
|
|
||||||
class HomeController
|
class HomeController
|
||||||
{
|
{
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
public function __construct(IRequest $request)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
}
|
||||||
|
|
||||||
public function getIndex(): IRedirect
|
public function getIndex(): IRedirect
|
||||||
{
|
{
|
||||||
return new Redirect(\Container::$routeCollection->getRoute('maps')->generateLink(), IRedirect::TEMPORARY);
|
return new Redirect(\Container::$routeCollection->getRoute('maps')->generateLink(), IRedirect::TEMPORARY);
|
||||||
@ -16,6 +24,6 @@ class HomeController
|
|||||||
{
|
{
|
||||||
// session starts with the request, this method just sends valid data to the client
|
// session starts with the request, this method just sends valid data to the client
|
||||||
|
|
||||||
return new JsonContent(['antiCsrfToken' => \Container::$request->session()->get('anti_csrf_token')]);
|
return new JsonContent(['antiCsrfToken' => $this->request->session()->get('anti_csrf_token')]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
use DateInterval;
|
use DateInterval;
|
||||||
use DateTime;
|
use DateTime;
|
||||||
use SokoWeb\Http\Request;
|
use SokoWeb\Http\Request;
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
use SokoWeb\Interfaces\Response\IRedirect;
|
use SokoWeb\Interfaces\Response\IRedirect;
|
||||||
use SokoWeb\Mailing\Mail;
|
use SokoWeb\Mailing\Mail;
|
||||||
@ -10,6 +11,7 @@ use SokoWeb\OAuth\GoogleOAuth;
|
|||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\PersistentData\Model\UserConfirmation;
|
use MapGuesser\PersistentData\Model\UserConfirmation;
|
||||||
use MapGuesser\PersistentData\Model\UserPasswordResetter;
|
use MapGuesser\PersistentData\Model\UserPasswordResetter;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\Repository\UserConfirmationRepository;
|
use MapGuesser\Repository\UserConfirmationRepository;
|
||||||
use MapGuesser\Repository\UserPasswordResetterRepository;
|
use MapGuesser\Repository\UserPasswordResetterRepository;
|
||||||
use MapGuesser\Repository\UserPlayedPlaceRepository;
|
use MapGuesser\Repository\UserPlayedPlaceRepository;
|
||||||
@ -22,6 +24,10 @@ use SokoWeb\Util\JwtParser;
|
|||||||
|
|
||||||
class LoginController
|
class LoginController
|
||||||
{
|
{
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
private UserRepository $userRepository;
|
private UserRepository $userRepository;
|
||||||
|
|
||||||
private UserConfirmationRepository $userConfirmationRepository;
|
private UserConfirmationRepository $userConfirmationRepository;
|
||||||
@ -32,20 +38,22 @@ class LoginController
|
|||||||
|
|
||||||
private string $redirectUrl;
|
private string $redirectUrl;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(IRequest $request)
|
||||||
{
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
$this->userRepository = new UserRepository();
|
$this->userRepository = new UserRepository();
|
||||||
$this->userConfirmationRepository = new UserConfirmationRepository();
|
$this->userConfirmationRepository = new UserConfirmationRepository();
|
||||||
$this->userPasswordResetterRepository = new UserPasswordResetterRepository();
|
$this->userPasswordResetterRepository = new UserPasswordResetterRepository();
|
||||||
$this->userPlayedPlaceRepository = new UserPlayedPlaceRepository();
|
$this->userPlayedPlaceRepository = new UserPlayedPlaceRepository();
|
||||||
$this->redirectUrl = \Container::$request->session()->has('redirect_after_login') ?
|
$this->redirectUrl = $this->request->session()->has('redirect_after_login') ?
|
||||||
\Container::$request->session()->get('redirect_after_login') :
|
$this->request->session()->get('redirect_after_login') :
|
||||||
\Container::$routeCollection->getRoute('index')->generateLink();
|
\Container::$routeCollection->getRoute('index')->generateLink();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getLoginForm()
|
public function getLoginForm()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
@ -58,13 +66,13 @@ class LoginController
|
|||||||
$state = bin2hex(random_bytes(16));
|
$state = bin2hex(random_bytes(16));
|
||||||
$nonce = bin2hex(random_bytes(16));
|
$nonce = bin2hex(random_bytes(16));
|
||||||
|
|
||||||
\Container::$request->session()->set('oauth_state', $state);
|
$this->request->session()->set('oauth_state', $state);
|
||||||
\Container::$request->session()->set('oauth_nonce', $nonce);
|
$this->request->session()->set('oauth_nonce', $nonce);
|
||||||
|
|
||||||
$oAuth = new GoogleOAuth(new Request());
|
$oAuth = new GoogleOAuth(new Request());
|
||||||
$url = $oAuth->getDialogUrl(
|
$url = $oAuth->getDialogUrl(
|
||||||
$state,
|
$state,
|
||||||
\Container::$request->getBase() . \Container::$routeCollection->getRoute('login-google-action')->generateLink(),
|
$this->request->getBase() . \Container::$routeCollection->getRoute('login-google-action')->generateLink(),
|
||||||
$nonce
|
$nonce
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -73,13 +81,13 @@ class LoginController
|
|||||||
|
|
||||||
public function getSignupForm()
|
public function getSignupForm()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Container::$request->session()->has('tmp_user_data')) {
|
if ($this->request->session()->has('tmp_user_data')) {
|
||||||
$tmpUserData = \Container::$request->session()->get('tmp_user_data');
|
$tmpUserData = $this->request->session()->get('tmp_user_data');
|
||||||
|
|
||||||
$data = ['email' => $tmpUserData['email']];
|
$data = ['email' => $tmpUserData['email']];
|
||||||
} else {
|
} else {
|
||||||
@ -96,16 +104,16 @@ class LoginController
|
|||||||
|
|
||||||
public function getSignupWithGoogleForm()
|
public function getSignupWithGoogleForm()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!\Container::$request->session()->has('google_user_data')) {
|
if (!$this->request->session()->has('google_user_data')) {
|
||||||
return new Redirect(\Container::$routeCollection->getRoute('login-google')->generateLink(), IRedirect::TEMPORARY);
|
return new Redirect(\Container::$routeCollection->getRoute('login-google')->generateLink(), IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userData = \Container::$request->session()->get('google_user_data');
|
$userData = $this->request->session()->get('google_user_data');
|
||||||
|
|
||||||
$user = $this->userRepository->getByEmail($userData['email']);
|
$user = $this->userRepository->getByEmail($userData['email']);
|
||||||
|
|
||||||
@ -114,12 +122,12 @@ class LoginController
|
|||||||
|
|
||||||
public function getRequestPasswordResetForm()
|
public function getRequestPasswordResetForm()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new HtmlContent('login/password_reset_request', ['email' => \Container::$request->query('email')]);
|
return new HtmlContent('login/password_reset_request', ['email' => $this->request->query('email')]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getRequestPasswordResetSuccess(): IContent
|
public function getRequestPasswordResetSuccess(): IContent
|
||||||
@ -129,12 +137,12 @@ class LoginController
|
|||||||
|
|
||||||
public function getResetPasswordForm()
|
public function getResetPasswordForm()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
$token = \Container::$request->query('token');
|
$token = $this->request->query('token');
|
||||||
$resetter = $this->userPasswordResetterRepository->getByToken($token);
|
$resetter = $this->userPasswordResetterRepository->getByToken($token);
|
||||||
|
|
||||||
if ($resetter === null || $resetter->getExpiresDate() < new DateTime()) {
|
if ($resetter === null || $resetter->getExpiresDate() < new DateTime()) {
|
||||||
@ -148,15 +156,15 @@ class LoginController
|
|||||||
|
|
||||||
public function login(): IContent
|
public function login(): IContent
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $this->userRepository->getByEmail(\Container::$request->post('email'));
|
$user = $this->userRepository->getByEmail($this->request->post('email'));
|
||||||
|
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
if (strlen(\Container::$request->post('password')) < 6) {
|
if (strlen($this->request->post('password')) < 6) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'The given password is too short. Please choose a password that is at least 6 characters long!'
|
'errorText' => 'The given password is too short. Please choose a password that is at least 6 characters long!'
|
||||||
@ -165,10 +173,10 @@ class LoginController
|
|||||||
}
|
}
|
||||||
|
|
||||||
$tmpUser = new User();
|
$tmpUser = new User();
|
||||||
$tmpUser->setPlainPassword(\Container::$request->post('password'));
|
$tmpUser->setPlainPassword($this->request->post('password'));
|
||||||
|
|
||||||
\Container::$request->session()->set('tmp_user_data', [
|
$this->request->session()->set('tmp_user_data', [
|
||||||
'email' => \Container::$request->post('email'),
|
'email' => $this->request->post('email'),
|
||||||
'password_hashed' => $tmpUser->getPassword()
|
'password_hashed' => $tmpUser->getPassword()
|
||||||
]);
|
]);
|
||||||
|
|
||||||
@ -190,7 +198,7 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$user->checkPassword(\Container::$request->post('password'))) {
|
if (!$user->checkPassword($this->request->post('password'))) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'The given password is wrong. You can <a href="/password/requestReset?email=' .
|
'errorText' => 'The given password is wrong. You can <a href="/password/requestReset?email=' .
|
||||||
@ -199,7 +207,7 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$request->setUser($user);
|
$this->request->setUser($user);
|
||||||
|
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
@ -207,19 +215,19 @@ class LoginController
|
|||||||
|
|
||||||
public function loginWithGoogle()
|
public function loginWithGoogle()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Container::$request->query('state') !== \Container::$request->session()->get('oauth_state')) {
|
if ($this->request->query('state') !== $this->request->session()->get('oauth_state')) {
|
||||||
return new HtmlContent('login/google_login');
|
return new HtmlContent('login/google_login');
|
||||||
}
|
}
|
||||||
|
|
||||||
$oAuth = new GoogleOAuth(new Request());
|
$oAuth = new GoogleOAuth(new Request());
|
||||||
$tokenData = $oAuth->getToken(
|
$tokenData = $oAuth->getToken(
|
||||||
\Container::$request->query('code'),
|
$this->request->query('code'),
|
||||||
\Container::$request->getBase() . \Container::$routeCollection->getRoute('login-google-action')->generateLink()
|
$this->request->getBase() . \Container::$routeCollection->getRoute('login-google-action')->generateLink()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!isset($tokenData['id_token'])) {
|
if (!isset($tokenData['id_token'])) {
|
||||||
@ -229,7 +237,7 @@ class LoginController
|
|||||||
$jwtParser = new JwtParser($tokenData['id_token']);
|
$jwtParser = new JwtParser($tokenData['id_token']);
|
||||||
$idToken = $jwtParser->getPayload();
|
$idToken = $jwtParser->getPayload();
|
||||||
|
|
||||||
if ($idToken['nonce'] !== \Container::$request->session()->get('oauth_nonce')) {
|
if ($idToken['nonce'] !== $this->request->session()->get('oauth_nonce')) {
|
||||||
return new HtmlContent('login/google_login');
|
return new HtmlContent('login/google_login');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -240,12 +248,12 @@ class LoginController
|
|||||||
$user = $this->userRepository->getByGoogleSub($idToken['sub']);
|
$user = $this->userRepository->getByGoogleSub($idToken['sub']);
|
||||||
|
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
\Container::$request->session()->set('google_user_data', ['sub' => $idToken['sub'], 'email' => $idToken['email']]);
|
$this->request->session()->set('google_user_data', ['sub' => $idToken['sub'], 'email' => $idToken['email']]);
|
||||||
|
|
||||||
return new Redirect(\Container::$routeCollection->getRoute('signup-google')->generateLink(), IRedirect::TEMPORARY);
|
return new Redirect(\Container::$routeCollection->getRoute('signup-google')->generateLink(), IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$request->setUser($user);
|
$this->request->setUser($user);
|
||||||
|
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
@ -253,23 +261,23 @@ class LoginController
|
|||||||
|
|
||||||
public function logout(): IRedirect
|
public function logout(): IRedirect
|
||||||
{
|
{
|
||||||
\Container::$request->setUser(null);
|
$this->request->setUser(null);
|
||||||
|
|
||||||
return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY);
|
return new Redirect(\Container::$routeCollection->getRoute('index')->generateLink(), IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function signup(): IContent
|
public function signup(): IContent
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent(['redirect' => ['target' => $this->redirectUrl]]);
|
return new JsonContent(['redirect' => ['target' => $this->redirectUrl]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $this->userRepository->getByEmail(\Container::$request->post('email'));
|
$user = $this->userRepository->getByEmail($this->request->post('email'));
|
||||||
|
|
||||||
if ($user !== null) {
|
if ($user !== null) {
|
||||||
if ($user->getActive()) {
|
if ($user->getActive()) {
|
||||||
if (!$user->checkPassword(\Container::$request->post('password'))) {
|
if (!$user->checkPassword($this->request->post('password'))) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'There is a user already registered with the given email address, ' .
|
'errorText' => 'There is a user already registered with the given email address, ' .
|
||||||
@ -279,7 +287,7 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$request->setUser($user);
|
$this->request->setUser($user);
|
||||||
|
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
$data = ['redirect' => ['target' => $this->redirectUrl]];
|
$data = ['redirect' => ['target' => $this->redirectUrl]];
|
||||||
@ -295,32 +303,32 @@ class LoginController
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_ENV['RECAPTCHA_SITEKEY'])) {
|
if (!empty($_ENV['RECAPTCHA_SITEKEY'])) {
|
||||||
if (!\Container::$request->post('g-recaptcha-response')) {
|
if (!$this->request->post('g-recaptcha-response')) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'Please check "I\'m not a robot" in the reCAPTCHA box!']]);
|
return new JsonContent(['error' => ['errorText' => 'Please check "I\'m not a robot" in the reCAPTCHA box!']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$captchaValidator = new CaptchaValidator();
|
$captchaValidator = new CaptchaValidator();
|
||||||
$captchaResponse = $captchaValidator->validate(\Container::$request->post('g-recaptcha-response'));
|
$captchaResponse = $captchaValidator->validate($this->request->post('g-recaptcha-response'));
|
||||||
if (!$captchaResponse['success']) {
|
if (!$captchaResponse['success']) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'reCAPTCHA challenge failed. Please try again!']]);
|
return new JsonContent(['error' => ['errorText' => 'reCAPTCHA challenge failed. Please try again!']]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter_var(\Container::$request->post('email'), FILTER_VALIDATE_EMAIL) === false) {
|
if (filter_var($this->request->post('email'), FILTER_VALIDATE_EMAIL) === false) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'The given email address is not valid.']]);
|
return new JsonContent(['error' => ['errorText' => 'The given email address is not valid.']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Container::$request->session()->has('tmp_user_data')) {
|
if ($this->request->session()->has('tmp_user_data')) {
|
||||||
$tmpUserData = \Container::$request->session()->get('tmp_user_data');
|
$tmpUserData = $this->request->session()->get('tmp_user_data');
|
||||||
|
|
||||||
$tmpUser = new User();
|
$tmpUser = new User();
|
||||||
$tmpUser->setPassword($tmpUserData['password_hashed']);
|
$tmpUser->setPassword($tmpUserData['password_hashed']);
|
||||||
|
|
||||||
if (!$tmpUser->checkPassword(\Container::$request->post('password'))) {
|
if (!$tmpUser->checkPassword($this->request->post('password'))) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'The given passwords do not match.']]);
|
return new JsonContent(['error' => ['errorText' => 'The given passwords do not match.']]);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (strlen(\Container::$request->post('password')) < 6) {
|
if (strlen($this->request->post('password')) < 6) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'The given password is too short. Please choose a password that is at least 6 characters long!'
|
'errorText' => 'The given password is too short. Please choose a password that is at least 6 characters long!'
|
||||||
@ -328,17 +336,17 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Container::$request->post('password') !== \Container::$request->post('password_confirm')) {
|
if ($this->request->post('password') !== $this->request->post('password_confirm')) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'The given passwords do not match.']]);
|
return new JsonContent(['error' => ['errorText' => 'The given passwords do not match.']]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = new User();
|
$user = new User();
|
||||||
$user->setEmail(\Container::$request->post('email'));
|
$user->setEmail($this->request->post('email'));
|
||||||
$user->setPlainPassword(\Container::$request->post('password'));
|
$user->setPlainPassword($this->request->post('password'));
|
||||||
$user->setCreatedDate(new DateTime());
|
$user->setCreatedDate(new DateTime());
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($user);
|
$this->pdm->saveToDb($user);
|
||||||
|
|
||||||
$token = bin2hex(random_bytes(16));
|
$token = bin2hex(random_bytes(16));
|
||||||
|
|
||||||
@ -347,23 +355,23 @@ class LoginController
|
|||||||
$confirmation->setToken($token);
|
$confirmation->setToken($token);
|
||||||
$confirmation->setLastSentDate(new DateTime());
|
$confirmation->setLastSentDate(new DateTime());
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($confirmation);
|
$this->pdm->saveToDb($confirmation);
|
||||||
|
|
||||||
$this->sendConfirmationEmail($user->getEmail(), $token, $user->getCreatedDate());
|
$this->sendConfirmationEmail($user->getEmail(), $token, $user->getCreatedDate());
|
||||||
|
|
||||||
\Container::$request->session()->delete('tmp_user_data');
|
$this->request->session()->delete('tmp_user_data');
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function signupWithGoogle(): IContent
|
public function signupWithGoogle(): IContent
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userData = \Container::$request->session()->get('google_user_data');
|
$userData = $this->request->session()->get('google_user_data');
|
||||||
|
|
||||||
$user = $this->userRepository->getByEmail($userData['email']);
|
$user = $this->userRepository->getByEmail($userData['email']);
|
||||||
|
|
||||||
@ -380,14 +388,14 @@ class LoginController
|
|||||||
$user->setActive(true);
|
$user->setActive(true);
|
||||||
$user->setGoogleSub($userData['sub']);
|
$user->setGoogleSub($userData['sub']);
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($user);
|
$this->pdm->saveToDb($user);
|
||||||
|
|
||||||
if ($sendWelcomeEmail) {
|
if ($sendWelcomeEmail) {
|
||||||
$this->sendWelcomeEmail($user->getEmail());
|
$this->sendWelcomeEmail($user->getEmail());
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$request->session()->delete('google_user_data');
|
$this->request->session()->delete('google_user_data');
|
||||||
\Container::$request->setUser($user);
|
$this->request->setUser($user);
|
||||||
|
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
@ -395,39 +403,39 @@ class LoginController
|
|||||||
|
|
||||||
public function resetSignup(): IContent
|
public function resetSignup(): IContent
|
||||||
{
|
{
|
||||||
\Container::$request->session()->delete('tmp_user_data');
|
$this->request->session()->delete('tmp_user_data');
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function resetGoogleSignup(): IContent
|
public function resetGoogleSignup(): IContent
|
||||||
{
|
{
|
||||||
\Container::$request->session()->delete('google_user_data');
|
$this->request->session()->delete('google_user_data');
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function activate()
|
public function activate()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
$confirmation = $this->userConfirmationRepository->getByToken(substr(\Container::$request->query('token'), 0, 32));
|
$confirmation = $this->userConfirmationRepository->getByToken(substr($this->request->query('token'), 0, 32));
|
||||||
|
|
||||||
if ($confirmation === null) {
|
if ($confirmation === null) {
|
||||||
return new HtmlContent('login/activate');
|
return new HtmlContent('login/activate');
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($confirmation);
|
$this->pdm->deleteFromDb($confirmation);
|
||||||
|
|
||||||
$user = $this->userRepository->getById($confirmation->getUserId());
|
$user = $this->userRepository->getById($confirmation->getUserId());
|
||||||
$user->setActive(true);
|
$user->setActive(true);
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($user);
|
$this->pdm->saveToDb($user);
|
||||||
|
|
||||||
\Container::$request->setUser($user);
|
$this->request->setUser($user);
|
||||||
|
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
@ -435,33 +443,33 @@ class LoginController
|
|||||||
|
|
||||||
public function cancel()
|
public function cancel()
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
return new Redirect($this->redirectUrl, IRedirect::TEMPORARY);
|
||||||
}
|
}
|
||||||
|
|
||||||
$confirmation = $this->userConfirmationRepository->getByToken(substr(\Container::$request->query('token'), 0, 32));
|
$confirmation = $this->userConfirmationRepository->getByToken(substr($this->request->query('token'), 0, 32));
|
||||||
|
|
||||||
if ($confirmation === null) {
|
if ($confirmation === null) {
|
||||||
return new HtmlContent('login/cancel', ['success' => false]);
|
return new HtmlContent('login/cancel', ['success' => false]);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($confirmation);
|
$this->pdm->deleteFromDb($confirmation);
|
||||||
|
|
||||||
$user = $this->userRepository->getById($confirmation->getUserId());
|
$user = $this->userRepository->getById($confirmation->getUserId());
|
||||||
|
|
||||||
foreach ($this->userPlayedPlaceRepository->getAllByUser($user) as $userPlayedPlace) {
|
foreach ($this->userPlayedPlaceRepository->getAllByUser($user) as $userPlayedPlace) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userPlayedPlace);
|
$this->pdm->deleteFromDb($userPlayedPlace);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($user);
|
$this->pdm->deleteFromDb($user);
|
||||||
|
|
||||||
return new HtmlContent('login/cancel', ['success' => true]);
|
return new HtmlContent('login/cancel', ['success' => true]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function requestPasswordReset(): IContent
|
public function requestPasswordReset(): IContent
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'redirect' => [
|
'redirect' => [
|
||||||
@ -471,18 +479,18 @@ class LoginController
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($_ENV['RECAPTCHA_SITEKEY'])) {
|
if (!empty($_ENV['RECAPTCHA_SITEKEY'])) {
|
||||||
if (!\Container::$request->post('g-recaptcha-response')) {
|
if (!$this->request->post('g-recaptcha-response')) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'Please check "I\'m not a robot" in the reCAPTCHA box!']]);
|
return new JsonContent(['error' => ['errorText' => 'Please check "I\'m not a robot" in the reCAPTCHA box!']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$captchaValidator = new CaptchaValidator();
|
$captchaValidator = new CaptchaValidator();
|
||||||
$captchaResponse = $captchaValidator->validate(\Container::$request->post('g-recaptcha-response'));
|
$captchaResponse = $captchaValidator->validate($this->request->post('g-recaptcha-response'));
|
||||||
if (!$captchaResponse['success']) {
|
if (!$captchaResponse['success']) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'reCAPTCHA challenge failed. Please try again!']]);
|
return new JsonContent(['error' => ['errorText' => 'reCAPTCHA challenge failed. Please try again!']]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$user = $this->userRepository->getByEmail(\Container::$request->post('email'));
|
$user = $this->userRepository->getByEmail($this->request->post('email'));
|
||||||
|
|
||||||
if ($user === null) {
|
if ($user === null) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
@ -522,10 +530,10 @@ class LoginController
|
|||||||
$passwordResetter->setExpiresDate($expires);
|
$passwordResetter->setExpiresDate($expires);
|
||||||
|
|
||||||
if ($existingResetter !== null) {
|
if ($existingResetter !== null) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($existingResetter);
|
$this->pdm->deleteFromDb($existingResetter);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($passwordResetter);
|
$this->pdm->saveToDb($passwordResetter);
|
||||||
|
|
||||||
$this->sendPasswordResetEmail($user->getEmail(), $token, $expires);
|
$this->sendPasswordResetEmail($user->getEmail(), $token, $expires);
|
||||||
|
|
||||||
@ -535,7 +543,7 @@ class LoginController
|
|||||||
|
|
||||||
public function resetPassword(): IContent
|
public function resetPassword(): IContent
|
||||||
{
|
{
|
||||||
if (\Container::$request->user() !== null) {
|
if ($this->request->user() !== null) {
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'redirect' => [
|
'redirect' => [
|
||||||
@ -544,7 +552,7 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$token = \Container::$request->query('token');
|
$token = $this->request->query('token');
|
||||||
$resetter = $this->userPasswordResetterRepository->getByToken($token);
|
$resetter = $this->userPasswordResetterRepository->getByToken($token);
|
||||||
|
|
||||||
if ($resetter === null || $resetter->getExpiresDate() < new DateTime()) {
|
if ($resetter === null || $resetter->getExpiresDate() < new DateTime()) {
|
||||||
@ -555,7 +563,7 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(\Container::$request->post('password')) < 6) {
|
if (strlen($this->request->post('password')) < 6) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'The given password is too short. Please choose a password that is at least 6 characters long!'
|
'errorText' => 'The given password is too short. Please choose a password that is at least 6 characters long!'
|
||||||
@ -563,18 +571,18 @@ class LoginController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Container::$request->post('password') !== \Container::$request->post('password_confirm')) {
|
if ($this->request->post('password') !== $this->request->post('password_confirm')) {
|
||||||
return new JsonContent(['error' => ['errorText' => 'The given passwords do not match.']]);
|
return new JsonContent(['error' => ['errorText' => 'The given passwords do not match.']]);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($resetter);
|
$this->pdm->deleteFromDb($resetter);
|
||||||
|
|
||||||
$user = $this->userRepository->getById($resetter->getUserId());
|
$user = $this->userRepository->getById($resetter->getUserId());
|
||||||
$user->setPlainPassword(\Container::$request->post('password'));
|
$user->setPlainPassword($this->request->post('password'));
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($user);
|
$this->pdm->saveToDb($user);
|
||||||
|
|
||||||
\Container::$request->setUser($user);
|
$this->request->setUser($user);
|
||||||
|
|
||||||
$this->deleteRedirectUrl();
|
$this->deleteRedirectUrl();
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
@ -587,9 +595,9 @@ class LoginController
|
|||||||
$mail->setSubject('Welcome to ' . $_ENV['APP_NAME'] . ' - Activate your account');
|
$mail->setSubject('Welcome to ' . $_ENV['APP_NAME'] . ' - Activate your account');
|
||||||
$mail->setBodyFromTemplate('signup', [
|
$mail->setBodyFromTemplate('signup', [
|
||||||
'EMAIL' => $email,
|
'EMAIL' => $email,
|
||||||
'ACTIVATE_LINK' => \Container::$request->getBase() .
|
'ACTIVATE_LINK' => $this->request->getBase() .
|
||||||
\Container::$routeCollection->getRoute('signup.activate')->generateLink(['token' => $token]),
|
\Container::$routeCollection->getRoute('signup.activate')->generateLink(['token' => $token]),
|
||||||
'CANCEL_LINK' => \Container::$request->getBase() .
|
'CANCEL_LINK' => $this->request->getBase() .
|
||||||
\Container::$routeCollection->getRoute('signup.cancel')->generateLink(['token' => $token]),
|
\Container::$routeCollection->getRoute('signup.cancel')->generateLink(['token' => $token]),
|
||||||
'ACTIVATABLE_UNTIL' => (clone $created)->add(new DateInterval('P1D'))->format('Y-m-d H:i T')
|
'ACTIVATABLE_UNTIL' => (clone $created)->add(new DateInterval('P1D'))->format('Y-m-d H:i T')
|
||||||
]);
|
]);
|
||||||
@ -606,7 +614,7 @@ class LoginController
|
|||||||
|
|
||||||
$confirmation->setLastSentDate(new DateTime());
|
$confirmation->setLastSentDate(new DateTime());
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($confirmation);
|
$this->pdm->saveToDb($confirmation);
|
||||||
|
|
||||||
$this->sendConfirmationEmail($user->getEmail(), $confirmation->getToken(), $user->getCreatedDate());
|
$this->sendConfirmationEmail($user->getEmail(), $confirmation->getToken(), $user->getCreatedDate());
|
||||||
|
|
||||||
@ -631,7 +639,7 @@ class LoginController
|
|||||||
$mail->setSubject($_ENV['APP_NAME'] . ' - Password reset');
|
$mail->setSubject($_ENV['APP_NAME'] . ' - Password reset');
|
||||||
$mail->setBodyFromTemplate('password-reset', [
|
$mail->setBodyFromTemplate('password-reset', [
|
||||||
'EMAIL' => $email,
|
'EMAIL' => $email,
|
||||||
'RESET_LINK' => \Container::$request->getBase() .
|
'RESET_LINK' => $this->request->getBase() .
|
||||||
\Container::$routeCollection->getRoute('password-reset')->generateLink(['token' => $token]),
|
\Container::$routeCollection->getRoute('password-reset')->generateLink(['token' => $token]),
|
||||||
'EXPIRES' => $expires->format('Y-m-d H:i T')
|
'EXPIRES' => $expires->format('Y-m-d H:i T')
|
||||||
]);
|
]);
|
||||||
@ -640,6 +648,6 @@ class LoginController
|
|||||||
|
|
||||||
private function deleteRedirectUrl(): void
|
private function deleteRedirectUrl(): void
|
||||||
{
|
{
|
||||||
\Container::$request->session()->delete('redirect_after_login');
|
$this->request->session()->delete('redirect_after_login');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,11 +4,13 @@ use DateTime;
|
|||||||
use SokoWeb\Interfaces\Authentication\IUser;
|
use SokoWeb\Interfaces\Authentication\IUser;
|
||||||
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
||||||
use SokoWeb\Interfaces\Authorization\ISecured;
|
use SokoWeb\Interfaces\Authorization\ISecured;
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\Map;
|
use MapGuesser\PersistentData\Model\Map;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\Repository\ChallengeRepository;
|
use MapGuesser\Repository\ChallengeRepository;
|
||||||
use MapGuesser\Repository\GuessRepository;
|
use MapGuesser\Repository\GuessRepository;
|
||||||
use MapGuesser\Repository\MapRepository;
|
use MapGuesser\Repository\MapRepository;
|
||||||
@ -25,6 +27,10 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
{
|
{
|
||||||
private static string $unnamedMapName = '[unnamed map]';
|
private static string $unnamedMapName = '[unnamed map]';
|
||||||
|
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
private MapRepository $mapRepository;
|
private MapRepository $mapRepository;
|
||||||
|
|
||||||
private PlaceRepository $placeRepository;
|
private PlaceRepository $placeRepository;
|
||||||
@ -39,8 +45,10 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
|
|
||||||
private UserInChallengeRepository $userInChallengeRepository;
|
private UserInChallengeRepository $userInChallengeRepository;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(IRequest $request)
|
||||||
{
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
$this->mapRepository = new MapRepository();
|
$this->mapRepository = new MapRepository();
|
||||||
$this->placeRepository = new PlaceRepository();
|
$this->placeRepository = new PlaceRepository();
|
||||||
$this->userPlayedPlaceRepository = new UserPlayedPlaceRepository();
|
$this->userPlayedPlaceRepository = new UserPlayedPlaceRepository();
|
||||||
@ -57,12 +65,12 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
|
|
||||||
public function authorize(): bool
|
public function authorize(): bool
|
||||||
{
|
{
|
||||||
return \Container::$request->user()->hasPermission(IUser::PERMISSION_ADMIN);
|
return $this->request->user()->hasPermission(IUser::PERMISSION_ADMIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getMapEditor(): IContent
|
public function getMapEditor(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
|
|
||||||
if ($mapId) {
|
if ($mapId) {
|
||||||
$map = $this->mapRepository->getById($mapId);
|
$map = $this->mapRepository->getById($mapId);
|
||||||
@ -85,7 +93,7 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
|
|
||||||
public function getPlace(): IContent
|
public function getPlace(): IContent
|
||||||
{
|
{
|
||||||
$placeId = (int) \Container::$request->query('placeId');
|
$placeId = (int) $this->request->query('placeId');
|
||||||
|
|
||||||
$place = $this->placeRepository->getById($placeId);
|
$place = $this->placeRepository->getById($placeId);
|
||||||
|
|
||||||
@ -94,14 +102,14 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
|
|
||||||
public function saveMap(): IContent
|
public function saveMap(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
|
|
||||||
if ($mapId) {
|
if ($mapId) {
|
||||||
$map = $this->mapRepository->getById($mapId);
|
$map = $this->mapRepository->getById($mapId);
|
||||||
} else {
|
} else {
|
||||||
$map = new Map();
|
$map = new Map();
|
||||||
$map->setName(self::$unnamedMapName);
|
$map->setName(self::$unnamedMapName);
|
||||||
\Container::$persistentDataManager->saveToDb($map);
|
$this->pdm->saveToDb($map);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset($_POST['added'])) {
|
if (isset($_POST['added'])) {
|
||||||
@ -123,7 +131,7 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
$place->setPanoIdCachedTimestampDate(new DateTime('-1 day'));
|
$place->setPanoIdCachedTimestampDate(new DateTime('-1 day'));
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($place);
|
$this->pdm->saveToDb($place);
|
||||||
|
|
||||||
$addedIds[] = ['tempId' => $placeRaw['id'], 'id' => $place->getId()];
|
$addedIds[] = ['tempId' => $placeRaw['id'], 'id' => $place->getId()];
|
||||||
}
|
}
|
||||||
@ -145,7 +153,7 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
));
|
));
|
||||||
$place->setPanoIdCachedTimestampDate(new DateTime('-1 day'));
|
$place->setPanoIdCachedTimestampDate(new DateTime('-1 day'));
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($place);
|
$this->pdm->saveToDb($place);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -174,20 +182,20 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
$map->setUnlisted((bool)$_POST['unlisted']);
|
$map->setUnlisted((bool)$_POST['unlisted']);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($map);
|
$this->pdm->saveToDb($map);
|
||||||
|
|
||||||
return new JsonContent(['mapId' => $map->getId(), 'added' => $addedIds]);
|
return new JsonContent(['mapId' => $map->getId(), 'added' => $addedIds]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteMap(): IContent
|
public function deleteMap(): IContent
|
||||||
{
|
{
|
||||||
$mapId = (int) \Container::$request->query('mapId');
|
$mapId = (int) $this->request->query('mapId');
|
||||||
|
|
||||||
$map = $this->mapRepository->getById($mapId);
|
$map = $this->mapRepository->getById($mapId);
|
||||||
|
|
||||||
$this->deletePlaces($map);
|
$this->deletePlaces($map);
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($map);
|
$this->pdm->deleteFromDb($map);
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
@ -195,14 +203,14 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
private function deletePlace(Place $place): void
|
private function deletePlace(Place $place): void
|
||||||
{
|
{
|
||||||
foreach ($this->userPlayedPlaceRepository->getAllByPlace($place) as $userPlayedPlace) {
|
foreach ($this->userPlayedPlaceRepository->getAllByPlace($place) as $userPlayedPlace) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userPlayedPlace);
|
$this->pdm->deleteFromDb($userPlayedPlace);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->challengeRepository->getAllByPlace($place) as $challenge) {
|
foreach ($this->challengeRepository->getAllByPlace($place) as $challenge) {
|
||||||
$this->deleteChallenge($challenge);
|
$this->deleteChallenge($challenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($place);
|
$this->pdm->deleteFromDb($place);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function deletePlaces(Map $map): void
|
private function deletePlaces(Map $map): void
|
||||||
@ -215,18 +223,18 @@ class MapAdminController implements IAuthenticationRequired, ISecured
|
|||||||
private function deleteChallenge(Challenge $challenge): void
|
private function deleteChallenge(Challenge $challenge): void
|
||||||
{
|
{
|
||||||
foreach ($this->userInChallengeRepository->getAllByChallenge($challenge) as $userInChallenge) {
|
foreach ($this->userInChallengeRepository->getAllByChallenge($challenge) as $userInChallenge) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userInChallenge);
|
$this->pdm->deleteFromDb($userInChallenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->guessRepository->getAllInChallenge($challenge, [PlaceInChallenge::class]) as $guess) {
|
foreach ($this->guessRepository->getAllInChallenge($challenge, [PlaceInChallenge::class]) as $guess) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($guess);
|
$this->pdm->deleteFromDb($guess);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->placeInChallengeRepository->getAllByChallenge($challenge) as $placeInChallenge) {
|
foreach ($this->placeInChallengeRepository->getAllByChallenge($challenge) as $placeInChallenge) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($placeInChallenge);
|
$this->pdm->deleteFromDb($placeInChallenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($challenge);
|
$this->pdm->deleteFromDb($challenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function calculateMapBounds(Map $map): Bounds
|
private function calculateMapBounds(Map $map): Bounds
|
||||||
|
@ -4,11 +4,19 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use SokoWeb\Database\RawExpression;
|
use SokoWeb\Database\RawExpression;
|
||||||
use SokoWeb\Interfaces\Authentication\IUser;
|
use SokoWeb\Interfaces\Authentication\IUser;
|
||||||
use SokoWeb\Interfaces\Database\IResultSet;
|
use SokoWeb\Interfaces\Database\IResultSet;
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
use SokoWeb\Response\HtmlContent;
|
use SokoWeb\Response\HtmlContent;
|
||||||
|
|
||||||
class MapsController
|
class MapsController
|
||||||
{
|
{
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
public function __construct(IRequest $request)
|
||||||
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
}
|
||||||
|
|
||||||
public function getMaps(): IContent
|
public function getMaps(): IContent
|
||||||
{
|
{
|
||||||
//TODO: from repository - count should be added
|
//TODO: from repository - count should be added
|
||||||
@ -29,7 +37,7 @@ class MapsController
|
|||||||
$select->groupBy(['maps', 'id']);
|
$select->groupBy(['maps', 'id']);
|
||||||
$select->orderBy('name');
|
$select->orderBy('name');
|
||||||
|
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
$isAdmin = $user !== null && $user->hasPermission(IUser::PERMISSION_ADMIN);
|
$isAdmin = $user !== null && $user->hasPermission(IUser::PERMISSION_ADMIN);
|
||||||
if (!$isAdmin) {
|
if (!$isAdmin) {
|
||||||
$select->where(['maps', 'unlisted'], '=', false);
|
$select->where(['maps', 'unlisted'], '=', false);
|
||||||
|
@ -3,9 +3,11 @@
|
|||||||
use DateTime;
|
use DateTime;
|
||||||
use SokoWeb\Http\Request;
|
use SokoWeb\Http\Request;
|
||||||
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
use SokoWeb\Interfaces\Authentication\IAuthenticationRequired;
|
||||||
|
use SokoWeb\Interfaces\Request\IRequest;
|
||||||
use SokoWeb\Interfaces\Response\IContent;
|
use SokoWeb\Interfaces\Response\IContent;
|
||||||
use SokoWeb\Interfaces\Response\IRedirect;
|
use SokoWeb\Interfaces\Response\IRedirect;
|
||||||
use SokoWeb\OAuth\GoogleOAuth;
|
use SokoWeb\OAuth\GoogleOAuth;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\Repository\GuessRepository;
|
use MapGuesser\Repository\GuessRepository;
|
||||||
use MapGuesser\Repository\UserConfirmationRepository;
|
use MapGuesser\Repository\UserConfirmationRepository;
|
||||||
@ -19,6 +21,10 @@ use SokoWeb\Util\JwtParser;
|
|||||||
|
|
||||||
class UserController implements IAuthenticationRequired
|
class UserController implements IAuthenticationRequired
|
||||||
{
|
{
|
||||||
|
private IRequest $request;
|
||||||
|
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
private UserConfirmationRepository $userConfirmationRepository;
|
private UserConfirmationRepository $userConfirmationRepository;
|
||||||
|
|
||||||
private UserPasswordResetterRepository $userPasswordResetterRepository;
|
private UserPasswordResetterRepository $userPasswordResetterRepository;
|
||||||
@ -29,8 +35,10 @@ class UserController implements IAuthenticationRequired
|
|||||||
|
|
||||||
private GuessRepository $guessRepository;
|
private GuessRepository $guessRepository;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct(IRequest $request)
|
||||||
{
|
{
|
||||||
|
$this->request = $request;
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
$this->userConfirmationRepository = new UserConfirmationRepository();
|
$this->userConfirmationRepository = new UserConfirmationRepository();
|
||||||
$this->userPasswordResetterRepository = new UserPasswordResetterRepository();
|
$this->userPasswordResetterRepository = new UserPasswordResetterRepository();
|
||||||
$this->userPlayedPlaceRepository = new UserPlayedPlaceRepository();
|
$this->userPlayedPlaceRepository = new UserPlayedPlaceRepository();
|
||||||
@ -48,7 +56,7 @@ class UserController implements IAuthenticationRequired
|
|||||||
/**
|
/**
|
||||||
* @var User $user
|
* @var User $user
|
||||||
*/
|
*/
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
return new HtmlContent('account/account', ['user' => $user->toArray()]);
|
return new HtmlContent('account/account', ['user' => $user->toArray()]);
|
||||||
}
|
}
|
||||||
@ -58,19 +66,19 @@ class UserController implements IAuthenticationRequired
|
|||||||
/**
|
/**
|
||||||
* @var User $user
|
* @var User $user
|
||||||
*/
|
*/
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
$state = bin2hex(random_bytes(16));
|
$state = bin2hex(random_bytes(16));
|
||||||
$nonce = bin2hex(random_bytes(16));
|
$nonce = bin2hex(random_bytes(16));
|
||||||
|
|
||||||
\Container::$request->session()->set('oauth_state', $state);
|
$this->request->session()->set('oauth_state', $state);
|
||||||
\Container::$request->session()->set('oauth_nonce', $nonce);
|
$this->request->session()->set('oauth_nonce', $nonce);
|
||||||
|
|
||||||
$oAuth = new GoogleOAuth(new Request());
|
$oAuth = new GoogleOAuth(new Request());
|
||||||
|
|
||||||
$url = $oAuth->getDialogUrl(
|
$url = $oAuth->getDialogUrl(
|
||||||
$state,
|
$state,
|
||||||
\Container::$request->getBase() . \Container::$routeCollection->getRoute('account.googleAuthenticate-action')->generateLink(),
|
$this->request->getBase() . \Container::$routeCollection->getRoute('account.googleAuthenticate-action')->generateLink(),
|
||||||
$nonce,
|
$nonce,
|
||||||
$user->getEmail()
|
$user->getEmail()
|
||||||
);
|
);
|
||||||
@ -83,16 +91,16 @@ class UserController implements IAuthenticationRequired
|
|||||||
/**
|
/**
|
||||||
* @var User $user
|
* @var User $user
|
||||||
*/
|
*/
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
if (\Container::$request->query('state') !== \Container::$request->session()->get('oauth_state')) {
|
if ($this->request->query('state') !== $this->request->session()->get('oauth_state')) {
|
||||||
return new HtmlContent('account/google_authenticate', ['success' => false]);
|
return new HtmlContent('account/google_authenticate', ['success' => false]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$oAuth = new GoogleOAuth(new Request());
|
$oAuth = new GoogleOAuth(new Request());
|
||||||
$tokenData = $oAuth->getToken(
|
$tokenData = $oAuth->getToken(
|
||||||
\Container::$request->query('code'),
|
$this->request->query('code'),
|
||||||
\Container::$request->getBase() . \Container::$routeCollection->getRoute('account.googleAuthenticate-action')->generateLink()
|
$this->request->getBase() . \Container::$routeCollection->getRoute('account.googleAuthenticate-action')->generateLink()
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!isset($tokenData['id_token'])) {
|
if (!isset($tokenData['id_token'])) {
|
||||||
@ -102,7 +110,7 @@ class UserController implements IAuthenticationRequired
|
|||||||
$jwtParser = new JwtParser($tokenData['id_token']);
|
$jwtParser = new JwtParser($tokenData['id_token']);
|
||||||
$idToken = $jwtParser->getPayload();
|
$idToken = $jwtParser->getPayload();
|
||||||
|
|
||||||
if ($idToken['nonce'] !== \Container::$request->session()->get('oauth_nonce')) {
|
if ($idToken['nonce'] !== $this->request->session()->get('oauth_nonce')) {
|
||||||
return new HtmlContent('account/google_authenticate', ['success' => false]);
|
return new HtmlContent('account/google_authenticate', ['success' => false]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,7 +122,7 @@ class UserController implements IAuthenticationRequired
|
|||||||
}
|
}
|
||||||
|
|
||||||
$authenticatedWithGoogleUntil = new DateTime('+45 seconds');
|
$authenticatedWithGoogleUntil = new DateTime('+45 seconds');
|
||||||
\Container::$request->session()->set('authenticated_with_google_until', $authenticatedWithGoogleUntil);
|
$this->request->session()->set('authenticated_with_google_until', $authenticatedWithGoogleUntil);
|
||||||
|
|
||||||
return new HtmlContent('account/google_authenticate', [
|
return new HtmlContent('account/google_authenticate', [
|
||||||
'success' => true,
|
'success' => true,
|
||||||
@ -127,7 +135,7 @@ class UserController implements IAuthenticationRequired
|
|||||||
/**
|
/**
|
||||||
* @var User $user
|
* @var User $user
|
||||||
*/
|
*/
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
return new HtmlContent('account/delete', ['user' => $user->toArray()]);
|
return new HtmlContent('account/delete', ['user' => $user->toArray()]);
|
||||||
}
|
}
|
||||||
@ -137,19 +145,19 @@ class UserController implements IAuthenticationRequired
|
|||||||
/**
|
/**
|
||||||
* @var User $user
|
* @var User $user
|
||||||
*/
|
*/
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
if (!$this->confirmUserIdentity(
|
if (!$this->confirmUserIdentity(
|
||||||
$user,
|
$user,
|
||||||
\Container::$request->session()->get('authenticated_with_google_until'),
|
$this->request->session()->get('authenticated_with_google_until'),
|
||||||
\Container::$request->post('password'),
|
$this->request->post('password'),
|
||||||
$error
|
$error
|
||||||
)) {
|
)) {
|
||||||
return new JsonContent(['error' => ['errorText' => $error]]);
|
return new JsonContent(['error' => ['errorText' => $error]]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strlen(\Container::$request->post('password_new')) > 0) {
|
if (strlen($this->request->post('password_new')) > 0) {
|
||||||
if (strlen(\Container::$request->post('password_new')) < 6) {
|
if (strlen($this->request->post('password_new')) < 6) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'The given new password is too short. Please choose a password that is at least 6 characters long!'
|
'errorText' => 'The given new password is too short. Please choose a password that is at least 6 characters long!'
|
||||||
@ -157,7 +165,7 @@ class UserController implements IAuthenticationRequired
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (\Container::$request->post('password_new') !== \Container::$request->post('password_new_confirm')) {
|
if ($this->request->post('password_new') !== $this->request->post('password_new_confirm')) {
|
||||||
return new JsonContent([
|
return new JsonContent([
|
||||||
'error' => [
|
'error' => [
|
||||||
'errorText' => 'The given new passwords do not match.'
|
'errorText' => 'The given new passwords do not match.'
|
||||||
@ -165,12 +173,12 @@ class UserController implements IAuthenticationRequired
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$user->setPlainPassword(\Container::$request->post('password_new'));
|
$user->setPlainPassword($this->request->post('password_new'));
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($user);
|
$this->pdm->saveToDb($user);
|
||||||
|
|
||||||
\Container::$request->session()->delete('authenticated_with_google_until');
|
$this->request->session()->delete('authenticated_with_google_until');
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
@ -180,12 +188,12 @@ class UserController implements IAuthenticationRequired
|
|||||||
/**
|
/**
|
||||||
* @var User $user
|
* @var User $user
|
||||||
*/
|
*/
|
||||||
$user = \Container::$request->user();
|
$user = $this->request->user();
|
||||||
|
|
||||||
if (!$this->confirmUserIdentity(
|
if (!$this->confirmUserIdentity(
|
||||||
$user,
|
$user,
|
||||||
\Container::$request->session()->get('authenticated_with_google_until'),
|
$this->request->session()->get('authenticated_with_google_until'),
|
||||||
\Container::$request->post('password'),
|
$this->request->post('password'),
|
||||||
$error
|
$error
|
||||||
)) {
|
)) {
|
||||||
return new JsonContent(['error' => ['errorText' => $error]]);
|
return new JsonContent(['error' => ['errorText' => $error]]);
|
||||||
@ -193,29 +201,29 @@ class UserController implements IAuthenticationRequired
|
|||||||
|
|
||||||
$userConfirmation = $this->userConfirmationRepository->getByUser($user);
|
$userConfirmation = $this->userConfirmationRepository->getByUser($user);
|
||||||
if ($userConfirmation !== null) {
|
if ($userConfirmation !== null) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userConfirmation);
|
$this->pdm->deleteFromDb($userConfirmation);
|
||||||
}
|
}
|
||||||
|
|
||||||
$userPasswordResetter = $this->userPasswordResetterRepository->getByUser($user);
|
$userPasswordResetter = $this->userPasswordResetterRepository->getByUser($user);
|
||||||
if ($userPasswordResetter !== null) {
|
if ($userPasswordResetter !== null) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userPasswordResetter);
|
$this->pdm->deleteFromDb($userPasswordResetter);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->userPlayedPlaceRepository->getAllByUser($user) as $userPlayedPlace) {
|
foreach ($this->userPlayedPlaceRepository->getAllByUser($user) as $userPlayedPlace) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userPlayedPlace);
|
$this->pdm->deleteFromDb($userPlayedPlace);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->userInChallengeRepository->getAllByUser($user) as $userInChallenge) {
|
foreach ($this->userInChallengeRepository->getAllByUser($user) as $userInChallenge) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($userInChallenge);
|
$this->pdm->deleteFromDb($userInChallenge);
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($this->guessRepository->getAllByUser($user) as $guess) {
|
foreach ($this->guessRepository->getAllByUser($user) as $guess) {
|
||||||
\Container::$persistentDataManager->deleteFromDb($guess);
|
$this->pdm->deleteFromDb($guess);
|
||||||
}
|
}
|
||||||
|
|
||||||
\Container::$persistentDataManager->deleteFromDb($user);
|
$this->pdm->deleteFromDb($user);
|
||||||
|
|
||||||
\Container::$request->session()->delete('authenticated_with_google_until');
|
$this->request->session()->delete('authenticated_with_google_until');
|
||||||
|
|
||||||
return new JsonContent(['success' => true]);
|
return new JsonContent(['success' => true]);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ use DateInterval;
|
|||||||
use DateTime;
|
use DateTime;
|
||||||
use SokoWeb\PersistentData\Model\Model;
|
use SokoWeb\PersistentData\Model\Model;
|
||||||
use SokoWeb\Http\Request;
|
use SokoWeb\Http\Request;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
use MapGuesser\Util\Geo\Position;
|
use MapGuesser\Util\Geo\Position;
|
||||||
use MapGuesser\Util\Panorama\Pov;
|
use MapGuesser\Util\Panorama\Pov;
|
||||||
|
|
||||||
@ -162,7 +163,7 @@ class Place extends Model
|
|||||||
$this->panoIdCached = $panoId;
|
$this->panoIdCached = $panoId;
|
||||||
$this->panoIdCachedTimestamp = new DateTime();
|
$this->panoIdCachedTimestamp = new DateTime();
|
||||||
|
|
||||||
\Container::$persistentDataManager->saveToDb($this);
|
(new PersistentDataManager())->saveToDb($this);
|
||||||
|
|
||||||
return $panoId;
|
return $panoId;
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,20 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class ChallengeRepository
|
class ChallengeRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $challengeId): ?Challenge
|
public function getById(int $challengeId): ?Challenge
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($challengeId, Challenge::class);
|
return $this->pdm->selectFromDbById($challengeId, Challenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByToken(int $token): ?Challenge
|
public function getByToken(int $token): ?Challenge
|
||||||
@ -18,7 +26,7 @@ class ChallengeRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('token', '=', $token);
|
$select->where('token', '=', $token);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, Challenge::class);
|
return $this->pdm->selectFromDb($select, Challenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByTokenStr(string $token_str): ?Challenge
|
public function getByTokenStr(string $token_str): ?Challenge
|
||||||
@ -42,7 +50,7 @@ class ChallengeRepository
|
|||||||
$select->innerJoin('users', ['users', 'id'], '=', ['user_in_challenge', 'user_id']);
|
$select->innerJoin('users', ['users', 'id'], '=', ['user_in_challenge', 'user_id']);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Challenge::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Challenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByOwner(User $user): Generator
|
public function getAllByOwner(User $user): Generator
|
||||||
@ -53,7 +61,7 @@ class ChallengeRepository
|
|||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
$select->where('is_owner', '=', true);
|
$select->where('is_owner', '=', true);
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Challenge::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Challenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByPlace(Place $place): Generator
|
public function getAllByPlace(Place $place): Generator
|
||||||
@ -62,6 +70,6 @@ class ChallengeRepository
|
|||||||
$select->innerJoin('place_in_challenge', ['challenges', 'id'], '=', ['place_in_challenge', 'challenge_id']);
|
$select->innerJoin('place_in_challenge', ['challenges', 'id'], '=', ['place_in_challenge', 'challenge_id']);
|
||||||
$select->where('place_id', '=', $place->getId());
|
$select->where('place_id', '=', $place->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Challenge::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Challenge::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,15 +7,23 @@ use MapGuesser\PersistentData\Model\Guess;
|
|||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class GuessRepository
|
class GuessRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getAllByUser(User $user): Generator
|
public function getAllByUser(User $user): Generator
|
||||||
{
|
{
|
||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Guess::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByUserAndChallenge(User $user, Challenge $challenge): Generator
|
public function getAllByUserAndChallenge(User $user, Challenge $challenge): Generator
|
||||||
@ -25,7 +33,7 @@ class GuessRepository
|
|||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Guess::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByUserAndPlaceInChallenge(User $user, Challenge $challenge, Place $place): ?Guess
|
public function getByUserAndPlaceInChallenge(User $user, Challenge $challenge, Place $place): ?Guess
|
||||||
@ -36,7 +44,7 @@ class GuessRepository
|
|||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
$select->where('place_id', '=', $place->getId());
|
$select->where('place_id', '=', $place->getId());
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, Guess::class);
|
return $this->pdm->selectFromDb($select, Guess::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllInChallengeByUser(int $userId, Challenge $challenge): Generator
|
public function getAllInChallengeByUser(int $userId, Challenge $challenge): Generator
|
||||||
@ -47,7 +55,7 @@ class GuessRepository
|
|||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
$select->orderBy('round');
|
$select->orderBy('round');
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Guess::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllInChallenge(Challenge $challenge, array $withRelations = []): Generator
|
public function getAllInChallenge(Challenge $challenge, array $withRelations = []): Generator
|
||||||
@ -61,7 +69,7 @@ class GuessRepository
|
|||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
$select->orderBy('round');
|
$select->orderBy('round');
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Guess::class, true, $withRelations);
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class, true, $withRelations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllInChallengeByRound(int $round, Challenge $challenge, array $withRelations = []): Generator
|
public function getAllInChallengeByRound(int $round, Challenge $challenge, array $withRelations = []): Generator
|
||||||
@ -75,7 +83,7 @@ class GuessRepository
|
|||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
$select->where('round', '=', $round);
|
$select->where('round', '=', $round);
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Guess::class, true, $withRelations);
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class, true, $withRelations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByPlace(Place $place): Generator
|
public function getAllByPlace(Place $place): Generator
|
||||||
@ -84,6 +92,6 @@ class GuessRepository
|
|||||||
$select->innerJoin('place_in_challenge', ['place_in_challenge', 'id'], '=', ['guesses', 'place_in_challenge_id']);
|
$select->innerJoin('place_in_challenge', ['place_in_challenge', 'id'], '=', ['guesses', 'place_in_challenge_id']);
|
||||||
$select->where('place_id', '=', $place->getId());
|
$select->where('place_id', '=', $place->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Guess::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Guess::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,20 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\Map;
|
use MapGuesser\PersistentData\Model\Map;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class MapRepository
|
class MapRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $mapId): ?Map
|
public function getById(int $mapId): ?Map
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($mapId, Map::class);
|
return $this->pdm->selectFromDbById($mapId, Map::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByPlace(Place $place): ?Map
|
public function getByPlace(Place $place): ?Map
|
||||||
@ -25,6 +33,6 @@ class MapRepository
|
|||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
$select->limit(1);
|
$select->limit(1);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, Map::class);
|
return $this->pdm->selectFromDb($select, Map::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,12 +4,20 @@ use DateTime;
|
|||||||
use Generator;
|
use Generator;
|
||||||
use SokoWeb\Database\Query\Select;
|
use SokoWeb\Database\Query\Select;
|
||||||
use MapGuesser\PersistentData\Model\MultiRoom;
|
use MapGuesser\PersistentData\Model\MultiRoom;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class MultiRoomRepository
|
class MultiRoomRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $id): ?MultiRoom
|
public function getById(int $id): ?MultiRoom
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($id, MultiRoom::class);
|
return $this->pdm->selectFromDbById($id, MultiRoom::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByRoomId(string $roomId): ?MultiRoom
|
public function getByRoomId(string $roomId): ?MultiRoom
|
||||||
@ -17,7 +25,7 @@ class MultiRoomRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('room_id', '=', $roomId);
|
$select->where('room_id', '=', $roomId);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, MultiRoom::class);
|
return $this->pdm->selectFromDb($select, MultiRoom::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllExpired(): Generator
|
public function getAllExpired(): Generator
|
||||||
@ -25,6 +33,6 @@ class MultiRoomRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('updated', '<', (new DateTime('-7 day'))->format('Y-m-d H:i:s'));
|
$select->where('updated', '<', (new DateTime('-7 day'))->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, MultiRoom::class);
|
yield from $this->pdm->selectMultipleFromDb($select, MultiRoom::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,23 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
use MapGuesser\PersistentData\Model\PlaceInChallenge;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class PlaceInChallengeRepository
|
class PlaceInChallengeRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getAllByPlace(Place $place, array $withRelations = []) : Generator
|
public function getAllByPlace(Place $place, array $withRelations = []) : Generator
|
||||||
{
|
{
|
||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('place_id', '=', $place->getId());
|
$select->where('place_id', '=', $place->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, PlaceInChallenge::class, true, $withRelations);
|
yield from $this->pdm->selectMultipleFromDb($select, PlaceInChallenge::class, true, $withRelations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByChallenge(Challenge $challenge) : Generator
|
public function getAllByChallenge(Challenge $challenge) : Generator
|
||||||
@ -21,7 +29,7 @@ class PlaceInChallengeRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, PlaceInChallenge::class);
|
yield from $this->pdm->selectMultipleFromDb($select, PlaceInChallenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByPlaceAndChallenge(Place $place, Challenge $challenge) : ?PlaceInChallenge
|
public function getByPlaceAndChallenge(Place $place, Challenge $challenge) : ?PlaceInChallenge
|
||||||
@ -30,7 +38,7 @@ class PlaceInChallengeRepository
|
|||||||
$select->where('place_id', '=', $place->getId());
|
$select->where('place_id', '=', $place->getId());
|
||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, PlaceInChallenge::class);
|
return $this->pdm->selectFromDb($select, PlaceInChallenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByRoundInChallenge(int $round, Challenge $challenge, array $withRelations = []): ?PlaceInChallenge
|
public function getByRoundInChallenge(int $round, Challenge $challenge, array $withRelations = []): ?PlaceInChallenge
|
||||||
@ -40,6 +48,6 @@ class PlaceInChallengeRepository
|
|||||||
$select->orderBy('round');
|
$select->orderBy('round');
|
||||||
$select->limit(1, $round);
|
$select->limit(1, $round);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, PlaceInChallenge::class, true, $withRelations);
|
return $this->pdm->selectFromDb($select, PlaceInChallenge::class, true, $withRelations);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,12 +5,20 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\Map;
|
use MapGuesser\PersistentData\Model\Map;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class PlaceRepository
|
class PlaceRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $placeId): ?Place
|
public function getById(int $placeId): ?Place
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($placeId, Place::class);
|
return $this->pdm->selectFromDbById($placeId, Place::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllForMap(Map $map): Generator
|
public function getAllForMap(Map $map): Generator
|
||||||
@ -18,7 +26,7 @@ class PlaceRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('map_id', '=', $map->getId());
|
$select->where('map_id', '=', $map->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Place::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Place::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: use Map and User instead of id
|
//TODO: use Map and User instead of id
|
||||||
@ -91,7 +99,7 @@ class PlaceRepository
|
|||||||
$select->where('id', 'NOT IN', $exclude);
|
$select->where('id', 'NOT IN', $exclude);
|
||||||
$select->limit(1, $randomOffset);
|
$select->limit(1, $randomOffset);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, Place::class);
|
return $this->pdm->selectFromDb($select, Place::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Never visited places
|
// Never visited places
|
||||||
@ -178,7 +186,7 @@ class PlaceRepository
|
|||||||
$select->orderBy('round');
|
$select->orderBy('round');
|
||||||
$select->limit(1, $round);
|
$select->limit(1, $round);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, Place::class);
|
return $this->pdm->selectFromDb($select, Place::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllInChallenge(Challenge $challenge): Generator
|
public function getAllInChallenge(Challenge $challenge): Generator
|
||||||
@ -188,7 +196,7 @@ class PlaceRepository
|
|||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
$select->orderBy('round');
|
$select->orderBy('round');
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, Place::class);
|
yield from $this->pdm->selectMultipleFromDb($select, Place::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -3,12 +3,20 @@
|
|||||||
use SokoWeb\Database\Query\Select;
|
use SokoWeb\Database\Query\Select;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\PersistentData\Model\UserConfirmation;
|
use MapGuesser\PersistentData\Model\UserConfirmation;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class UserConfirmationRepository
|
class UserConfirmationRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $userConfirmationId): ?UserConfirmation
|
public function getById(int $userConfirmationId): ?UserConfirmation
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($userConfirmationId, UserConfirmation::class);
|
return $this->pdm->selectFromDbById($userConfirmationId, UserConfirmation::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByToken(string $token): ?UserConfirmation
|
public function getByToken(string $token): ?UserConfirmation
|
||||||
@ -16,7 +24,7 @@ class UserConfirmationRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('token', '=', $token);
|
$select->where('token', '=', $token);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserConfirmation::class);
|
return $this->pdm->selectFromDb($select, UserConfirmation::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByUser(User $user): ?UserConfirmation
|
public function getByUser(User $user): ?UserConfirmation
|
||||||
@ -24,6 +32,6 @@ class UserConfirmationRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserConfirmation::class);
|
return $this->pdm->selectFromDb($select, UserConfirmation::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,23 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use MapGuesser\PersistentData\Model\Challenge;
|
use MapGuesser\PersistentData\Model\Challenge;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\PersistentData\Model\UserInChallenge;
|
use MapGuesser\PersistentData\Model\UserInChallenge;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class UserInChallengeRepository
|
class UserInChallengeRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getAllByUser(User $user) : Generator
|
public function getAllByUser(User $user) : Generator
|
||||||
{
|
{
|
||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserInChallenge::class);
|
yield from $this->pdm->selectMultipleFromDb($select, UserInChallenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByChallenge(Challenge $challenge) : Generator
|
public function getAllByChallenge(Challenge $challenge) : Generator
|
||||||
@ -21,7 +29,7 @@ class UserInChallengeRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserInChallenge::class);
|
yield from $this->pdm->selectMultipleFromDb($select, UserInChallenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByChallengeWithUsers(Challenge $challenge) : Generator
|
public function getAllByChallengeWithUsers(Challenge $challenge) : Generator
|
||||||
@ -29,7 +37,7 @@ class UserInChallengeRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserInChallenge::class, true, [User::class]);
|
yield from $this->pdm->selectMultipleFromDb($select, UserInChallenge::class, true, [User::class]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByUserIdAndChallenge(int $userId, Challenge $challenge): ?UserInChallenge
|
public function getByUserIdAndChallenge(int $userId, Challenge $challenge): ?UserInChallenge
|
||||||
@ -38,7 +46,7 @@ class UserInChallengeRepository
|
|||||||
$select->where('user_id', '=', $userId);
|
$select->where('user_id', '=', $userId);
|
||||||
$select->where('challenge_id', '=', $challenge->getId());
|
$select->where('challenge_id', '=', $challenge->getId());
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserInChallenge::class);
|
return $this->pdm->selectFromDb($select, UserInChallenge::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByUserIdAndToken(int $userId, string $token_str, array $withRelations = []): ?UserInChallenge
|
public function getByUserIdAndToken(int $userId, string $token_str, array $withRelations = []): ?UserInChallenge
|
||||||
@ -59,7 +67,7 @@ class UserInChallengeRepository
|
|||||||
$select->where('user_id', '=', $userId);
|
$select->where('user_id', '=', $userId);
|
||||||
$select->where('token', '=', $token);
|
$select->where('token', '=', $token);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserInChallenge::class, true, $withRelations);
|
return $this->pdm->selectFromDb($select, UserInChallenge::class, true, $withRelations);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isUserParticipatingInChallenge(int $userId, Challenge $challenge): bool
|
public function isUserParticipatingInChallenge(int $userId, Challenge $challenge): bool
|
||||||
|
@ -5,12 +5,20 @@ use Generator;
|
|||||||
use SokoWeb\Database\Query\Select;
|
use SokoWeb\Database\Query\Select;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\PersistentData\Model\UserPasswordResetter;
|
use MapGuesser\PersistentData\Model\UserPasswordResetter;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class UserPasswordResetterRepository
|
class UserPasswordResetterRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $userConfirmationId): ?UserPasswordResetter
|
public function getById(int $userConfirmationId): ?UserPasswordResetter
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($userConfirmationId, UserPasswordResetter::class);
|
return $this->pdm->selectFromDbById($userConfirmationId, UserPasswordResetter::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByToken(string $token): ?UserPasswordResetter
|
public function getByToken(string $token): ?UserPasswordResetter
|
||||||
@ -18,7 +26,7 @@ class UserPasswordResetterRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('token', '=', $token);
|
$select->where('token', '=', $token);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserPasswordResetter::class);
|
return $this->pdm->selectFromDb($select, UserPasswordResetter::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByUser(User $user): ?UserPasswordResetter
|
public function getByUser(User $user): ?UserPasswordResetter
|
||||||
@ -26,7 +34,7 @@ class UserPasswordResetterRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserPasswordResetter::class);
|
return $this->pdm->selectFromDb($select, UserPasswordResetter::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllExpired(): Generator
|
public function getAllExpired(): Generator
|
||||||
@ -34,6 +42,6 @@ class UserPasswordResetterRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('expires', '<', (new DateTime())->format('Y-m-d H:i:s'));
|
$select->where('expires', '<', (new DateTime())->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserPasswordResetter::class);
|
yield from $this->pdm->selectMultipleFromDb($select, UserPasswordResetter::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,23 @@ use SokoWeb\Database\Query\Select;
|
|||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
use MapGuesser\PersistentData\Model\Place;
|
use MapGuesser\PersistentData\Model\Place;
|
||||||
use MapGuesser\PersistentData\Model\UserPlayedPlace;
|
use MapGuesser\PersistentData\Model\UserPlayedPlace;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class UserPlayedPlaceRepository
|
class UserPlayedPlaceRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getByUser(User $user): Generator
|
public function getByUser(User $user): Generator
|
||||||
{
|
{
|
||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserPlayedPlace::class);
|
yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByPlace(Place $place): Generator
|
public function getAllByPlace(Place $place): Generator
|
||||||
@ -21,7 +29,7 @@ class UserPlayedPlaceRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('place_id', '=', $place->getId());
|
$select->where('place_id', '=', $place->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserPlayedPlace::class);
|
yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllByUser(User $user) : Generator
|
public function getAllByUser(User $user) : Generator
|
||||||
@ -29,7 +37,7 @@ class UserPlayedPlaceRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('user_id', '=', $user->getId());
|
$select->where('user_id', '=', $user->getId());
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, UserPlayedPlace::class);
|
yield from $this->pdm->selectMultipleFromDb($select, UserPlayedPlace::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByUserIdAndPlaceId(int $userId, int $placeId) : ?UserPlayedPlace
|
public function getByUserIdAndPlaceId(int $userId, int $placeId) : ?UserPlayedPlace
|
||||||
@ -38,6 +46,6 @@ class UserPlayedPlaceRepository
|
|||||||
$select->where('user_id', '=', $userId);
|
$select->where('user_id', '=', $userId);
|
||||||
$select->where('place_id', '=', $placeId);
|
$select->where('place_id', '=', $placeId);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, UserPlayedPlace::class);
|
return $this->pdm->selectFromDb($select, UserPlayedPlace::class);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,12 +6,20 @@ use SokoWeb\Interfaces\Repository\IUserRepository;
|
|||||||
use SokoWeb\Database\Query\Select;
|
use SokoWeb\Database\Query\Select;
|
||||||
use MapGuesser\PersistentData\Model\Guess;
|
use MapGuesser\PersistentData\Model\Guess;
|
||||||
use MapGuesser\PersistentData\Model\User;
|
use MapGuesser\PersistentData\Model\User;
|
||||||
|
use SokoWeb\PersistentData\PersistentDataManager;
|
||||||
|
|
||||||
class UserRepository implements IUserRepository
|
class UserRepository implements IUserRepository
|
||||||
{
|
{
|
||||||
|
private PersistentDataManager $pdm;
|
||||||
|
|
||||||
|
public function __construct()
|
||||||
|
{
|
||||||
|
$this->pdm = new PersistentDataManager();
|
||||||
|
}
|
||||||
|
|
||||||
public function getById(int $userId): ?User
|
public function getById(int $userId): ?User
|
||||||
{
|
{
|
||||||
return \Container::$persistentDataManager->selectFromDbById($userId, User::class);
|
return $this->pdm->selectFromDbById($userId, User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByEmail(string $email): ?User
|
public function getByEmail(string $email): ?User
|
||||||
@ -19,7 +27,7 @@ class UserRepository implements IUserRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('email', '=', $email);
|
$select->where('email', '=', $email);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, User::class);
|
return $this->pdm->selectFromDb($select, User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByGoogleSub(string $sub): ?User
|
public function getByGoogleSub(string $sub): ?User
|
||||||
@ -27,7 +35,7 @@ class UserRepository implements IUserRepository
|
|||||||
$select = new Select(\Container::$dbConnection);
|
$select = new Select(\Container::$dbConnection);
|
||||||
$select->where('google_sub', '=', $sub);
|
$select->where('google_sub', '=', $sub);
|
||||||
|
|
||||||
return \Container::$persistentDataManager->selectFromDb($select, User::class);
|
return $this->pdm->selectFromDb($select, User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getAllInactiveExpired(): Generator
|
public function getAllInactiveExpired(): Generator
|
||||||
@ -36,7 +44,7 @@ class UserRepository implements IUserRepository
|
|||||||
$select->where('active', '=', false);
|
$select->where('active', '=', false);
|
||||||
$select->where('created', '<', (new DateTime('-1 day'))->format('Y-m-d H:i:s'));
|
$select->where('created', '<', (new DateTime('-1 day'))->format('Y-m-d H:i:s'));
|
||||||
|
|
||||||
yield from \Container::$persistentDataManager->selectMultipleFromDb($select, User::class);
|
yield from $this->pdm->selectMultipleFromDb($select, User::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getByGuess(Guess $guess): ?User
|
public function getByGuess(Guess $guess): ?User
|
||||||
|
2
web.php
2
web.php
@ -90,7 +90,7 @@ Container::$routeCollection->group('admin', function (RouteCollection $routeColl
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (isset($_COOKIE['COOKIES_CONSENT'])) {
|
if (isset($_COOKIE['COOKIES_CONSENT'])) {
|
||||||
Container::$sessionHandler = new DatabaseSessionHandler(Container::$dbConnection);
|
Container::$sessionHandler = new DatabaseSessionHandler();
|
||||||
|
|
||||||
session_set_save_handler(Container::$sessionHandler, true);
|
session_set_save_handler(Container::$sessionHandler, true);
|
||||||
session_start([
|
session_start([
|
||||||
|
Loading…
Reference in New Issue
Block a user