Replaced inline confirm() dialogs with proper modal dialogs for key migration, DEK rotation, token revocation, and version rollback operations. Improves UX and provides better context for destructive actions.
108 lines
3.8 KiB
Cheetah
108 lines
3.8 KiB
Cheetah
{{template "repo/vault/layout_head" (dict "ctxData" . "pageClass" "repository vault versions")}}
|
|
<div class="ui segment">
|
|
<div class="tw-flex tw-items-start tw-justify-between tw-gap-4">
|
|
<div>
|
|
<h4 class="ui header tw-mb-0">
|
|
{{svg "octicon-history" 20}} {{ctx.Locale.Tr "vault.version_history"}}
|
|
<div class="sub header">{{.Secret.Name}}</div>
|
|
</h4>
|
|
</div>
|
|
<div class="tw-flex-shrink-0">
|
|
<a class="ui button" href="{{.RepoLink}}/vault/secrets/{{.Secret.Name}}">
|
|
{{svg "octicon-arrow-left" 16}} {{ctx.Locale.Tr "vault.back_to_secret"}}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="ui segment">
|
|
{{if .Versions}}
|
|
<table class="ui very basic striped table">
|
|
<thead>
|
|
<tr>
|
|
<th>{{ctx.Locale.Tr "vault.version"}}</th>
|
|
<th>{{ctx.Locale.Tr "vault.comment"}}</th>
|
|
<th>{{ctx.Locale.Tr "vault.created_by"}}</th>
|
|
<th>{{ctx.Locale.Tr "vault.created"}}</th>
|
|
<th class="right aligned">{{ctx.Locale.Tr "actions"}}</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{{range .Versions}}
|
|
<tr{{if eq .Version $.Secret.CurrentVersion}} class="positive"{{end}}>
|
|
<td>
|
|
<strong>v{{.Version}}</strong>
|
|
{{if eq .Version $.Secret.CurrentVersion}}
|
|
<span class="ui green label">{{ctx.Locale.Tr "vault.current"}}</span>
|
|
{{end}}
|
|
</td>
|
|
<td>{{if .Comment}}{{.Comment}}{{else}}<span class="text grey">{{ctx.Locale.Tr "vault.no_comment"}}</span>{{end}}</td>
|
|
<td>
|
|
{{if .CreatorName}}
|
|
{{ctx.AvatarUtils.Avatar .Creator 20}}
|
|
<a href="{{AppSubUrl}}/{{.CreatorName}}">{{.CreatorName}}</a>
|
|
{{else}}
|
|
<span class="text grey">{{ctx.Locale.Tr "vault.unknown_user"}}</span>
|
|
{{end}}
|
|
</td>
|
|
<td>{{DateUtils.TimeSince .CreatedUnix}}</td>
|
|
<td class="right aligned tw-whitespace-nowrap">
|
|
<div class="ui tiny buttons">
|
|
<a class="ui button" href="{{$.RepoLink}}/vault/secrets/{{$.Secret.Name}}/compare?from={{.Version}}">
|
|
{{svg "octicon-diff" 14}} {{ctx.Locale.Tr "vault.compare"}}
|
|
</a>
|
|
{{if and $.CanWrite (ne .Version $.Secret.CurrentVersion)}}
|
|
<form class="ui inline tw-inline" id="rollback-form-{{.Version}}" action="{{$.RepoLink}}/vault/secrets/{{$.Secret.Name}}/rollback" method="post">
|
|
{{$.CsrfTokenHtml}}
|
|
<input type="hidden" name="version" value="{{.Version}}">
|
|
<button class="ui button show-modal" type="button" data-modal="#rollback-modal" data-version="{{.Version}}">
|
|
{{svg "octicon-history" 14}} {{ctx.Locale.Tr "vault.rollback"}}
|
|
</button>
|
|
</form>
|
|
{{end}}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
{{end}}
|
|
</tbody>
|
|
</table>
|
|
{{else}}
|
|
<div class="ui placeholder segment">
|
|
<div class="ui icon header">
|
|
{{svg "octicon-history" 48}}
|
|
<h2>{{ctx.Locale.Tr "vault.no_versions"}}</h2>
|
|
</div>
|
|
</div>
|
|
{{end}}
|
|
</div>
|
|
|
|
{{if .CanWrite}}
|
|
<div class="ui small modal" id="rollback-modal">
|
|
<div class="header">{{svg "octicon-history"}} {{ctx.Locale.Tr "vault.rollback"}}</div>
|
|
<div class="content">
|
|
<p id="rollback-message"></p>
|
|
</div>
|
|
<div class="actions">
|
|
<button class="ui cancel button">{{ctx.Locale.Tr "cancel"}}</button>
|
|
<button class="ui primary button" id="rollback-confirm">{{ctx.Locale.Tr "vault.rollback"}}</button>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
(function() {
|
|
let currentVersion = null;
|
|
document.querySelectorAll('[data-modal="#rollback-modal"]').forEach(btn => {
|
|
btn.addEventListener('click', function() {
|
|
currentVersion = this.getAttribute('data-version');
|
|
document.getElementById('rollback-message').textContent = '{{ctx.Locale.Tr "vault.confirm_rollback" 0}}'.replace('0', currentVersion);
|
|
});
|
|
});
|
|
document.getElementById('rollback-confirm')?.addEventListener('click', function() {
|
|
if (currentVersion) {
|
|
document.getElementById('rollback-form-' + currentVersion).submit();
|
|
}
|
|
});
|
|
})();
|
|
</script>
|
|
{{end}}
|
|
{{template "repo/vault/layout_footer" .}}
|