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}}