- One card per app (grouped by client_id) showing distinct device and category counts; the whole card opens the details modal (with hover and focus highlight) instead of a separate Details button - Details modal: access list styled like the OAuth consent dialog via a shared RsScopeListComponent, plus per-token device, connected date and expiry, each with its own Revoke - "folder" -> "category" in the card, modal, consent dialog and the auth-created notification - Make revoke a real DELETE: it was a GET link that Turbo 8's prefetch-on-hover fired on its own, silently deleting authorizations. Missing or foreign authorizations now return 404 instead of 500. - Move "Launch app" to the app level (GET /services/storage/apps/:client_id/launch); no token id in the URL Part of #254
26 lines
754 B
ERB
26 lines
754 B
ERB
<% if @root %>
|
|
<p class="scope text-lg">
|
|
<span class="text-red-700">
|
|
<%= render partial: "icons/alert-triangle",
|
|
locals: { custom_class: "inline-block align-bottom mr-1.5" } %>
|
|
All categories and files
|
|
</span>
|
|
<% if read_only? %>
|
|
<span class="text-sm text-gray-500">(read only)</span>
|
|
<% end %>
|
|
</p>
|
|
<% else %>
|
|
<% @scopes.each do |scope| %>
|
|
<p class="scope text-gray-600">
|
|
<span class="text-lg">
|
|
<%= render partial: "icons/folder",
|
|
locals: { custom_class: "inline-block align-bottom mr-1.5" } %>
|
|
<%= scope_name(scope) %>
|
|
</span>
|
|
<% if scope_permissions(scope) == "r" %>
|
|
<span>(read only)</span>
|
|
<% end %>
|
|
</p>
|
|
<% end %>
|
|
<% end %>
|