Microservice to bring 2FA to self hosted PDSes
at feature/admin-rbac 101 lines 4.3 kB view raw
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>Create Account - {{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">Create Account</h1> 18 19 {{#if created}} 20 <div class="success-card"> 21 <h3>Account Created Successfully</h3> 22 <div class="detail-row"> 23 <span class="label">DID</span> 24 <span class="value">{{created.did}} 25 <button class="copy-btn" onclick="copyToClipboard('{{created.did}}', this)">Copy</button></span> 26 </div> 27 <div class="detail-row"> 28 <span class="label">Handle</span> 29 <span class="value">{{created.handle}} 30 <button class="copy-btn" 31 onclick="copyToClipboard('{{created.handle}}', this)">Copy</button></span> 32 </div> 33 <div class="detail-row"> 34 <span class="label">Email</span> 35 <span class="value">{{created.email}} 36 <button class="copy-btn" 37 onclick="copyToClipboard('{{created.email}}', this)">Copy</button></span> 38 </div> 39 <div class="detail-row"> 40 <span class="label">Password</span> 41 <span class="value"><span class="password-highlight">{{created.password}}</span> <button 42 class="copy-btn" 43 onclick="copyToClipboard('{{created.password}}', this)">Copy</button></span> 44 </div> 45 {{#if created.inviteCode}} 46 <div class="detail-row"> 47 <span class="label">Invite Code Used</span> 48 <span class="value">{{created.inviteCode}} 49 <button class="copy-btn" 50 onclick="copyToClipboard('{{created.inviteCode}}', this)">Copy</button></span> 51 </div> 52 {{/if}} 53 </div> 54 {{else}} 55 <div class="form-card"> 56 <form method="POST" action="/admin/create-account"> 57 <div class="form-group"> 58 <label for="email">Email</label> 59 <input type="email" id="email" name="email" placeholder="user@example.com" required/> 60 </div> 61 <div class="form-group"> 62 <label for="handle">Handle</label> 63 <input type="text" id="handle" name="handle" placeholder="user.example.com" required/> 64 <div class="hint">Must be a valid handle for this PDS</div> 65 </div> 66 <button type="submit" class="btn btn-primary">Create Account</button> 67 </form> 68 </div> 69 {{/if}} 70 </main> 71</div> 72 73<script> 74 function copyToClipboard(text, btn) { 75 if (navigator.clipboard && navigator.clipboard.writeText) { 76 navigator.clipboard.writeText(text).then(function () { 77 var orig = btn.textContent; 78 btn.textContent = 'Copied'; 79 setTimeout(function () { 80 btn.textContent = orig; 81 }, 1500); 82 }); 83 } else { 84 var el = document.createElement('textarea'); 85 el.value = text; 86 el.style.position = 'fixed'; 87 el.style.opacity = '0'; 88 document.body.appendChild(el); 89 el.select(); 90 document.execCommand('copy'); 91 document.body.removeChild(el); 92 var orig = btn.textContent; 93 btn.textContent = 'Copied'; 94 setTimeout(function () { 95 btn.textContent = orig; 96 }, 1500); 97 } 98 } 99</script> 100</body> 101</html>