Files
forge/templates/status/500.tmpl
zeekay 88b1c08359 brand: white-label residual user/API-facing "Gitea" to "Hanzo Git"
git.hanzo.ai still leaked "Gitea" on several surfaces; scrub the ones a
human or API client sees, leaving internals untouched:

- swagger spec (title/description/summary + deprecation notes) in the
  served v1_json/v1_openapi3 templates AND the api.go/version.go
  annotation source, so generate-swagger stays in sync (no drift)
- openapi-viewer <title>
- en-US locale display strings
- admin auth group-team-map example + webhook default-username placeholders
- 500-page report link -> hanzoai/git; global JS error banner
- /.well-known/security.txt

Kept (external/product/internal, not our self-identity): the
repo.migrate.gitea external migration source, the Gitea OAuth2 login
provider, GiteaUser struct field, X-Gitea-Fetch-Action header,
{{/* */}} template comments, and the /api/v1/version number.
2026-07-21 09:18:21 -07:00

70 lines
3.0 KiB
Handlebars

{{/* This page should only depend the minimal template functions/variables, to avoid triggering new panics.
* base template functions: AppName, AssetUrlPrefix, AssetURI, AppSubUrl
* ctx.Locale
* .Flash
* .ErrorMsg
* .SignedUser (optional)
*/}}
<!DOCTYPE html>
<html lang="{{ctx.Locale.Lang}}" data-theme="{{ctx.CurrentWebTheme.InternalName}}">
<head>
{{ctx.HeadMetaContentSecurityPolicy}}
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Internal Server Error - {{AppName}}</title>
<link rel="icon" href="{{AssetUrlPrefix}}/img/favicon.svg" type="image/svg+xml">
<link rel="alternate icon" href="{{AssetUrlPrefix}}/img/favicon.png" type="image/png">
{{template "base/head_style" .}}
</head>
<body>
<div class="full height">
<nav class="ui secondary menu">
<div class="ui container tw-flex">
<div class="item tw-flex-1">
<a href="{{AppSubUrl}}/" aria-label="{{ctx.Locale.Tr "home_title"}}">
<img width="30" height="30" src="{{AssetUrlPrefix}}/img/logo.svg" alt="{{ctx.Locale.Tr "logo"}}" aria-hidden="true">
</a>
</div>
<div class="item">
<button class="ui icon button disabled">{{svg "octicon-three-bars"}}</button>{{/* a fake button to make the UI looks better*/}}
</div>
</div>
</nav>
<div class="divider tw-my-0"></div>
<div role="main" class="page-content status-page-500">
<div class="ui container" >
{{template "base/alert" .}}
<div class="status-page-error">
<div class="status-page-error-title">500 Internal Server Error</div>
{{if .ErrorMsg}}
<div class="tw-mt-8">
<p>{{ctx.Locale.Tr "error.occurred"}}:</p>
<pre class="tw-whitespace-pre-wrap tw-wrap-anywhere">{{.ErrorMsg}}</pre>
</div>
{{end}}
<div class="tw-mt-8 tw-text-center">
{{if or .SignedUser.IsAdmin .ShowFooterVersion}}<p>{{ctx.Locale.Tr "admin.config.app_ver"}}: {{AppVer}}</p>{{end}}
{{if .SignedUser.IsAdmin}}<p>{{ctx.Locale.Tr "error.report_message" "https://github.com/hanzoai/git/issues"}}</p>{{end}}
</div>
</div>
</div>
</div>
</div>
{{/* When a sub-template triggers an 500 error, its parent template has been partially rendered, then the 500 page
will be rendered after that partially rendered page, the HTML/JS are totally broken. Use this inline script to try to move it to main viewport.
And this page shouldn't include any other JS file, avoid duplicate JS execution (still due to the partial rendering).*/}}
<script nonce="{{ctx.CspScriptNonce}}" type="module">
const embedded = document.querySelector('.page-content .page-content.status-page-500');
if (embedded) {
// move the 500 error page content to main view
const embeddedParent = embedded.parentNode;
let main = document.querySelector('.page-content');
main = main ?? document.querySelector('body');
main.prepend(document.createElement('hr'));
main.prepend(embedded);
embeddedParent.remove(); // remove the unrelated 500-page elements (eg: the duplicate nav bar)
}
</script>
</body>
</html>