From a8be416cbdaa2059e7c0e3e14f56a21f262db432 Mon Sep 17 00:00:00 2001
From: OSBotify <76178356+OSBotify@users.noreply.github.com>
Date: Tue, 16 May 2023 14:08:42 -0400
Subject: [PATCH 1/2] Merge pull request #19054 from
 Expensify/version-BUILD-AE51CC12-4917-4B64-B5B1-5C2FDB6E23DE

Update version to 1.3.14-12 on main

(cherry picked from commit 51dff315ab65bc5266425de0b43d4fe1cd0cdbe7)
---
 android/app/build.gradle         | 4 ++--
 ios/NewExpensify/Info.plist      | 2 +-
 ios/NewExpensifyTests/Info.plist | 2 +-
 package-lock.json                | 4 ++--
 package.json                     | 2 +-
 5 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/android/app/build.gradle b/android/app/build.gradle
index 8b31f4b09ed0..7834d8ae90cd 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -106,8 +106,8 @@ android {
         minSdkVersion rootProject.ext.minSdkVersion
         targetSdkVersion rootProject.ext.targetSdkVersion
         multiDexEnabled rootProject.ext.multiDexEnabled
-        versionCode 1001031411
-        versionName "1.3.14-11"
+        versionCode 1001031412
+        versionName "1.3.14-12"
     }
 
     splits {
diff --git a/ios/NewExpensify/Info.plist b/ios/NewExpensify/Info.plist
index e45737142e47..fe60c96e7fb5 100644
--- a/ios/NewExpensify/Info.plist
+++ b/ios/NewExpensify/Info.plist
@@ -30,7 +30,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>1.3.14.11</string>
+	<string>1.3.14.12</string>
 	<key>ITSAppUsesNonExemptEncryption</key>
 	<false/>
 	<key>LSApplicationQueriesSchemes</key>
diff --git a/ios/NewExpensifyTests/Info.plist b/ios/NewExpensifyTests/Info.plist
index 76ad5da36692..84de56479723 100644
--- a/ios/NewExpensifyTests/Info.plist
+++ b/ios/NewExpensifyTests/Info.plist
@@ -19,6 +19,6 @@
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleVersion</key>
-	<string>1.3.14.11</string>
+	<string>1.3.14.12</string>
 </dict>
 </plist>
diff --git a/package-lock.json b/package-lock.json
index 109b0910b3ee..274a2685cafd 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
 {
   "name": "new.expensify",
-  "version": "1.3.14-11",
+  "version": "1.3.14-12",
   "lockfileVersion": 2,
   "requires": true,
   "packages": {
     "": {
       "name": "new.expensify",
-      "version": "1.3.14-11",
+      "version": "1.3.14-12",
       "hasInstallScript": true,
       "license": "MIT",
       "dependencies": {
diff --git a/package.json b/package.json
index 93b78b60fe4e..8dfb65d0218c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "new.expensify",
-  "version": "1.3.14-11",
+  "version": "1.3.14-12",
   "author": "Expensify, Inc.",
   "homepage": "https://new.expensify.com",
   "description": "New Expensify is the next generation of Expensify: a reimagination of payments based atop a foundation of chat.",

From 5476be817362cf04083b4d061d5ff84506a16d7a Mon Sep 17 00:00:00 2001
From: Youssef Lourayad <youssef@expensify.com>
Date: Tue, 16 May 2023 18:58:46 +0100
Subject: [PATCH 2/2] Merge pull request #18521 from
 Expensify/youssef_allow_all_filetypes_upload

Allow all filetypes to be uploaded

(cherry picked from commit d34ed346b1854ba311c7181d26e29310b2a9e648)
---
 src/CONST.js                      | 57 ++++++++++++++++++++++++++++++-
 src/components/AttachmentModal.js |  4 +--
 src/languages/en.js               |  2 +-
 src/languages/es.js               |  2 +-
 4 files changed, 60 insertions(+), 5 deletions(-)

diff --git a/src/CONST.js b/src/CONST.js
index e1335306d47a..379d3537dc3a 100755
--- a/src/CONST.js
+++ b/src/CONST.js
@@ -35,7 +35,62 @@ const CONST = {
 
     API_ATTACHMENT_VALIDATIONS: {
         // Same as the PHP layer allows
-        ALLOWED_EXTENSIONS: ['webp', 'jpg', 'jpeg', 'png', 'gif', 'pdf', 'html', 'txt', 'rtf', 'doc', 'docx', 'htm', 'tiff', 'tif', 'xml', 'mp3', 'mp4', 'mov'],
+        /* eslint-disable-next-line max-len */
+        UNALLOWED_EXTENSIONS: [
+            'ade',
+            'adp',
+            'apk',
+            'appx',
+            'appxbundle',
+            'bat',
+            'cab',
+            'chm',
+            'cmd',
+            'com',
+            'cpl',
+            'diagcab',
+            'diagcfg',
+            'diagpack',
+            'dll',
+            'dmg',
+            'ex',
+            'ex_',
+            'exe',
+            'hta',
+            'img',
+            'ins',
+            'iso',
+            'isp',
+            'jar',
+            'jnlp',
+            'js',
+            'jse',
+            'lib',
+            'lnk',
+            'mde',
+            'msc',
+            'msi',
+            'msix',
+            'msixbundle',
+            'msp',
+            'mst',
+            'nsh',
+            'pif',
+            'ps1',
+            'scr',
+            'sct',
+            'shb',
+            'sys',
+            'vb',
+            'vbe',
+            'vbs',
+            'vhd',
+            'vxd',
+            'wsc',
+            'wsf',
+            'wsh',
+            'xll',
+        ],
 
         // 24 megabytes in bytes, this is limit set on servers, do not update without wider internal discussion
         MAX_SIZE: 25165824,
diff --git a/src/components/AttachmentModal.js b/src/components/AttachmentModal.js
index ed40878285a3..ea5f5baa1558 100755
--- a/src/components/AttachmentModal.js
+++ b/src/components/AttachmentModal.js
@@ -167,8 +167,8 @@ class AttachmentModal extends PureComponent {
      */
     isValidFile(file) {
         const {fileExtension} = FileUtils.splitExtensionFromFileName(lodashGet(file, 'name', ''));
-        if (!_.contains(CONST.API_ATTACHMENT_VALIDATIONS.ALLOWED_EXTENSIONS, fileExtension.toLowerCase())) {
-            const invalidReason = `${this.props.translate('attachmentPicker.notAllowedExtension')} ${CONST.API_ATTACHMENT_VALIDATIONS.ALLOWED_EXTENSIONS.join(', ')}`;
+        if (_.contains(CONST.API_ATTACHMENT_VALIDATIONS.UNALLOWED_EXTENSIONS, fileExtension.toLowerCase())) {
+            const invalidReason = this.props.translate('attachmentPicker.notAllowedExtension');
             this.setState({
                 isAttachmentInvalid: true,
                 attachmentInvalidReasonTitle: this.props.translate('attachmentPicker.wrongFileType'),
diff --git a/src/languages/en.js b/src/languages/en.js
index f9d9eaf23826..55b63f497a26 100755
--- a/src/languages/en.js
+++ b/src/languages/en.js
@@ -151,7 +151,7 @@ export default {
         attachmentTooSmall: 'Attachment too small',
         sizeNotMet: 'Attachment size must be greater than 240 bytes.',
         wrongFileType: 'Attachment is the wrong type',
-        notAllowedExtension: 'Attachments must be one of the following types:',
+        notAllowedExtension: 'This filetype is not allowed',
     },
     avatarCropModal: {
         title: 'Edit photo',
diff --git a/src/languages/es.js b/src/languages/es.js
index 23114b5bc428..28bc0cf33c53 100644
--- a/src/languages/es.js
+++ b/src/languages/es.js
@@ -150,7 +150,7 @@ export default {
         attachmentTooSmall: 'Archivo adjunto demasiado pequeño',
         sizeNotMet: 'El archivo adjunto debe ser mas grande que 240 bytes.',
         wrongFileType: 'El tipo del archivo adjunto es incorrecto',
-        notAllowedExtension: 'Los archivos adjuntos deben ser de uno de los siguientes tipos:',
+        notAllowedExtension: 'Este tipo de archivo no está permitido',
     },
     avatarCropModal: {
         title: 'Editar foto',
