go-micro.dev/v5@v5.12.0/cmd/micro/web/templates/auth_tokens.html (about) 1 {{define "content"}} 2 <h2 class="text-2xl font-bold mb-4">Auth Tokens</h2> 3 <table style="margin-bottom:2em;"> 4 <thead> 5 <tr><th>ID</th><th>Type</th><th>Scopes</th><th>Metadata</th><th>Token</th><th>Delete</th></tr> 6 </thead> 7 <tbody> 8 {{range .Tokens}} 9 <tr> 10 <td>{{.ID}}</td> 11 <td>{{.Type}}</td> 12 <td>{{range .Scopes}}<code>{{.}}</code> {{end}}</td> 13 <td> 14 {{range $k, $v := .Metadata}} 15 {{if and (ne $k "password_hash") (ne $k "token")}} 16 <b>{{$k}}</b>: {{$v}} 17 {{end}} 18 {{end}} 19 </td> 20 <td style="max-width:320px; word-break:break-all;"> 21 {{if .Token}} 22 <span class="obfuscated-token" data-token="{{.Token}}"> 23 {{if .TokenSuffix}} 24 {{.TokenPrefix}}...{{.TokenSuffix}} 25 {{else}} 26 {{.Token}} 27 {{end}} 28 </span> 29 <button onclick="copyToken(this)" data-token="{{.Token}}" style="margin-left:0.5em;">Copy</button> 30 {{end}} 31 </td> 32 <td> 33 <form method="POST" action="/auth/tokens" style="display:inline; padding: 0; border: 0"> 34 <input type="hidden" name="delete" value="{{.ID}}"> 35 <button type="submit" onclick="return confirm('Delete token {{.ID}}?')">Delete</button> 36 </form> 37 </td> 38 </tr> 39 {{end}} 40 </tbody> 41 </table> 42 <h3 style="margin-bottom:1em;">Create New Token</h3> 43 <form method="POST" action="/auth/tokens"> 44 <input name="id" placeholder="Name/ID" required style="margin-right:1em;"> 45 <select name="type" style="margin-right:1em;"> 46 <option value="user">User</option> 47 <option value="admin">Admin</option> 48 <option value="service">Service</option> 49 </select> 50 <input name="scopes" placeholder="Scopes (comma separated)" style="margin-right:1em;"> 51 <button type="submit">Create</button> 52 </form> 53 <script> 54 function copyToken(btn) { 55 const token = btn.getAttribute('data-token'); 56 if (navigator.clipboard) { 57 navigator.clipboard.writeText(token); 58 btn.textContent = 'Copied!'; 59 setTimeout(() => { btn.textContent = 'Copy'; }, 1200); 60 } 61 } 62 </script> 63 {{end}}