Microservice to bring 2FA to self hosted PDSes
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="utf-8"/>
5 <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, viewport-fit=cover"/>
6 <meta name="referrer" content="origin-when-cross-origin"/>
7 <title>Invite Codes - {{pds_hostname}}</title>
8 <link rel="stylesheet" href="/admin/static/css/admin.css">
9</head>
10<body>
11<div class="layout">
12 {{> admin/partials/sidebar.hbs}}
13
14 <main class="main">
15 {{> admin/partials/flash.hbs}}
16
17 <h1 class="page-title">Invite Codes</h1>
18
19 {{#if can_create_invite}}
20 <form class="create-form" method="POST" action="/admin/invite-codes/create">
21 <div class="form-group">
22 <label for="use_count">Max Uses</label>
23 <input type="number" id="use_count" name="use_count" value="1" min="1" max="100"/>
24 </div>
25 <button type="submit" class="btn btn-primary">Create Invite Code</button>
26 </form>
27 {{/if}}
28
29 {{#if new_code}}
30 <div class="code-box">
31 <div class="code-label">New Invite Code Created</div>
32 <div class="code-value">{{new_code}}</div>
33 </div>
34 {{/if}}
35
36 {{#if codes}}
37 <div class="table-container">
38 <table>
39 <thead>
40 <tr>
41 <th>Code</th>
42 <th>Remaining / Total</th>
43 <th>Status</th>
44 <th>Created By</th>
45 <th>Created At</th>
46 {{#if can_manage_invites}}
47 <th></th>
48 {{/if}}
49 </tr>
50 </thead>
51 <tbody>
52 {{#each codes}}
53 <tr>
54 <td class="code-cell">{{this.code}}</td>
55 <td>{{this.remaining}} / {{this.available}}</td>
56 <td>
57 {{#if this.disabled}}
58 <span class="badge badge-danger">Disabled</span>
59 {{else}}
60 <span class="badge badge-success">Active</span>
61 {{/if}}
62 </td>
63 <td>{{this.createdBy}}</td>
64 <td>{{this.createdAt}}</td>
65 {{#if ../can_manage_invites}}
66 <td>
67 {{#unless this.disabled}}
68 <form method="POST" action="/admin/invite-codes/disable"
69 class="inline-form">
70 <input type="hidden" name="codes" value="{{this.code}}"/>
71 <button type="submit" class="btn btn-small btn-outline-danger">Disable
72 </button>
73 </form>
74 {{/unless}}
75 </td>
76 {{/if}}
77 </tr>
78 {{/each}}
79 </tbody>
80 </table>
81 </div>
82 {{#if has_more}}
83 <div class="load-more">
84 <a href="/admin/invite-codes?cursor={{next_cursor}}">Load More</a>
85 </div>
86 {{/if}}
87 {{else}}
88 <div class="empty-state">No invite codes found</div>
89 {{/if}}
90 </main>
91</div>
92</body>
93</html>