File size: 3,464 Bytes
5c5b371
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
<%- include("partials/shared_header", { title: "OAI Reverse Proxy Admin" }) %>
<h1>OAI Reverse Proxy Admin</h1>
<% if (!usersEnabled) { %>
<p style="color: red; background-color: #eedddd; padding: 1em">
  <strong>🚨 <code>user_token</code> gatekeeper is not enabled.</strong><br />
  <br />None of the user management features will do anything.
</p>
<% } %>
<% if (!persistenceEnabled) { %>
<p style="color: red; background-color: #eedddd; padding: 1em">
  <strong>⚠️ Users will be lost when the server restarts because persistence is not configured.</strong><br />
  <br />Be sure to export your users and import them again after restarting the server if you want to keep them.<br />
  <br />
  See the
  <a target="_blank" href="https://gitgud.io/khanon/oai-reverse-proxy/-/blob/main/docs/user-management.md#firebase-realtime-database">
    user management documentation</a
  >
  to learn how to set up persistence.
</p>
<% } %>
<h3>Users</h3>
<ul>
  <li><a href="/admin/manage/list-users">List Users</a></li>
  <li><a href="/admin/manage/create-user">Create User</a></li>
  <li><a href="/admin/manage/import-users">Import Users</a></li>
  <li><a href="/admin/manage/export-users">Export Users</a></li>
  <li><a href="/admin/manage/download-stats">Download Rentry Stats</a>
  <li><a href="/admin/manage/anti-abuse">Abuse Mitigation Settings</a></li>
  <li><a href="/admin/service-info">Service Info</a></li>
</ul>
<h3>Maintenance</h3>
<form id="maintenanceForm" action="/admin/manage/maintenance" method="post">
  <input id="_csrf" type="hidden" name="_csrf" value="<%= csrfToken %>" />
  <input id="hiddenAction" type="hidden" name="action" value="" />
  <div>
    <fieldset>
      <legend>Key Recheck</legend>
      <button id="recheck-keys" type="button" onclick="submitForm('recheck')">Force Key Recheck</button>
      <label for="recheck-keys">Triggers a recheck of all keys without restarting the server.</label>
    </fieldset>
    <% if (quotasEnabled) { %>
    <fieldset>
      <legend>Bulk Quota Management</legend>
      <p>
        <button id="refresh-quotas" type="button" onclick="submitForm('resetQuotas')">Refresh All Quotas</button>
        Immediately refreshes all users' quotas by the configured amounts.
      </p>
      <p>
        <button id="clear-token-counts" type="button" onclick="submitForm('resetCounts')">Clear All Token Counts</button>
        Resets all users' token records to zero.
      </p>
    </fieldset>
    <% } %>
    <% if (imageGenerationEnabled) { %>
    <fieldset>
      <legend>Image Generation</legend>
      <button id="download-image-metadata" type="button" onclick="submitForm('downloadImageMetadata')">Download Image Metadata</button>
      <label for="download-image-metadata">Downloads a metadata file containing URL, prompt, and truncated user token for all cached images.</label>
    </fieldset>
    <% } %>
  </div>
</form>

<script>
  let confirmed = false;
  function submitForm(action) {
    if (action === "resetCounts" && !confirmed) {
      document.getElementById("clear-token-counts").innerText = "💣 Confirm Clear All Token Counts";
      alert("⚠️ This will permanently clear token records for all users. If you only want to refresh quotas, use the other button.");
      confirmed = true;
      return;
    }

    document.getElementById("hiddenAction").value = action;
    document.getElementById("maintenanceForm").submit();
  }
</script>

<%- include("partials/admin-footer") %>