fix(reports): trust verified proxy origin
Staging Backend Quality Gate / validate (push) Successful in 12m13s
Staging Backend Quality Gate / publish (push) Has been cancelled

This commit is contained in:
Jesse_Chen
2026-08-09 00:54:55 +08:00
parent 32b683ebef
commit 17430a1f21
12 changed files with 148 additions and 45 deletions
@@ -57,6 +57,7 @@ export async function GET(request: Request, context: RouteContext) {
requestUrl: request.url,
origin: request.headers.get("origin"),
allowedOrigins: resolveAllowedReportOrigins(process.env),
requestHeaders: request.headers,
userId,
reportId,
persistence: persistence ?? {
@@ -105,6 +106,7 @@ export async function DELETE(request: Request, context: RouteContext) {
requestUrl: request.url,
origin: request.headers.get("origin"),
allowedOrigins: resolveAllowedReportOrigins(process.env),
requestHeaders: request.headers,
userId,
reportId,
persistence: persistence ?? {
+1
View File
@@ -68,6 +68,7 @@ export async function POST(request: Request) {
requestUrl: request.url,
origin: request.headers.get("origin"),
allowedOrigins: resolveAllowedReportOrigins(process.env),
requestHeaders: request.headers,
userId,
rawBody: await request.json().catch(() => null),
profile,
+2 -3
View File
@@ -374,9 +374,8 @@ button:disabled { cursor: default; opacity: .45; }
.chat-header { z-index: 2; min-width: 0; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 20px; border-bottom: 1px solid color-mix(in srgb, var(--color-border) 70%, transparent); padding: 0 var(--space-8); background: var(--color-frosted); backdrop-filter: saturate(130%) blur(20px); text-align: left; }
.chat-header > div { min-width: 0; }
.chat-header strong { max-width: min(560px, 62vw); overflow: hidden; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; font-family: var(--font-display); font-size: var(--type-title-md); font-weight: 400; letter-spacing: -.3px; }
.chat-header span { color: var(--color-ink-secondary); margin-top: var(--space-1); font-size: 12px; }
.status { display: inline-block; margin: 0 6px 1px 0; border-radius: 50%; background: var(--color-success); width: 7px; height: 7px; margin-right: var(--space-2); }
.status-loading { background: var(--color-action); }
.chat-header-actions { min-width: max-content; display: flex; flex: 0 0 auto; align-items: center; gap: var(--space-2); white-space: nowrap; }
.chat-header-actions > * { flex: 0 0 auto; }
.credit-button { min-height: 44px; display: inline-flex; align-items: center; justify-content: center; gap: 6px; padding: 0 11px; cursor: pointer; font-size: 13px; font-variant-numeric: tabular-nums; transition: background-color 120ms ease-out, transform 120ms ease-out; min-width: 64px; border: 1px solid var(--color-border); border-radius: var(--radius-md); background: var(--color-canvas-soft); color: var(--color-ink-secondary); font-weight: 500; }
.conversation { min-width: 0; min-height: 0; overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; scrollbar-gutter: stable; padding-bottom: var(--composer-reserve); background: var(--color-canvas); }
-5
View File
@@ -3111,11 +3111,6 @@ export default function Home() {
<SidebarTrigger placement="inset" />
<div>
<strong>{activeSession?.title || "新对话"}</strong>
<span><i className={`status ${isLoading ? "status-loading" : "status-idle"}`} />{isLoading
? (consultationPhase === "undo" ? "即将发送,可撤回" : consultationPhase === "recovering" ? "正在恢复后台回答" : activeStreamingText ? "正在回答" : "正在核对星盘信息")
: rectificationSurfaceOpen || (!profileComplete && onboardingStep === "rectification")
? "正在校正出生时间"
: personalChartAvailable ? "基于星盘证据回答" : "回答一般占星知识"}</span>
</div>
<div className="chat-header-actions">
{reportEntryVisible && activeSession && (