app/views/my/access_token_partials/_oauth_tokens_section.html.erb
<%#-- copyright
OpenProject is an open source project management software.
Copyright (C) 2012-2024 the OpenProject GmbH
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License version 3.
OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
Copyright (C) 2006-2013 Jean-Philippe Lang
Copyright (C) 2010-2013 the ChiliProject Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
See COPYRIGHT and LICENSE files for more details.
++#%>
<div class="attributes-group" id="oauth-token-section">
<div class="attributes-group--header">
<div class="attributes-group--header-container">
<h3 class="attributes-group--header-text"><%= t("my_account.access_tokens.oauth.title") %></h3>
</div>
</div>
<div>
<p>
<%= t("my_account.access_tokens.oauth.text_hint") %>
</p>
<% if granted_applications.any? %>
<div class="generic-table--container">
<div class="generic-table--results-container">
<table class="generic-table">
<%= render partial: "my/access_token_partials/token_table_header",
locals: {
column_headers: [
t('attributes.name'),
User.human_attribute_name(:created_at),
t('my_account.access_tokens.headers.expiration')
]
}
%>
<tbody>
<% granted_applications.each do |application, tokens| %>
<% latest = tokens.sort_by(&:created_at).last %>
<tr id="oauth-application-grant-<%= application.id %>">
<td class="-w-rel-60" data-test-selector="oauth-token-row-<%= application.id %>-name">
<%= t('oauth.application.named', name: application.name) %>
(<%= t('oauth.x_active_tokens', count: tokens.count) %>)
</td>
<td>
<span><%= format_time(latest.created_at) %></span>
</td>
<td>
<span><%= format_time(latest.created_at + latest.expires_in.seconds) %></span>
</td>
<td class="buttons">
<%= link_to "",
revoke_my_oauth_application_path(application_id: application.id),
data: { confirm: t('oauth.revoke_my_application_confirmation',
token_count: t('oauth.x_active_tokens', count: tokens.count)),
test_selector: "oauth-token-row-#{application.id}-revoke" },
method: :post,
class: 'icon icon-delete' %>
</td>
</tr>
<% end %>
</tbody>
</table>
</div>
</div>
<% else %>
<span class="spot-icon spot-icon_inline spot-icon_info1"></span>
<i><%= t('my_account.access_tokens.oauth.empty_text_hint') %></i>
<% end %>
</div>
</div>