Semi-stable version with old variable names
This commit is contained in:
@@ -1,5 +1,14 @@
|
||||
<?php
|
||||
if (session_status() !== PHP_SESSION_ACTIVE) session_start();
|
||||
|
||||
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'],
|
||||
@@ -11,16 +20,13 @@ $baseDir = $_SERVER['DOCUMENT_ROOT'];
|
||||
|
||||
require_once __DIR__ . '/../redis/connect-to-redis.php';
|
||||
|
||||
$redisSaveTime = 100;
|
||||
$redis = null;
|
||||
|
||||
connectToRedis();
|
||||
|
||||
function checkWSTokenPermissions($RPerm) {
|
||||
switch ($RPerm) {
|
||||
case 'displaycontrol':
|
||||
return $_SESSION['access_granted_wk_leitung'] ?? false;
|
||||
case 'einstellungen':
|
||||
case 'wk_leitung':
|
||||
return $_SESSION['access_granted_wk_leitung'] ?? false;
|
||||
case 'kampfrichter';
|
||||
return $_SESSION['access_granted_kampfrichter'] ?? false;
|
||||
@@ -29,22 +35,56 @@ function checkWSTokenPermissions($RPerm) {
|
||||
}
|
||||
}
|
||||
|
||||
function generateWSToken($wsRequestedPermission) {
|
||||
|
||||
global $redis;
|
||||
$envFile = realpath(__DIR__ . '/../../config/.env.wk-id');
|
||||
|
||||
if (!checkWSTokenPermissions($wsRequestedPermission)) return null;
|
||||
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 ($wsRequestedPermission === 'kampfrichter') {
|
||||
if (!isset($_SESSION['selectedFreigabeKampfrichter'])) return null;
|
||||
if ($wsRequestedAcesstype === 'kampfrichter' && isset($_SESSION['selectedFreigabeIdKampfrichter'])) {
|
||||
$wsGrantedPermission['type'] = 'kampfrichter';
|
||||
$wsGrantedPermission['access'] = $_SESSION['selectedFreigabeKampfrichter'];
|
||||
$wsGrantedPermission['access'] = $_SESSION['selectedFreigabeIdKampfrichter'];
|
||||
} elseif ($wsRequestedAcesstype === 'wk_leitung' && in_array($wsRequestedAccess, $allowedWkLeitungAccess)) {
|
||||
$wsGrantedPermission['type'] = $wsRequestedAcesstype;
|
||||
$wsGrantedPermission['access'] = $wsRequestedAccess;
|
||||
} else {
|
||||
$wsGrantedPermission['type'] = $wsRequestedPermission;
|
||||
return null;
|
||||
}
|
||||
|
||||
$wsGrantedPermission['wk_id'] = $wkId;
|
||||
$wsGrantedPermission['authenticated'] = true;
|
||||
|
||||
$token = bin2hex(random_bytes(32));
|
||||
$key = "ws:token:" . $token;
|
||||
|
||||
@@ -52,5 +92,32 @@ function generateWSToken($wsRequestedPermission) {
|
||||
|
||||
$_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;
|
||||
}
|
||||
Reference in New Issue
Block a user