diff --git a/.env b/.env index ce28ec9..8bc36fd 100644 --- a/.env +++ b/.env @@ -9,3 +9,4 @@ REACT_APP_FIREBASE_STORAGE_BUCKET= REACT_APP_FIREBASE_MESSAGING_SENDER_ID= REACT_APP_FIREBASE_APP_ID= REACT_APP_FIREBASE_MEASUREMENT_ID= +REACT_APP_CDN_URL= diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index b68d6ad..52217fe 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -57,5 +57,5 @@ gcloud auth login Set up CORS: ```bash -gsutil cors set cors.json gs:// +gsutil cors set firebase/cors.json gs:// ``` diff --git a/src/hooks/useServerStorage.ts b/src/hooks/useServerStorage.ts index 6fa3b93..0dc2aeb 100644 --- a/src/hooks/useServerStorage.ts +++ b/src/hooks/useServerStorage.ts @@ -12,15 +12,26 @@ import { const PUBLIC_PATH = 'public'; const USERS_PATH = `${PUBLIC_PATH}/users`; const INI_PATH = `${PUBLIC_PATH}/ini`; +const CDN_URL = process.env.REACT_APP_CDN_URL; const storage = getStorage(); const genericError = (error: Error) => notification.error({ message: 'Storage Error', description: error.message }); +const fetchFromServer = async (path: string): Promise => { + if (CDN_URL) { + const response = await fetch(`${CDN_URL}/${path}`); + return Promise.resolve(response.arrayBuffer()); + } + + return Promise.resolve(await getBytes(ref(storage, path))); +}; + const useServerStorage = () => { const getFile = async (path: string) => { + try { - return Promise.resolve(await getBytes(ref(storage, path))); + return fetchFromServer(path); } catch (error) { Sentry.captureException(error); console.error(error); @@ -34,7 +45,7 @@ const useServerStorage = () => { const { version, baseVersion } = /.+?(?(?\d+)(-\w+)*)/.exec(signature)?.groups || { version: null, baseVersion: null }; try { - return Promise.resolve(await getBytes(ref(storage, `${INI_PATH}/${version}.ini.gz`))); + return fetchFromServer(`${INI_PATH}/${version}.ini.gz`); } catch (error) { Sentry.captureException(error); console.error(error); @@ -45,11 +56,10 @@ const useServerStorage = () => { }); try { - return Promise.resolve(await getBytes(ref(storage, `${INI_PATH}/${baseVersion}.ini.gz`))); - // eslint-disable-next-line @typescript-eslint/no-shadow - } catch (error) { - Sentry.captureException(error); - console.error(error); + return fetchFromServer(`${INI_PATH}/${baseVersion}.ini.gz`); + } catch (err) { + Sentry.captureException(err); + console.error(err); notification.error({ message: 'INI not found', diff --git a/src/pages/Upload.tsx b/src/pages/Upload.tsx index a8dfdcc..9a43584 100644 --- a/src/pages/Upload.tsx +++ b/src/pages/Upload.tsx @@ -91,7 +91,7 @@ const containerStyle = { const rowProps = { gutter: 10 }; const colProps = { span: 24, sm: 12 }; -const maxFileSizeMB = 10; +const maxFileSizeMB = 50; const descriptionEditorHeight = 260; const thisYear = (new Date()).getFullYear(); const nanoidCustom = customAlphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', 10);