Files
warpbox-dev/backend/templates/layouts/base.html
Daniel Legt 61b7c283a4 fix(auth): reject invalid bearer tokens instead of falling back
Modify the authentication handler to return an unauthorized error when
an invalid or disabled bearer token is provided, rather than silently
falling back to an anonymous request.

This ensures that clients attempting to authenticate but failing (due to
expired, malformed, or disabled tokens) are explicitly notified of the
auth failure instead of proceeding anonymously. True anonymous requests
without any Authorization header remain supported.
2026-05-31 13:02:58 +03:00

66 lines
2.9 KiB
HTML

{{define "base"}}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{if .Title}}{{.Title}} - {{end}}{{.AppName}}</title>
<meta name="description" content="{{.Description}}">
<meta name="theme-color" content="#09090b">
<meta property="og:site_name" content="{{.AppName}}">
<meta property="og:title" content="{{if .Title}}{{.Title}}{{else}}{{.AppName}}{{end}}">
<meta property="og:description" content="{{.Description}}">
<meta property="og:type" content="website">
<meta property="og:url" content="{{.BaseURL}}">
{{if .ImageURL}}<meta property="og:image" content="{{.ImageURL}}">{{end}}
<meta name="twitter:card" content="summary_large_image">
{{if .ImageURL}}<meta name="twitter:image" content="{{.ImageURL}}">{{end}}
<link rel="stylesheet" href="/static/css/00-base.css">
<link rel="stylesheet" href="/static/css/10-layout.css">
<link rel="stylesheet" href="/static/css/20-upload.css">
<link rel="stylesheet" href="/static/css/30-download.css">
<link rel="stylesheet" href="/static/css/40-docs.css">
<link rel="stylesheet" href="/static/css/50-admin.css">
<link rel="stylesheet" href="/static/css/60-storage.css">
<link rel="stylesheet" href="/static/css/70-tokens.css">
<link rel="stylesheet" href="/static/css/90-responsive.css">
<script defer src="/static/js/00-utils.js"></script>
<script defer src="/static/js/10-file-browser.js"></script>
<script defer src="/static/js/20-storage-admin.js"></script>
<script defer src="/static/js/30-token-copy.js"></script>
<script defer src="/static/js/40-upload.js"></script>
</head>
<body class="dark">
<a class="skip-link" href="#main">Skip to content</a>
<header class="site-header">
<nav class="nav" aria-label="Main navigation">
<a class="brand" href="/" aria-label="{{.AppName}} home">
<span class="brand-mark" aria-hidden="true">W</span>
<span>{{.AppName}}</span>
</a>
<div class="nav-links">
{{if .CurrentUser}}
<a class="button button-ghost" href="/app">Dashboard</a>
{{if eq .CurrentUser.Role "admin"}}<a class="button button-ghost" href="/admin">Admin</a>{{end}}
<a class="button button-ghost" href="/api">API</a>
<a class="button button-outline" href="/account/settings"><span class="nav-username">{{.CurrentUser.Username}}</span></a>
{{else}}
<a class="button button-ghost" href="/api">API</a>
<a class="button button-outline" href="/login">Sign in</a>
{{end}}
</div>
</nav>
</header>
<main id="main">
{{template "content" .}}
</main>
<footer class="site-footer">
<span>{{.AppName}} · {{.CurrentYear}} · self-hosted</span>
<span class="footer-links">{{if .CurrentUser}}<a href="/app">Dashboard</a><a href="/api">API</a><a href="/account/settings">Account</a>{{else}}<a href="/login">Sign in</a><a href="/api">API</a>{{end}}</span>
</footer>
</body>
</html>
{{end}}