admin.html 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. {% extends "base.html" %}
  2. {% block title %}Admin Panel - Dewy Oracle{% endblock %}
  3. {% block header %}
  4. <h1>Admin Panel</h1>
  5. <p class="subtitle">Manage users and application settings</p>
  6. {% endblock %}
  7. {% block content %}
  8. <div id="message" class="message hidden"></div>
  9. <!-- Settings Section -->
  10. <section class="section">
  11. <h2>Application Settings</h2>
  12. <div class="settings-grid">
  13. <div class="setting-item">
  14. <label for="allow-registration">
  15. <input type="checkbox" id="allow-registration" onchange="toggleRegistration(this)">
  16. Allow user registration from login page
  17. </label>
  18. </div>
  19. </div>
  20. </section>
  21. <!-- User Management Section -->
  22. <section class="section">
  23. <h2>User Management</h2>
  24. <div class="section-actions">
  25. <button onclick="showAddUserModal()" class="btn btn-primary">Add User</button>
  26. <button onclick="loadUsers()" class="btn btn-secondary">Refresh Users</button>
  27. </div>
  28. <div id="users-loading" class="loading">Loading users...</div>
  29. <div id="users-container" class="hidden">
  30. <table class="users-table">
  31. <thead>
  32. <tr>
  33. <th>Username</th>
  34. <th>Email</th>
  35. <th>Display Name</th>
  36. <th>Admin</th>
  37. <th>Active</th>
  38. <th>Created</th>
  39. <th>Last Login</th>
  40. <th>Actions</th>
  41. </tr>
  42. </thead>
  43. <tbody id="users-list">
  44. </tbody>
  45. </table>
  46. </div>
  47. </section>
  48. <!-- Add User Modal -->
  49. <div id="add-user-modal" class="modal hidden">
  50. <div class="modal-content">
  51. <div class="modal-header">
  52. <h2>Add New User</h2>
  53. <button onclick="hideAddUserModal()" class="btn-close">&times;</button>
  54. </div>
  55. <form id="add-user-form" onsubmit="submitAddUser(event)">
  56. <div class="form-group">
  57. <label for="new-username">Username *</label>
  58. <input type="text" id="new-username" name="username" required>
  59. </div>
  60. <div class="form-group">
  61. <label for="new-email">Email *</label>
  62. <input type="email" id="new-email" name="email" required>
  63. </div>
  64. <div class="form-group">
  65. <label for="new-display-name">Display Name</label>
  66. <input type="text" id="new-display-name" name="display_name">
  67. </div>
  68. <div class="form-group">
  69. <label for="new-password">Password *</label>
  70. <input type="password" id="new-password" name="password" required minlength="6">
  71. <small>Minimum 6 characters</small>
  72. </div>
  73. <div class="form-section">
  74. <h3>Audiobookshelf Connection</h3>
  75. <div class="form-group">
  76. <label for="new-abs-url">Audiobookshelf URL *</label>
  77. <input type="url" id="new-abs-url" name="abs_url" required placeholder="https://abs.example.com">
  78. </div>
  79. <div class="form-group">
  80. <label for="new-abs-token">API Token *</label>
  81. <input type="password" id="new-abs-token" name="abs_api_token" required>
  82. <small>Get from Audiobookshelf Settings > Users > Generate API Token</small>
  83. </div>
  84. </div>
  85. <div class="form-group">
  86. <label>
  87. <input type="checkbox" id="new-is-admin" name="is_admin" value="true">
  88. Make this user an administrator
  89. </label>
  90. </div>
  91. <div class="modal-actions">
  92. <button type="button" onclick="hideAddUserModal()" class="btn btn-secondary">Cancel</button>
  93. <button type="submit" class="btn btn-primary">Create User</button>
  94. </div>
  95. </form>
  96. </div>
  97. </div>
  98. <!-- Change Password Modal -->
  99. <div id="change-password-modal" class="modal hidden">
  100. <div class="modal-content modal-small">
  101. <div class="modal-header">
  102. <h2>Change Password</h2>
  103. <button onclick="hideChangePasswordModal()" class="btn-close">&times;</button>
  104. </div>
  105. <form id="change-password-form" onsubmit="submitChangePassword(event)">
  106. <input type="hidden" id="change-password-user-id" name="user_id">
  107. <p>Changing password for: <strong id="change-password-username"></strong></p>
  108. <div class="form-group">
  109. <label for="new-user-password">New Password *</label>
  110. <input type="password" id="new-user-password" name="new_password" required minlength="6">
  111. <small>Minimum 6 characters</small>
  112. </div>
  113. <div class="modal-actions">
  114. <button type="button" onclick="hideChangePasswordModal()" class="btn btn-secondary">Cancel</button>
  115. <button type="submit" class="btn btn-primary">Change Password</button>
  116. </div>
  117. </form>
  118. </div>
  119. </div>
  120. {% endblock %}
  121. {% block extra_scripts %}
  122. <script src="/static/js/admin.js"></script>
  123. <script>
  124. // Initialize admin panel on page load
  125. document.addEventListener('DOMContentLoaded', () => {
  126. loadSettings();
  127. loadUsers();
  128. });
  129. </script>
  130. {% endblock %}