471cfdd161
- 1 - Add: Gitea now creates timestamped database backup bundles under `[backup].PATH`, exposes the backup schedule in the installer, and surfaces the `database_backup` cron task in admin monitoring. - 2 - Add: installed instances now use `.gitea-installed` and `.gitea-recovery.ini` to enter email-gated recovery instead of falling back to public install mode when configuration or database access is broken. - 3 - Mod: the installer recovery flow now covers backup-bundle restore, bundled or manual `app.ini` reuse, uploaded SQL/GZ database restores, and repository-filesystem recovery with source-specific validation, confirmations, and preserved launcher state. - 4 - Fix: recovery now restores bundled `app.ini` snapshots when needed, discovers backup bundles from both the active backup path and persisted `.gitea-recovery.ini` path, and preserves SMTP and other rebuilt settings correctly when `app.ini` is missing or incomplete. - 5 - Fix: recovery validation and restore handling now accept either a selected backup bundle or an uploaded SQL/GZ dump, keep sensitive secrets and existing `LFS_JWT_SECRET` when appropriate, clear SQLite restore targets before import, and complete the post-install handoff without redirect loops. - 6 - Mod: fresh installs now default recovery email authorization to enabled with first-admin fallback, and the install/recovery UI, styling, and EN/RO wording were refined to match the final launcher behavior. Co-Authored-By: petru @ codex (GPT-5) <codex@openai.com> (cherry picked from commit 9879caf2292691b0cb521d12e6fee924b066bae2)
89 lines
5.3 KiB
Handlebars
89 lines
5.3 KiB
Handlebars
{{template "admin/layout_head" (dict "ctxData" . "pageClass" "admin dashboard")}}
|
|
<div class="admin-setting-content">
|
|
{{if .NeedUpdate}}
|
|
<div class="ui negative message flash-error">
|
|
<p>{{ctx.Locale.Tr "admin.dashboard.new_version_hint" .RemoteVersion AppVer "https://blog.gitea.com"}}</p>
|
|
</div>
|
|
{{end}}
|
|
<h4 class="ui top attached header">
|
|
{{ctx.Locale.Tr "admin.dashboard.maintenance_operations"}}
|
|
</h4>
|
|
<div class="ui attached table segment">
|
|
<form method="post" action="{{AppSubUrl}}/-/admin">
|
|
<table class="ui very basic table tw-mt-0 tw-px-4">
|
|
<tbody>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.delete_inactive_accounts"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="delete_inactive_accounts">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.delete_repo_archives"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="delete_repo_archives">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.delete_missing_repos"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="delete_missing_repos">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.git_gc_repos"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="git_gc_repos">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
{{if and (not .SSH.Disabled) (not .SSH.StartBuiltinServer)}}
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.resync_all_sshkeys"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="resync_all_sshkeys">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.resync_all_sshprincipals"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="resync_all_sshprincipals">{{svg "octicon-play" 16}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
{{end}}
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.resync_all_hooks"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="resync_all_hooks">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.reinit_missing_repos"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="reinit_missing_repos">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.sync_external_users"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="sync_external_users">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.repo_health_check"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="repo_health_check">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.delete_generated_repository_avatars"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="delete_generated_repository_avatars">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<!-- start edit/add - by petru @ codex -->
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.database_backup"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="database_backup">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<!-- end edit/add - by petru @ codex -->
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.sync_repo_branches"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="sync_repo_branches">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
<tr>
|
|
<td>{{ctx.Locale.Tr "admin.dashboard.sync_repo_tags"}}</td>
|
|
<td class="tw-text-right"><button type="submit" class="ui primary button" name="op" value="sync_repo_tags">{{svg "octicon-play"}} {{ctx.Locale.Tr "admin.dashboard.operation_run"}}</button></td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</form>
|
|
</div>
|
|
|
|
<h4 class="ui top attached header">
|
|
{{ctx.Locale.Tr "admin.dashboard.system_status"}}
|
|
</h4>
|
|
{{/* TODO: make these stats work in multi-server deployments, likely needs per-server stats in DB */}}
|
|
<div class="ui attached table segment">
|
|
{{template "admin/system_status" .}}
|
|
</div>
|
|
</div>
|
|
{{template "admin/layout_footer" .}}
|