123 lines
3.1 KiB
PHP
123 lines
3.1 KiB
PHP
<?php
|
|
|
|
if (!isset($baseDir)) {
|
|
$baseDir = $_SERVER['DOCUMENT_ROOT'];
|
|
}
|
|
|
|
require_once $baseDir . '/../scripts/session_functions.php';
|
|
|
|
ini_wkvs_session();
|
|
|
|
use Dotenv\Dotenv;
|
|
|
|
$wsPermissions = [
|
|
'displaycontrol' => ['access_granted_wk_leitung'],
|
|
'einstellungen' => ['access_granted_wk_leitung'],
|
|
'kampfrichter' => ['access_granted_kampfrichter']
|
|
];
|
|
|
|
$baseDir = $_SERVER['DOCUMENT_ROOT'];
|
|
|
|
require_once __DIR__ . '/../redis/connect-to-redis.php';
|
|
|
|
$redis = null;
|
|
|
|
connectToRedis();
|
|
|
|
function checkWSTokenPermissions($RPerm) {
|
|
switch ($RPerm) {
|
|
case 'wk_leitung':
|
|
return $_SESSION['access_granted_wk_leitung'] ?? false;
|
|
case 'kampfrichter';
|
|
return $_SESSION['access_granted_kampfrichter'] ?? false;
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
$envFile = realpath(__DIR__ . '/../../config/.env.wk-id');
|
|
|
|
if ($envFile === false) {
|
|
http_response_code(500);
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => "Environment file not found"
|
|
]);
|
|
exit;
|
|
}
|
|
|
|
try {
|
|
$envDir = dirname($envFile);
|
|
|
|
$dotenv = Dotenv::createImmutable($envDir, '.env.wk-id');
|
|
|
|
$dotenv->load();
|
|
} catch (Throwable $e) {
|
|
http_response_code(500);
|
|
echo json_encode([
|
|
'success' => false,
|
|
'message' => "Dotenv error"
|
|
]);
|
|
}
|
|
|
|
$wkId = $_ENV['WETTKAMPF_ID'];
|
|
|
|
$allowedWkLeitungAccess = ['displaycontrol', 'einstellungen'];
|
|
|
|
function generateWSAdminToken($wsRequestedAcesstype, $wsRequestedAccess) {
|
|
|
|
global $redis, $wkId, $allowedWkLeitungAccess;
|
|
|
|
if (!checkWSTokenPermissions($wsRequestedAcesstype)) return null;
|
|
|
|
$wsGrantedPermission = [];
|
|
|
|
if ($wsRequestedAcesstype === 'kampfrichter' && isset($_SESSION['selectedFreigabeIdKampfrichter'])) {
|
|
$wsGrantedPermission['type'] = 'kampfrichter';
|
|
$wsGrantedPermission['access'] = $_SESSION['selectedFreigabeIdKampfrichter'];
|
|
} elseif ($wsRequestedAcesstype === 'wk_leitung' && in_array($wsRequestedAccess, $allowedWkLeitungAccess)) {
|
|
$wsGrantedPermission['type'] = $wsRequestedAcesstype;
|
|
$wsGrantedPermission['access'] = $wsRequestedAccess;
|
|
} else {
|
|
return null;
|
|
}
|
|
|
|
$wsGrantedPermission['wk_id'] = $wkId;
|
|
$wsGrantedPermission['authenticated'] = true;
|
|
|
|
$token = bin2hex(random_bytes(32));
|
|
$key = "ws:token:" . $token;
|
|
|
|
$success = $redis->set($key, json_encode($wsGrantedPermission), ['nx', 'ex' => 10]);
|
|
|
|
$_SESSION['WS_KEY'] = $key;
|
|
|
|
return $key;
|
|
}
|
|
|
|
$allowedReadTypes = ['display', 'audio', 'rankLive'];
|
|
|
|
function generateWSReadToken($wsRequestedAcesstype, $wsRequestedAccess) {
|
|
|
|
global $redis, $wkId, $allowedReadTypes;
|
|
|
|
$wsGrantedPermission = [];
|
|
|
|
if (!in_array($wsRequestedAcesstype, $allowedReadTypes)) {
|
|
return null;
|
|
}
|
|
|
|
$wsGrantedPermission['access'] = $wsRequestedAccess;
|
|
$wsGrantedPermission['type'] = $wsRequestedAcesstype;
|
|
$wsGrantedPermission['wk_id'] = $wkId;
|
|
$wsGrantedPermission['authenticated'] = false;
|
|
|
|
$token = bin2hex(random_bytes(16));
|
|
$key = "ws:token:" . $token;
|
|
|
|
$success = $redis->set($key, json_encode($wsGrantedPermission), ['nx', 'ex' => 30]);
|
|
|
|
$_SESSION['WS_KEY'] = $key;
|
|
|
|
return $key;
|
|
} |