From 6fb3781381223488d4051fe2de73c7e9116d474a Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Mon, 26 Jul 2021 14:19:13 +0200 Subject: [PATCH 1/2] Allow empty file type and also validate file extension --- src/routes/safe/components/AddressBook/utils.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/routes/safe/components/AddressBook/utils.ts b/src/routes/safe/components/AddressBook/utils.ts index e61dfd3743..fa2036e3e1 100644 --- a/src/routes/safe/components/AddressBook/utils.ts +++ b/src/routes/safe/components/AddressBook/utils.ts @@ -5,15 +5,18 @@ export const WRONG_FILE_EXTENSION_ERROR = 'Only CSV files are allowed' export const FILE_SIZE_TOO_BIG_ERROR = 'The size of the file is over 1 MB' export const FILE_BYTES_LIMIT = 1000000 export const IMPORT_SUPPORTED_FORMATS = [ + '', 'text/csv', 'application/vnd.ms-excel', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', ] +const CSV_EXTENSION_REGEX = /([a-zA-Z0-9\s_\\.\-:])+(.csv|.ods|.xls|.xlsx)$/ + export type CsvDataType = { data: string[] }[] export const validateFile = (file: File): string | undefined => { - if (!IMPORT_SUPPORTED_FORMATS.includes(file.type)) { + if (!IMPORT_SUPPORTED_FORMATS.includes(file.type) || !CSV_EXTENSION_REGEX.test(file.name.toLowerCase())) { return WRONG_FILE_EXTENSION_ERROR } From 7bfeb9b4cab652dcfd2919388bed85e599f8627e Mon Sep 17 00:00:00 2001 From: Daniel Sanchez Date: Mon, 26 Jul 2021 14:23:25 +0200 Subject: [PATCH 2/2] Add test case --- .../safe/components/AddressBook/__tests__/utils.test.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/routes/safe/components/AddressBook/__tests__/utils.test.ts b/src/routes/safe/components/AddressBook/__tests__/utils.test.ts index 6aee4f3772..928f7c259d 100644 --- a/src/routes/safe/components/AddressBook/__tests__/utils.test.ts +++ b/src/routes/safe/components/AddressBook/__tests__/utils.test.ts @@ -8,12 +8,18 @@ import { } from '../utils' describe('Address Book file validations', () => { - it('Should return wrong file extension error if file extension is not the allowed', () => { + it('Should return wrong file extension error if file type is not allowed', () => { const file = new File([''], 'file.txt', { type: 'text/plain' }) const result = validateFile(file) expect(result).toBe(WRONG_FILE_EXTENSION_ERROR) }) + it('Should return wrong file extension error if file extension is not valid', () => { + const file = new File([''], 'file.txt', { type: IMPORT_SUPPORTED_FORMATS[0] }) + const result = validateFile(file) + expect(result).toBe(WRONG_FILE_EXTENSION_ERROR) + }) + it('Should return file size error if file size is over the allowed', () => { const file = new File([''], 'file.csv', { type: IMPORT_SUPPORTED_FORMATS[0] }) Object.defineProperty(file, 'size', { value: 1024 * 1024 + 1 })