sessions.tx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <div id="backoffice">
  2. <h2>Session Audit Log</h2>
  3. <form method="GET" action="/admin/sessions">
  4. <label>User: <input class="cooltext" type="text" name="filter_user" value="<: $filter_user :>" placeholder="(all)" /></label>
  5. <label>Event:
  6. <select class="cooltext" name="filter_event">
  7. <option value="">All</option>
  8. : for ['login_success','login_failure','totp_failure','logout'] -> $ev {
  9. <option value="<: $ev :>" <: $ev == $filter_event ? 'selected' : '' | mark_raw :>><: $ev :></option>
  10. : }
  11. </select>
  12. </label>
  13. <label>Limit: <input class="cooltext" type="number" name="limit" value="<: $limit :>" min="10" max="1000" /></label>
  14. <input class="coolbutton" type="submit" value="Filter" />
  15. </form>
  16. <br />
  17. : if ($events) {
  18. <table class="cooltext" style="width:100%;border-collapse:collapse;">
  19. <thead>
  20. <tr style="text-align:left;">
  21. <th style="padding:4px 8px;">Time (local)</th>
  22. <th style="padding:4px 8px;">Event</th>
  23. <th style="padding:4px 8px;">User</th>
  24. <th style="padding:4px 8px;">IP Address</th>
  25. <th style="padding:4px 8px;">Session</th>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. : for $events -> $ev {
  30. <tr>
  31. <td style="padding:4px 8px;white-space:nowrap;"><: $ev.event_ts :></td>
  32. <td style="padding:4px 8px;"><: $ev.event_type :></td>
  33. <td style="padding:4px 8px;"><: $ev.username :></td>
  34. <td style="padding:4px 8px;font-family:monospace;"><: $ev.ip_addr :></td>
  35. <td style="padding:4px 8px;font-family:monospace;font-size:0.85em;"><: $ev.session_short :></td>
  36. </tr>
  37. : }
  38. </tbody>
  39. </table>
  40. : } else {
  41. <p>No events recorded yet.</p>
  42. : }
  43. </div>