WKVS v 1.0.0

This commit is contained in:
Fabio Herzig
2026-07-24 21:49:40 +02:00
commit 6cb5386205
469 changed files with 76191 additions and 0 deletions
+123
View File
@@ -0,0 +1,123 @@
<?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;
}