116 lines
4.5 KiB
HTML
116 lines
4.5 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% set active_page = "users" %}
|
|
|
|
{% block title %}HAProxy • User Management{% endblock %}
|
|
|
|
{% block breadcrumb %}
|
|
<nav aria-label="breadcrumb" class="mb-3">
|
|
<ol class="breadcrumb mb-0">
|
|
<li class="breadcrumb-item"><a href="{{ url_for('main.index') }}"><i class="bi bi-house"></i></a></li>
|
|
<li class="breadcrumb-item active">Users</li>
|
|
</ol>
|
|
</nav>
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
|
|
<div class="card shadow-sm">
|
|
<div class="card-header bg-primary text-white">
|
|
<h5 class="mb-0"><i class="bi bi-people me-2"></i>User Management</h5>
|
|
</div>
|
|
|
|
<div class="card-body">
|
|
<!-- New User Button -->
|
|
<button class="btn btn-success mb-3" data-bs-toggle="modal" data-bs-target="#newUserModal">
|
|
<i class="bi bi-person-plus me-1"></i>Add New User
|
|
</button>
|
|
|
|
<!-- Users Table -->
|
|
<div class="table-responsive">
|
|
<table class="table table-hover" id="usersTable">
|
|
<thead class="table-light">
|
|
<tr>
|
|
<th>Username</th>
|
|
<th>Role</th>
|
|
<th>Created</th>
|
|
<th>Last Login</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody id="usersList">
|
|
<tr><td colspan="5" class="text-center text-muted py-4">Loading...</td></tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- New User Modal -->
|
|
<div class="modal fade" id="newUserModal" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Add New User</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form id="newUserForm">
|
|
<div class="mb-3">
|
|
<label class="form-label">Username</label>
|
|
<input type="text" class="form-control" id="newUsername" required minlength="3">
|
|
</div>
|
|
<div class="mb-3">
|
|
<label class="form-label">Password</label>
|
|
<input type="password" class="form-control" id="newPassword" required minlength="6">
|
|
</div>
|
|
<div class="form-check mb-3">
|
|
<input type="checkbox" class="form-check-input" id="newIsAdmin">
|
|
<label class="form-check-label" for="newIsAdmin">
|
|
Admin privileges
|
|
</label>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
<button type="button" class="btn btn-primary" id="createUserBtn">Create</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Edit User Modal -->
|
|
<div class="modal fade" id="editUserModal" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Edit User: <span id="editUsername"></span></h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<form id="editUserForm">
|
|
<div class="mb-3">
|
|
<label class="form-label">New Password (leave blank to keep current)</label>
|
|
<input type="password" class="form-control" id="editPassword" minlength="6">
|
|
</div>
|
|
<div class="form-check mb-3">
|
|
<input type="checkbox" class="form-check-input" id="editIsAdmin">
|
|
<label class="form-check-label" for="editIsAdmin">
|
|
Admin privileges
|
|
</label>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
<button type="button" class="btn btn-primary" id="updateUserBtn">Update</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script src="{{ url_for('static', filename='js/user_manager.js') }}"></script>
|
|
|
|
{% endblock %}
|