mirror of
https://codeberg.org/demostf/api.git
synced 2026-06-03 18:04:08 +02:00
hook everything up into a working system
This commit is contained in:
parent
03d3acebf5
commit
9024e368c7
12 changed files with 204 additions and 81 deletions
|
|
@ -3,6 +3,7 @@
|
||||||
use Ehesp\SteamLogin\SteamLogin;
|
use Ehesp\SteamLogin\SteamLogin;
|
||||||
use Demostf\API\Providers\AuthProvider;
|
use Demostf\API\Providers\AuthProvider;
|
||||||
use Demostf\API\Providers\UserProvider;
|
use Demostf\API\Providers\UserProvider;
|
||||||
|
use flight\Engine;
|
||||||
|
|
||||||
class AuthController extends BaseController {
|
class AuthController extends BaseController {
|
||||||
/**
|
/**
|
||||||
|
|
@ -18,17 +19,13 @@ class AuthController extends BaseController {
|
||||||
/** @var string */
|
/** @var string */
|
||||||
private $host;
|
private $host;
|
||||||
|
|
||||||
/**
|
private $apiRoot;
|
||||||
* AuthController constructor.
|
|
||||||
*
|
public function __construct(UserProvider $userProvider, AuthProvider $authProvider, string $host, string $apiRoot) {
|
||||||
* @param UserProvider $userProvider
|
|
||||||
* @param AuthProvider $authProvider
|
|
||||||
* @param string $host
|
|
||||||
*/
|
|
||||||
public function __construct(UserProvider $userProvider, AuthProvider $authProvider, string $host) {
|
|
||||||
$this->userProvider = $userProvider;
|
$this->userProvider = $userProvider;
|
||||||
$this->authProvider = $authProvider;
|
$this->authProvider = $authProvider;
|
||||||
$this->host = $host;
|
$this->host = $host;
|
||||||
|
$this->apiRoot = $apiRoot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function token() {
|
public function token() {
|
||||||
|
|
@ -48,7 +45,7 @@ class AuthController extends BaseController {
|
||||||
public function login($token) {
|
public function login($token) {
|
||||||
$_SESSION['return'] = $this->query('return', 'https://' . $this->host);
|
$_SESSION['return'] = $this->query('return', 'https://' . $this->host);
|
||||||
$steam = new SteamLogin();
|
$steam = new SteamLogin();
|
||||||
$url = $steam->url($_ENV['APP_ROOT'] . '/auth/handle/' . urlencode($token));
|
$url = $steam->url($this->apiRoot . '/auth/handle/' . urlencode($token));
|
||||||
\Flight::redirect(str_replace('&', '&', $url)); // headers make no sense
|
\Flight::redirect(str_replace('&', '&', $url)); // headers make no sense
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,7 +60,7 @@ class AuthController extends BaseController {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle($token) {
|
public function handle($token) {
|
||||||
$return = isset($_SESSION['return']) ? $_SESSION['return'] : 'http://demos.tf';
|
$return = isset($_SESSION['return']) ? $_SESSION['return'] : 'https://' . $this->host;
|
||||||
unset($_SESSION['return']);
|
unset($_SESSION['return']);
|
||||||
$steam = new SteamLogin();
|
$steam = new SteamLogin();
|
||||||
$steamId = $steam->validate();
|
$steamId = $steam->validate();
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
<?php namespace Demostf\API\Controllers;
|
<?php namespace Demostf\API\Controllers;
|
||||||
|
|
||||||
|
|
||||||
class BaseController {
|
class BaseController {
|
||||||
|
|
||||||
protected function query($name, $default) {
|
protected function query($name, $default) {
|
||||||
$request = \Flight::request();
|
$request = \Flight::request();
|
||||||
return isset($request->query[$name]) ? $request->query[$name] : $default;
|
return isset($request->query[$name]) ? $request->query[$name] : $default;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
<?php namespace Demostf\API\Controllers;
|
<?php namespace Demostf\API\Controllers;
|
||||||
|
|
||||||
use Demostf\API\Providers\ChatProvider;
|
use Demostf\API\Providers\ChatProvider;
|
||||||
|
use Demostf\API\Providers\DemoListProvider;
|
||||||
use Demostf\API\Providers\DemoProvider;
|
use Demostf\API\Providers\DemoProvider;
|
||||||
|
use flight\Engine;
|
||||||
|
|
||||||
class DemoController extends BaseController {
|
class DemoController extends BaseController {
|
||||||
/** @var DemoProvider */
|
/** @var DemoProvider */
|
||||||
|
|
@ -10,9 +12,12 @@ class DemoController extends BaseController {
|
||||||
/** @var ChatProvider */
|
/** @var ChatProvider */
|
||||||
private $chatProvider;
|
private $chatProvider;
|
||||||
|
|
||||||
public function __construct(DemoProvider $demoProvider, ChatProvider $chatProvider) {
|
private $demoListProvider;
|
||||||
|
|
||||||
|
public function __construct(DemoProvider $demoProvider, ChatProvider $chatProvider, DemoListProvider $demoListProvider) {
|
||||||
$this->demoProvider = $demoProvider;
|
$this->demoProvider = $demoProvider;
|
||||||
$this->chatProvider = $chatProvider;
|
$this->chatProvider = $chatProvider;
|
||||||
|
$this->demoListProvider = $demoListProvider;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -53,19 +58,19 @@ class DemoController extends BaseController {
|
||||||
|
|
||||||
public function listDemos() {
|
public function listDemos() {
|
||||||
$page = $this->query('page', 1);
|
$page = $this->query('page', 1);
|
||||||
\Flight::json($this->demoProvider->listDemos($page, $this->getFilter()));
|
\Flight::json($this->demoListProvider->listDemos($page, $this->getFilter()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listProfile($steamid) {
|
public function listProfile($steamid) {
|
||||||
$page = $this->query('page', 1);
|
$page = $this->query('page', 1);
|
||||||
$where = $this->getFilter();
|
$where = $this->getFilter();
|
||||||
$where['players'][] = $steamid;
|
$where['players'][] = $steamid;
|
||||||
\Flight::json($this->demoProvider->listProfile($page, $where));
|
\Flight::json($this->demoListProvider->listProfile($page, $where));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function listUploads($steamid) {
|
public function listUploads($steamid) {
|
||||||
$page = $this->query('page', 1);
|
$page = $this->query('page', 1);
|
||||||
\Flight::json($this->demoProvider->listUploads($steamid, $page, $this->getFilter()));
|
\Flight::json($this->demoListProvider->listUploads($steamid, $page, $this->getFilter()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function chat($demoId) {
|
public function chat($demoId) {
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,12 @@
|
||||||
<?php namespace Demostf\API\Controllers;
|
<?php namespace Demostf\API\Controllers;
|
||||||
|
|
||||||
use Demostf\API\Providers\InfoProvider;
|
use Demostf\API\Providers\InfoProvider;
|
||||||
|
use flight\Engine;
|
||||||
|
|
||||||
class InfoController extends BaseController {
|
class InfoController extends BaseController {
|
||||||
/** @var InfoProvider */
|
/** @var InfoProvider */
|
||||||
private $infoProvider;
|
private $infoProvider;
|
||||||
|
|
||||||
/**
|
|
||||||
* InfoController constructor.
|
|
||||||
*
|
|
||||||
* @param InfoProvider $infoProvider
|
|
||||||
*/
|
|
||||||
public function __construct(InfoProvider $infoProvider) {
|
public function __construct(InfoProvider $infoProvider) {
|
||||||
$this->infoProvider = $infoProvider;
|
$this->infoProvider = $infoProvider;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
<?php namespace Demostf\API\Controllers;
|
<?php namespace Demostf\API\Controllers;
|
||||||
|
|
||||||
use Demostf\API\Providers\UploadProvider;
|
use Demostf\API\Providers\UploadProvider;
|
||||||
|
use flight\Engine;
|
||||||
|
|
||||||
class UploadController extends BaseController {
|
class UploadController extends BaseController {
|
||||||
private $uploadProvider;
|
private $uploadProvider;
|
||||||
|
|
@ -17,6 +18,6 @@ class UploadController extends BaseController {
|
||||||
$demo = $this->file('demo');
|
$demo = $this->file('demo');
|
||||||
$demoFile = $demo['tmp_name'];
|
$demoFile = $demo['tmp_name'];
|
||||||
|
|
||||||
return $this->uploadProvider->upload($key, $red, $blu, $name, $demoFile);
|
echo $this->uploadProvider->upload($key, $red, $blu, $name, $demoFile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
use Ehesp\SteamLogin\SteamLogin;
|
use Ehesp\SteamLogin\SteamLogin;
|
||||||
use Demostf\API\Providers\AuthProvider;
|
use Demostf\API\Providers\AuthProvider;
|
||||||
use Demostf\API\Providers\UserProvider;
|
use Demostf\API\Providers\UserProvider;
|
||||||
|
use flight\Engine;
|
||||||
|
|
||||||
class UserController extends BaseController {
|
class UserController extends BaseController {
|
||||||
/**
|
/**
|
||||||
|
|
@ -10,11 +11,6 @@ class UserController extends BaseController {
|
||||||
*/
|
*/
|
||||||
private $userProvider;
|
private $userProvider;
|
||||||
|
|
||||||
/**
|
|
||||||
* UserController constructor.
|
|
||||||
*
|
|
||||||
* @param UserProvider $userProvider
|
|
||||||
*/
|
|
||||||
public function __construct(UserProvider $userProvider) {
|
public function __construct(UserProvider $userProvider) {
|
||||||
$this->userProvider = $userProvider;
|
$this->userProvider = $userProvider;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,6 @@ class RawParser {
|
||||||
$response = $client->post($this->parserUrl, [
|
$response = $client->post($this->parserUrl, [
|
||||||
'body' => fopen($path, 'r')
|
'body' => fopen($path, 'r')
|
||||||
]);
|
]);
|
||||||
return json_decode($response->getBody(), true);
|
return json_decode($response->getBody()->getContents(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
110
src/Providers/Container.php
Normal file
110
src/Providers/Container.php
Normal file
|
|
@ -0,0 +1,110 @@
|
||||||
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace Demostf\API\Providers;
|
||||||
|
|
||||||
|
use Demostf\API\Demo\DemoSaver;
|
||||||
|
use Demostf\API\Demo\DemoStore;
|
||||||
|
use Demostf\API\Demo\HeaderParser;
|
||||||
|
use Demostf\API\Demo\Parser;
|
||||||
|
use Demostf\API\Demo\RawParser;
|
||||||
|
use Doctrine\DBAL\Connection;
|
||||||
|
use RandomLib\Generator;
|
||||||
|
|
||||||
|
class Container {
|
||||||
|
private $connection;
|
||||||
|
private $generator;
|
||||||
|
private $baseUrl;
|
||||||
|
private $parserUrl;
|
||||||
|
private $storeRoot;
|
||||||
|
private $storeUrl;
|
||||||
|
private $apiRoot;
|
||||||
|
|
||||||
|
public function __construct(
|
||||||
|
Connection $connection,
|
||||||
|
Generator $generator,
|
||||||
|
string $baseUrl,
|
||||||
|
string $parserUrl,
|
||||||
|
string $storeRoot,
|
||||||
|
string $storeUrl,
|
||||||
|
string $apiRoot
|
||||||
|
) {
|
||||||
|
$this->connection = $connection;
|
||||||
|
$this->generator = $generator;
|
||||||
|
$this->baseUrl = $baseUrl;
|
||||||
|
$this->parserUrl = $parserUrl;
|
||||||
|
$this->storeRoot = $storeRoot;
|
||||||
|
$this->storeUrl = $storeUrl;
|
||||||
|
$this->apiRoot = $apiRoot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getAuthProvider(): AuthProvider {
|
||||||
|
return new AuthProvider($this->connection, $this->generator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getChatProvider(): ChatProvider {
|
||||||
|
return new ChatProvider($this->connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDemoListProvider(): DemoListProvider {
|
||||||
|
return new DemoListProvider($this->connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getDemoProvider(): DemoProvider {
|
||||||
|
return new DemoProvider($this->connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getInfoProvider(): InfoProvider {
|
||||||
|
return new InfoProvider($this->connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getKillProvider(): KillProvider {
|
||||||
|
return new KillProvider($this->connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPlayerProvider(): PlayerProvider {
|
||||||
|
return new PlayerProvider($this->connection);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUploadProvider(): UploadProvider {
|
||||||
|
return new UploadProvider(
|
||||||
|
$this->connection,
|
||||||
|
$this->baseUrl,
|
||||||
|
new HeaderParser(),
|
||||||
|
new Parser(new RawParser($this->parserUrl)),
|
||||||
|
new DemoStore($this->storeRoot, $this->storeUrl),
|
||||||
|
$this->getUserProvider(),
|
||||||
|
$this->getDemoProvider(),
|
||||||
|
new DemoSaver(
|
||||||
|
$this->getKillProvider(),
|
||||||
|
$this->getPlayerProvider(),
|
||||||
|
$this->getChatProvider(),
|
||||||
|
$this->getUserProvider(),
|
||||||
|
$this->getDemoProvider()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getUserProvider(): UserProvider {
|
||||||
|
return new UserProvider($this->connection, $this->generator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getBaseUrl(): string {
|
||||||
|
return $this->baseUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getParserUrl(): string {
|
||||||
|
return $this->parserUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStoreRoot(): string {
|
||||||
|
return $this->storeRoot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getStoreUrl(): string {
|
||||||
|
return $this->storeUrl;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getApiRoot(): string {
|
||||||
|
return $this->apiRoot;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -78,9 +78,7 @@ class UserProvider extends BaseProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return array_map(function (array $row) {
|
return array_values($result);
|
||||||
return User::fromRow($row);
|
|
||||||
}, array_values($result));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function byKey($key): ?User {
|
public function byKey($key): ?User {
|
||||||
|
|
|
||||||
46
src/app.php
46
src/app.php
|
|
@ -1,38 +1,26 @@
|
||||||
<?php declare(strict_types = 1);
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
namespace Demostf\API;
|
namespace Demostf\API;
|
||||||
|
|
||||||
|
use Demostf\API\Providers\Container;
|
||||||
use Flight;
|
use Flight;
|
||||||
|
|
||||||
require_once __DIR__ . '/init.php';
|
/** @var Container $container */
|
||||||
|
$container = require __DIR__ . '/init.php';
|
||||||
|
|
||||||
|
$demoController = new Controllers\DemoController(
|
||||||
$connectionParams = array(
|
$container->getDemoProvider(),
|
||||||
'dbname' => getenv('DB_DATABASE'),
|
$container->getChatProvider(),
|
||||||
'user' => getenv('DB_USERNAME'),
|
$container->getDemoListProvider()
|
||||||
'password' => getenv('DB_PASSWORD'),
|
|
||||||
'host' => getenv('DB_HOST'),
|
|
||||||
'port' => getenv('DB_PORT'),
|
|
||||||
'driver' => getenv('DB_TYPE'),
|
|
||||||
);
|
);
|
||||||
if ($connectionParams['driver'] === 'pgsql') {
|
$authController = new Controllers\AuthController(
|
||||||
$connectionParams['driver'] = 'pdo_pgsql';
|
$container->getUserProvider(),
|
||||||
}
|
$container->getAuthProvider(),
|
||||||
$db = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
|
$container->getBaseUrl(),
|
||||||
$host = getenv('BASE_HOST');
|
$container->getApiRoot()
|
||||||
|
);
|
||||||
$demoProvider = new Providers\DemoProvider($db);
|
$userController = new Controllers\UserController($container->getUserProvider());
|
||||||
|
$infoController = new Controllers\InfoController($container->getInfoProvider());
|
||||||
$factory = new \RandomLib\Factory;
|
|
||||||
$generator = $factory->getMediumStrengthGenerator();
|
|
||||||
$authProvider = new Providers\AuthProvider($db, $generator);
|
|
||||||
$userProvider = new Providers\UserProvider($db, $generator);
|
|
||||||
$infoProvider = new Providers\InfoProvider($db);
|
|
||||||
$chatProvider = new Providers\ChatProvider($db);
|
|
||||||
$demoController = new Controllers\DemoController($demoProvider, $chatProvider);
|
|
||||||
$authController = new Controllers\AuthController($userProvider, $authProvider, $host);
|
|
||||||
$userController = new Controllers\UserController($userProvider);
|
|
||||||
$infoController = new Controllers\InfoController($infoProvider);
|
|
||||||
|
|
||||||
Flight::route('/*', function () {
|
Flight::route('/*', function () {
|
||||||
header('Access-Control-Allow-Origin: *');
|
header('Access-Control-Allow-Origin: *');
|
||||||
|
|
|
||||||
38
src/init.php
38
src/init.php
|
|
@ -1,6 +1,42 @@
|
||||||
<?php
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
|
use Demostf\API\Providers\Container;
|
||||||
|
|
||||||
$autoloader = require __DIR__ . '/../vendor/autoload.php';
|
$autoloader = require __DIR__ . '/../vendor/autoload.php';
|
||||||
|
|
||||||
if (!getenv('DB_TYPE')) {
|
if (!getenv('DB_TYPE')) {
|
||||||
Dotenv::load(__DIR__ . '/../');
|
Dotenv::load(__DIR__ . '/../');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$connectionParams = array(
|
||||||
|
'dbname' => getenv('DB_DATABASE'),
|
||||||
|
'user' => getenv('DB_USERNAME'),
|
||||||
|
'password' => getenv('DB_PASSWORD'),
|
||||||
|
'host' => getenv('DB_HOST'),
|
||||||
|
'port' => getenv('DB_PORT'),
|
||||||
|
'driver' => getenv('DB_TYPE'),
|
||||||
|
);
|
||||||
|
if ($connectionParams['driver'] === 'pgsql') {
|
||||||
|
$connectionParams['driver'] = 'pdo_pgsql';
|
||||||
|
}
|
||||||
|
$db = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
|
||||||
|
$host = getenv('BASE_HOST');
|
||||||
|
$storeRoot = getenv('DEMO_ROOT');
|
||||||
|
$storeHost = getenv('DEMO_HOST');
|
||||||
|
$parserUrl = getenv('PARSER_URL');
|
||||||
|
$appRoot = getenv('APP_ROOT');
|
||||||
|
|
||||||
|
$factory = new \RandomLib\Factory;
|
||||||
|
$generator = $factory->getMediumStrengthGenerator();
|
||||||
|
|
||||||
|
$container = new Container(
|
||||||
|
$db,
|
||||||
|
$generator,
|
||||||
|
'https://' . $host,
|
||||||
|
$parserUrl,
|
||||||
|
$storeRoot,
|
||||||
|
'https://' . $storeHost,
|
||||||
|
$appRoot
|
||||||
|
);
|
||||||
|
|
||||||
|
return $container;
|
||||||
|
|
|
||||||
|
|
@ -1,27 +1,21 @@
|
||||||
<?php declare(strict_types = 1);
|
<?php declare(strict_types=1);
|
||||||
|
|
||||||
namespace Demostf\API;
|
namespace Demostf\API;
|
||||||
|
|
||||||
require_once __DIR__ . '/init.php';
|
use Demostf\API\Providers\Container;
|
||||||
|
use Flight;
|
||||||
|
|
||||||
$connectionParams = array(
|
/** @var Container $container */
|
||||||
'dbname' => getenv('DB_DATABASE'),
|
$container = require __DIR__ . '/init.php';
|
||||||
'user' => getenv('DB_USERNAME'),
|
|
||||||
'password' => getenv('DB_PASSWORD'),
|
|
||||||
'host' => getenv('DB_HOST'),
|
|
||||||
'driver' => getenv('DB_TYPE'),
|
|
||||||
);
|
|
||||||
if ($connectionParams['driver'] === 'pgsql') {
|
|
||||||
$connectionParams['driver'] = 'pdo_pgsql';
|
|
||||||
}
|
|
||||||
$db = \Doctrine\DBAL\DriverManager::getConnection($connectionParams);
|
|
||||||
$host = getenv('BASE_HOST');
|
|
||||||
$storeRoot = getenv('DEMO_ROOT');
|
|
||||||
|
|
||||||
$demoProvider = new Providers\DemoProvider($db);
|
$uploadController = new Controllers\UploadController($container->getUploadProvider());
|
||||||
|
|
||||||
$factory = new \RandomLib\Factory;
|
Flight::route('/*', function () {
|
||||||
$generator = $factory->getMediumStrengthGenerator();
|
header('Access-Control-Allow-Origin: *');
|
||||||
$userProvider = new Providers\UserProvider($db, $generator);
|
return true;
|
||||||
$store = new Demo\DemoStore($storeRoot, 'static.' . $host);
|
});
|
||||||
$uploadController = new Controllers\UploadController($demoProvider, $userProvider, new Demo\Parser(), $store);
|
|
||||||
$uploadController->upload();
|
Flight::route('/upload', [$uploadController, 'upload']);
|
||||||
|
Flight::route('/do_upload', [$uploadController, 'upload']);
|
||||||
|
|
||||||
|
Flight::start();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue