@@ -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