|
155 | 155 | define('FR_WEBDAV_MAX_UPLOAD_BYTES', 0); |
156 | 156 | } |
157 | 157 | } |
| 158 | +// Background worker mode for transfer / zip / scan jobs. |
| 159 | +// auto = prefer background workers, fallback when unavailable |
| 160 | +// async = require background workers |
| 161 | +// sync = force foreground execution where supported |
| 162 | +if (!defined('FR_WORKER_MODE')) { |
| 163 | + $envVal = getenv('FR_WORKER_MODE'); |
| 164 | + $mode = strtolower(trim($envVal === false ? '' : (string)$envVal)); |
| 165 | + if (!in_array($mode, ['auto', 'async', 'sync'], true)) { |
| 166 | + $mode = 'auto'; |
| 167 | + } |
| 168 | + define('FR_WORKER_MODE', $mode); |
| 169 | +} |
158 | 170 | // Antivirus / ClamAV (optional) |
159 | 171 | // If VIRUS_SCAN_ENABLED is set in the environment, it overrides the admin setting. |
160 | 172 | // If it is not set, we don't define the constant and the admin checkbox controls scanning. |
@@ -342,6 +354,38 @@ function loadUserPermissions($username) |
342 | 354 | return is_array($row) ? $row : false; |
343 | 355 | } |
344 | 356 |
|
| 357 | +function fr_local_user_exists($username): bool |
| 358 | +{ |
| 359 | + $username = trim((string)$username); |
| 360 | + if ($username === '') { |
| 361 | + return false; |
| 362 | + } |
| 363 | + |
| 364 | + return \FileRise\Domain\UserModel::getUserRole($username) !== null; |
| 365 | +} |
| 366 | + |
| 367 | +function fr_forget_authenticated_user(bool $clearRememberCookie = false): void |
| 368 | +{ |
| 369 | + if ($clearRememberCookie && !empty($_COOKIE['remember_me_token']) && class_exists(\FileRise\Domain\AuthModel::class)) { |
| 370 | + $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off'); |
| 371 | + \FileRise\Domain\AuthModel::revokeRememberToken((string)$_COOKIE['remember_me_token']); |
| 372 | + setcookie('remember_me_token', '', time() - 3600, '/', '', $secure, true); |
| 373 | + unset($_COOKIE['remember_me_token']); |
| 374 | + } |
| 375 | + |
| 376 | + unset( |
| 377 | + $_SESSION['authenticated'], |
| 378 | + $_SESSION['username'], |
| 379 | + $_SESSION['isAdmin'], |
| 380 | + $_SESSION['folderOnly'], |
| 381 | + $_SESSION['readOnly'], |
| 382 | + $_SESSION['disableUpload'], |
| 383 | + $_SESSION['pending_login_user'], |
| 384 | + $_SESSION['pending_login_secret'], |
| 385 | + $_SESSION['pending_login_remember_me'] |
| 386 | + ); |
| 387 | +} |
| 388 | + |
345 | 389 | // Determine HTTPS usage |
346 | 390 | $envSecure = getenv('SECURE'); |
347 | 391 | $secure = ($envSecure !== false) |
@@ -394,6 +438,10 @@ function loadUserPermissions($username) |
394 | 438 | $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); |
395 | 439 | } |
396 | 440 |
|
| 441 | +if (!empty($_SESSION['authenticated']) && !fr_local_user_exists((string)($_SESSION['username'] ?? ''))) { |
| 442 | + fr_forget_authenticated_user(true); |
| 443 | +} |
| 444 | + |
397 | 445 | // Auto-login via persistent token |
398 | 446 | if (empty($_SESSION["authenticated"]) && !empty($_COOKIE['remember_me_token'])) { |
399 | 447 | $payload = \FileRise\Domain\AuthModel::consumeRememberToken($_COOKIE['remember_me_token']); |
|
0 commit comments