chore: fix evernote attachment imports causing CSP issues [skip e2e]

This commit is contained in:
Aman Harwara
2024-04-20 16:13:59 +05:30
parent f7a3d493f1
commit 85d0550a20
3 changed files with 20 additions and 3 deletions

View File

@@ -7,6 +7,7 @@ import MD5 from 'crypto-js/md5'
import Base64 from 'crypto-js/enc-base64' import Base64 from 'crypto-js/enc-base64'
import { Converter, UploadFileFn } from '../Converter' import { Converter, UploadFileFn } from '../Converter'
import { ConversionResult } from '../ConversionResult' import { ConversionResult } from '../ConversionResult'
import { getBlobFromBase64 } from '../Utils'
dayjs.extend(customParseFormat) dayjs.extend(customParseFormat)
dayjs.extend(utc) dayjs.extend(utc)
@@ -330,8 +331,7 @@ export class EvernoteConverter implements Converter {
} }
async getFileFromResource(resource: EvernoteResource): Promise<File> { async getFileFromResource(resource: EvernoteResource): Promise<File> {
const response = await fetch(resource.data) const blob = getBlobFromBase64(resource.data, resource.mimeType)
const blob = await response.blob()
return new File([blob], resource.fileName, { type: resource.mimeType }) return new File([blob], resource.fileName, { type: resource.mimeType })
} }

View File

@@ -11,3 +11,20 @@ export const readFileAsText = (file: File): Promise<string> => {
reader.readAsText(file) reader.readAsText(file)
}) })
} }
export const getBlobFromBase64 = (b64Data: string, contentType = '') => {
const byteString = atob(b64Data.split(',')[1])
if (!contentType) {
contentType = b64Data.split(',')[0].split(':')[1].split(';')[0]
}
const buffer = new ArrayBuffer(byteString.length)
const view = new Uint8Array(buffer)
for (let i = 0; i < byteString.length; i++) {
view[i] = byteString.charCodeAt(i)
}
const blob = new Blob([buffer], { type: contentType })
return blob
}

View File

@@ -20,7 +20,7 @@ module.exports = (env, argv) => {
headers: { headers: {
'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Origin': '*',
'Content-Security-Policy': 'Content-Security-Policy':
"default-src https: 'self'; base-uri 'self'; child-src * blob:; connect-src * data: blob:; font-src * data:; form-action 'self'; frame-ancestors * file:; frame-src * blob:; img-src 'self' * data: blob:; manifest-src 'self'; media-src 'self' blob: *.standardnotes.com; object-src 'self' blob: *.standardnotes.com; script-src 'self' 'sha256-r26E+iPOhx7KM7cKn4trOSoD8u5E7wL7wwJ8UrR+rGs=' 'unsafe-eval' 'wasm-unsafe-eval'; style-src *;", "default-src https: 'self'; base-uri 'self'; child-src * blob:; connect-src * blob:; font-src * data:; form-action 'self'; frame-ancestors * file:; frame-src * blob:; img-src 'self' * data: blob:; manifest-src 'self'; media-src 'self' blob: *.standardnotes.com; object-src 'self' blob: *.standardnotes.com; script-src 'self' 'sha256-r26E+iPOhx7KM7cKn4trOSoD8u5E7wL7wwJ8UrR+rGs=' 'unsafe-eval' 'wasm-unsafe-eval'; style-src *;",
}, },
hot: true, hot: true,
static: './dist', static: './dist',