Add views directory and UI improvements

- Add all view templates (servers, auth, dashboard, admin, layouts, errors, terminal)
- Fix SSH double decryption bug in SSHService
- Fix router parameter type casting for strict_types
- Add missing error views (401, 403, 404)
- Add nginx manager with file editing
- Add SSL certificates management
- Add database manager with phpMyAdmin-like interface
- Add sidebar server accordion
This commit is contained in:
2026-06-06 17:59:13 -04:00
parent 9c0bc7f189
commit c3009fbbf7
23 changed files with 3729 additions and 0 deletions

64
views/auth/profile.php Executable file
View File

@@ -0,0 +1,64 @@
<?php $user = $user ?? []; ?>
<div class="page-header">
<h1 class="page-title">My Profile</h1>
<p class="page-subtitle">Manage your account settings</p>
</div>
<div class="card" style="max-width: 600px;">
<div class="card-header">
<h2><i class="fas fa-user-circle"></i> Account Information</h2>
</div>
<div class="card-body">
<dl class="details-list">
<dt>Username</dt>
<dd><?= htmlspecialchars($user['username'] ?? '') ?></dd>
<dt>Role</dt>
<dd><span class="badge badge-info"><?= htmlspecialchars(ucfirst($user['role'] ?? '')) ?></span></dd>
<dt>Last Login</dt>
<dd><?= htmlspecialchars($user['last_login_at'] ?? 'Never') ?></dd>
<dt>Created</dt>
<dd><?= htmlspecialchars($user['created_at'] ?? '') ?></dd>
</dl>
</div>
</div>
<div class="card" style="max-width: 600px; margin-top: 1rem;">
<div class="card-header">
<h2><i class="fas fa-edit"></i> Update Profile</h2>
</div>
<div class="card-body">
<form method="POST" action="/profile" class="form">
<input type="hidden" name="_csrf_token" value="<?= $this->csrfToken() ?>">
<div class="form-group">
<label for="email">Email Address</label>
<input type="email" id="email" name="email" class="form-input"
value="<?= htmlspecialchars($user['email'] ?? '') ?>" required>
</div>
<div class="form-section">
<h3>Change Password</h3>
<div class="form-group">
<label for="current_password">Current Password</label>
<input type="password" id="current_password" name="current_password" class="form-input" required>
</div>
<div class="form-group">
<label for="new_password">New Password (leave blank to keep current)</label>
<input type="password" id="new_password" name="new_password" class="form-input"
placeholder="Minimum 8 characters" minlength="8">
</div>
<div class="form-group">
<label for="confirm_password">Confirm New Password</label>
<input type="password" id="confirm_password" name="confirm_password" class="form-input">
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">
<i class="fas fa-save"></i> Update Profile
</button>
</div>
</form>
</div>
</div>