Log every user login to Activity Logs

Track all logins (not just first) via ApplicationLogger user_login action.
Add User Login filter option to logs-viewer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Vadym Samoilenko 2026-03-02 20:54:07 +00:00
parent aa5debc6c2
commit 9036bafc0d
2 changed files with 13 additions and 5 deletions

View file

@ -11,6 +11,7 @@
require_once __DIR__ . '/vendor/autoload.php';
require_once __DIR__ . '/JWTValidator.php';
require_once __DIR__ . '/UserRoleManager.php';
require_once __DIR__ . '/ApplicationLogger.php';
$config = require __DIR__ . '/config.php';
$action = $_GET['action'] ?? '';
@ -41,12 +42,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && $action === 'login') {
exit;
}
// Register user role on first login
// Register user role on first login (auto-promotes admin_emails)
$email = strtolower($result['claims']['preferred_username'] ?? $result['claims']['upn'] ?? '');
if ($email) {
$roleManager = new UserRoleManager();
$roleManager->getRole($email); // triggers auto-promotion for admin_emails
}
$name = $result['claims']['name'] ?? $email;
$roleManager = new UserRoleManager();
$role = $email ? $roleManager->getRole($email) : 'user';
// Log every login to Activity Logs
$logger = new ApplicationLogger();
$logger->log('user_login', ['email' => $email, 'name' => $name], [
'role' => $role,
'ip' => $_SERVER['REMOTE_ADDR'] ?? 'unknown'
]);
// Store the raw idToken in a secure HttpOnly cookie (24h)
$cookieOptions = [

View file

@ -98,6 +98,7 @@ require_once __DIR__ . '/header.php';
<label for="actionFilter">Action Type:</label>
<select name="action" id="actionFilter" class="filter-select">
<option value="all" <?php echo $action === 'all' ? 'selected' : ''; ?>>All Actions</option>
<option value="user_login" <?php echo $action === 'user_login' ? 'selected' : ''; ?>>User Login</option>
<option value="master_asset_submission" <?php echo $action === 'master_asset_submission' ? 'selected' : ''; ?>>Master Asset Submission</option>
<option value="global_to_local_transform" <?php echo $action === 'global_to_local_transform' ? 'selected' : ''; ?>>Global to Local Transform</option>
<option value="box_upload" <?php echo $action === 'box_upload' ? 'selected' : ''; ?>>Box Upload</option>