fix(reports): trust verified proxy origin
This commit is contained in:
@@ -21,6 +21,7 @@ import { useRef, useState } from "react";
|
||||
import { useRouter } from "next/navigation";
|
||||
|
||||
import { FileText } from "lucide-react";
|
||||
import { toast } from "sonner";
|
||||
|
||||
export const DEFAULT_REPORT_THEMES = ["career", "marriage", "wealth", "timing"] as const;
|
||||
|
||||
@@ -155,7 +156,6 @@ export function GeneratePersonalReportButton({
|
||||
}: GeneratePersonalReportButtonProps) {
|
||||
const router = useRouter();
|
||||
const [submitting, setSubmitting] = useState(false);
|
||||
const [notice, setNotice] = useState<string | null>(null);
|
||||
const inFlight = useRef(false);
|
||||
|
||||
async function handleGenerate() {
|
||||
@@ -164,11 +164,10 @@ export function GeneratePersonalReportButton({
|
||||
}
|
||||
inFlight.current = true;
|
||||
setSubmitting(true);
|
||||
setNotice(null);
|
||||
try {
|
||||
const requestId = createReportRequestId();
|
||||
if (requestId === null) {
|
||||
setNotice("请使用支持安全请求标识的现代浏览器。");
|
||||
toast.error("请使用支持安全请求标识的现代浏览器。");
|
||||
return;
|
||||
}
|
||||
const body = buildPersonalReportCreateRequest(requestId, sessionId);
|
||||
@@ -189,9 +188,9 @@ export function GeneratePersonalReportButton({
|
||||
router.push(`/reports/${encodeURIComponent(outcome.reportId)}`);
|
||||
return;
|
||||
}
|
||||
setNotice(outcome.message);
|
||||
toast.error(outcome.message);
|
||||
} catch {
|
||||
setNotice("网络异常,请检查连接后重试。");
|
||||
toast.error("网络异常,请检查连接后重试。");
|
||||
} finally {
|
||||
inFlight.current = false;
|
||||
setSubmitting(false);
|
||||
@@ -203,31 +202,15 @@ export function GeneratePersonalReportButton({
|
||||
: "生成个人报告;服务端将校验本次咨询是否存在可用证据,无证据时会提示。";
|
||||
|
||||
return (
|
||||
<div className="flex flex-wrap items-center gap-2">
|
||||
<button
|
||||
type="button"
|
||||
className="inline-flex items-center gap-1.5 rounded-lg border border-border bg-canvas px-3 py-1.5 text-sm text-ink transition-colors hover:bg-canvas-muted disabled:pointer-events-none disabled:opacity-50"
|
||||
onClick={() => void handleGenerate()}
|
||||
disabled={submitting}
|
||||
title={title}
|
||||
aria-describedby="personal-report-entry-note"
|
||||
>
|
||||
<FileText aria-hidden="true" className="size-4" />
|
||||
{submitting ? "正在生成…" : "生成个人报告"}
|
||||
</button>
|
||||
{notice !== null ? (
|
||||
<span id="personal-report-entry-note" role="status" className="max-w-56 text-xs text-warning">
|
||||
{notice}
|
||||
</span>
|
||||
) : evidenceState === "unknown" ? (
|
||||
<span id="personal-report-entry-note" className="max-w-56 text-xs text-ink-tertiary">
|
||||
服务端将校验本次咨询证据。
|
||||
</span>
|
||||
) : (
|
||||
<span id="personal-report-entry-note" className="sr-only">
|
||||
本次对话包含工作流证据记录,最终以服务端校验为准。
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
className="inline-flex min-h-11 shrink-0 items-center gap-1.5 whitespace-nowrap rounded-lg border border-border bg-canvas px-3 py-1.5 text-sm text-ink transition-colors hover:bg-canvas-muted disabled:pointer-events-none disabled:opacity-50"
|
||||
onClick={() => void handleGenerate()}
|
||||
disabled={submitting}
|
||||
title={title}
|
||||
>
|
||||
<FileText aria-hidden="true" className="size-4" />
|
||||
{submitting ? "正在生成…" : "生成个人报告"}
|
||||
</button>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user