Skip to content

Commit dd183bd

Browse files
Add CSRF token to file upload/save requests
1 parent dd37168 commit dd183bd

1 file changed

Lines changed: 25 additions & 2 deletions

File tree

frontend/src/pages/app/FilesTab.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,9 @@ const FilePreview = ({
399399
const [editorVisible, setEditorVisible] = useState(false);
400400
const [saved, setSaved] = useState(true);
401401

402+
const { data: user } = api.useSuspenseQuery("get", "/user/me");
403+
const csrfToken = user.csrfToken;
404+
402405
const save = useCallback(async () => {
403406
const uploadURL = `/api/app/${app.id}/file?volumeClaimName=${encodeURIComponent(volumeClaimName)}&path=${encodeURIComponent(dirname(path))}`;
404407
const formData = new FormData();
@@ -407,7 +410,21 @@ const FilePreview = ({
407410
formData.set("files", blob, file.name);
408411
setSaving(true);
409412
try {
410-
await fetch(uploadURL, { method: "POST", body: formData });
413+
const response = await fetch(uploadURL, {
414+
method: "POST",
415+
body: formData,
416+
headers: {
417+
"X-CSRF-Token": csrfToken,
418+
},
419+
});
420+
if (!response.ok) {
421+
throw new Error(
422+
"Unexpected response status: " +
423+
response.status +
424+
" " +
425+
response.statusText,
426+
);
427+
}
411428
toast.success("File saved!");
412429
setSaved(true);
413430
} catch (e) {
@@ -416,7 +433,7 @@ const FilePreview = ({
416433
} finally {
417434
setSaving(false);
418435
}
419-
}, [app.id, editorContent, file.name, path, volumeClaimName]);
436+
}, [app.id, editorContent, file.name, path, volumeClaimName, csrfToken]);
420437

421438
useEffect(() => {
422439
if (content && !editorContent) {
@@ -687,6 +704,9 @@ const FileUpload = ({
687704

688705
const [open, setOpen] = useState(false);
689706

707+
const { data: user } = api.useSuspenseQuery("get", "/user/me");
708+
const csrfToken = user.csrfToken;
709+
690710
return (
691711
<Dialog open={open} onOpenChange={setOpen}>
692712
<DialogTrigger asChild>{children}</DialogTrigger>
@@ -704,6 +724,9 @@ const FileUpload = ({
704724
const promise = fetch(uploadURL, {
705725
method: "POST",
706726
body: formData,
727+
headers: {
728+
"X-CSRF-Token": csrfToken,
729+
},
707730
}).then((response) => {
708731
if (!response.ok) {
709732
throw new Error(

0 commit comments

Comments
 (0)