2
0
Files
gitcaddy-vault/templates/repo/vault/versions.tmpl
logikonline 3a920ce90c
All checks were successful
Build and Release / Tests (push) Successful in 1m5s
Build and Release / Lint (push) Successful in 1m38s
Build and Release / Create Release (push) Successful in 0s
feat(vault): add confirmation modals for destructive operations
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.
2026-02-06 22:22:08 -05:00

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