my own indieAuth provider! indiko.dunkirk.sh/docs
indieauth oauth2-server
at main 142 lines 4.1 kB view raw
1<!doctype html> 2<html lang="en"> 3 4<head> 5 <meta charset="UTF-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 7 <title>login • indiko</title> 8 <meta name="description" content="Sign in to your Indiko account with passkey authentication" /> 9 <link rel="icon" href="../../public/favicon.svg" type="image/svg+xml" /> 10 11 <!-- Open Graph / Facebook --> 12 <meta property="og:type" content="website" /> 13 <meta property="og:title" content="Login • Indiko" /> 14 <meta property="og:description" content="Sign in to your Indiko account with passkey authentication" /> 15 16 <!-- Twitter --> 17 <meta name="twitter:card" content="summary" /> 18 <meta name="twitter:title" content="Login • Indiko" /> 19 <meta name="twitter:description" content="Sign in to your Indiko account with passkey authentication" /> 20 <link rel="preconnect" href="https://fonts.googleapis.com"> 21 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 22 <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300..700&display=swap" rel="stylesheet"> 23 <link rel="stylesheet" href="../styles.css"> 24 <style> 25 /* Login-specific styles */ 26 body { 27 justify-content: center; 28 } 29 30 main { 31 max-width: 28rem !important; 32 width: 100%; 33 text-align: center; 34 } 35 36 h1 { 37 font-size: 3rem; 38 margin-bottom: 0.5rem; 39 } 40 41 .subtitle { 42 margin-bottom: 2rem; 43 } 44 45 .auth-box { 46 background: rgba(188, 141, 160, 0.05); 47 border: 1px solid var(--old-rose); 48 padding: 2rem; 49 margin-bottom: 1rem; 50 } 51 52 input[type="text"], 53 input[type="password"] { 54 margin-bottom: 1rem; 55 } 56 57 .ldap-user-display { 58 background: rgba(188, 141, 160, 0.1); 59 border-left: 3px solid var(--berry-crush); 60 padding: 0.75rem 1rem; 61 margin-bottom: 1rem; 62 text-align: left; 63 font-size: 0.875rem; 64 } 65 66 .ldap-user-display .label { 67 color: var(--old-rose); 68 font-size: 0.75rem; 69 text-transform: uppercase; 70 letter-spacing: 0.05rem; 71 } 72 73 .ldap-user-display .username { 74 color: var(--lavender); 75 font-weight: 600; 76 } 77 78 button { 79 width: 100%; 80 padding: 1.25rem 2rem; 81 font-size: 1.125rem; 82 margin-bottom: 0.75rem; 83 } 84 85 .info { 86 margin-top: 1.5rem; 87 padding: 1rem; 88 background: rgba(188, 141, 160, 0.05); 89 border-radius: 0.5rem; 90 font-size: 0.8125rem; 91 color: var(--old-rose); 92 line-height: 1.6; 93 text-align: left; 94 } 95 96 .info strong { 97 color: var(--lavender); 98 } 99 </style> 100</head> 101 102<body> 103 <main> 104 <img src="../../public/logo.svg" alt="indiko" style="height: 3rem; margin-bottom: 0.5rem;" /> 105 <p class="subtitle">sign in with passkey</p> 106 107 <div id="message" class="message"></div> 108 109 <div class="auth-box"> 110 <form id="loginForm"> 111 <input type="text" id="username" placeholder="username" required autocomplete="username webauthn" /> 112 <button type="submit" id="loginBtn">sign in</button> 113 </form> 114 115 <form id="registerForm" style="display: none;"> 116 <input type="text" id="registerUsername" placeholder="create username" required 117 autocomplete="username webauthn" /> 118 <button type="submit" class="secondary-btn" id="registerBtn">create passkey</button> 119 </form> 120 121 <form id="ldapForm" style="display: none;"> 122 <div class="ldap-user-display"> 123 <div class="label">username</div> 124 <div class="username" id="ldapUsername"></div> 125 </div> 126 <input type="password" id="ldapPassword" placeholder="LDAP password" required autocomplete="current-password" /> 127 <button type="submit" id="ldapBtn">verify & continue</button> 128 </form> 129 </div> 130 131 <div class="info"> 132 <strong>What's a passkey?</strong><br> 133 A passwordless login using your device's biometrics (fingerprint, face) or security key. More secure than 134 passwords, no typing required. 135 </div> 136 </main> 137 138 <script type="module" src="../client/login.ts"></script> 139 140</body> 141 142</html>