From db9176097ece6a8e7c6bfb684d9367b13da33234 Mon Sep 17 00:00:00 2001 From: Elizabeth Halper Date: Fri, 1 Feb 2019 15:37:40 -0800 Subject: [PATCH] Elhalper/encoded filename (#518) * encodeurlcomponent not working * encoded files are loaded and getting rid of comments * moving logic to asset service * add encoded name test * remove unused code * remove comments * remove console statements * proper test and regex * fix lintint errors --- package-lock.json | 30 +++++++++++++++--------------- src/services/assetService.test.ts | 23 ++++++++++++++++++++++- src/services/assetService.ts | 2 ++ 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 23fab634..77355ccb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1477,7 +1477,7 @@ "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA=" + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==" }, "ansi-html": { "version": "0.0.7", @@ -3251,7 +3251,7 @@ }, "camelcase-keys": { "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { @@ -8362,7 +8362,7 @@ }, "http-errors": { "version": "1.6.3", - "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { "depd": "~1.1.2", @@ -8964,7 +8964,7 @@ }, "is-builtin-module": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "requires": { "builtin-modules": "^1.0.0" @@ -10412,7 +10412,7 @@ }, "load-json-file": { "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "requires": { "graceful-fs": "^4.1.2", @@ -10834,7 +10834,7 @@ }, "meow": { "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { @@ -11429,7 +11429,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { @@ -11470,7 +11470,7 @@ "dependencies": { "colors": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/colors/-/colors-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz", "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q=", "dev": true } @@ -11826,7 +11826,7 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { @@ -12029,7 +12029,7 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { @@ -12090,7 +12090,7 @@ }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { @@ -12554,7 +12554,7 @@ "dependencies": { "async": { "version": "1.5.2", - "resolved": "http://registry.npmjs.org/async/-/async-1.5.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=" }, "debug": { @@ -15733,7 +15733,7 @@ "dependencies": { "jsesc": { "version": "0.5.0", - "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" } } @@ -15862,7 +15862,7 @@ }, "require-uncached": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "requires": { "caller-path": "^0.1.0", @@ -17367,7 +17367,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "requires": { "ansi-regex": "^2.0.0" diff --git a/src/services/assetService.test.ts b/src/services/assetService.test.ts index f301a2fc..bd3e323a 100644 --- a/src/services/assetService.test.ts +++ b/src/services/assetService.test.ts @@ -19,6 +19,18 @@ describe("Asset Service", () => { expect(asset.format).toEqual("jpg"); }); + it("creates an asset from an encoded file", () => { + const path = "C:\\dir1\\dir2\\asset%201.jpg"; + const asset = AssetService.createAssetFromFilePath(path); + + expect(asset).not.toBeNull(); + expect(asset.id).toEqual(expect.any(String)); + expect(asset.name).toEqual("asset%201.jpg"); + expect(asset.type).toEqual(AssetType.Image); + expect(asset.path).toEqual(path); + expect(asset.format).toEqual("jpg"); + }); + it("creates an asset from a http source", () => { const path = "http://my.server.com/asset1.jpg"; const asset = AssetService.createAssetFromFilePath(path); @@ -120,6 +132,15 @@ describe("Asset Service", () => { ); expect(result).toBe(assetMetadata); }); + + it("getAssets encodes local file path", async () => { + const testAsset = MockFactory.createTestAsset(" 11"); + testAssets.push(testAsset); + + const result = await assetService.getAssets(); + + expect(result[10].path).toEqual("file:C:/Desktop/asset%2011.jpg"); + }); }); describe("Assets Protocol Tests", () => { @@ -157,7 +178,7 @@ describe("Asset Service", () => { const assets = await assetService.getAssets(); expect(assets.length).toEqual(2); - expect(assets[0].path).toEqual("file:C:\\Desktop\\asset0.jpg"); + expect(assets[0].path).toEqual("file:C:/Desktop/asset0.jpg"); expect(assets[1].path).toEqual("https://image.com/asset1.jpg"); }); diff --git a/src/services/assetService.ts b/src/services/assetService.ts index a4a20f96..17ac3452 100644 --- a/src/services/assetService.ts +++ b/src/services/assetService.ts @@ -1,5 +1,6 @@ import MD5 from "md5.js"; import Guard from "../common/guard"; +import path from "path"; import { IAsset, AssetType, IProject, IAssetMetadata, AssetState } from "../models/applicationState"; import { AssetProviderFactory, IAssetProvider } from "../providers/storage/assetProviderFactory"; import { StorageProviderFactory, IStorageProvider } from "../providers/storage/storageProviderFactory"; @@ -107,6 +108,7 @@ export class AssetService { return assets.map((asset) => { if (!asset.path.toLowerCase().startsWith("http://") && !asset.path.toLowerCase().startsWith("https://")) { asset.path = "file:" + asset.path; + asset.path = encodeURI(asset.path.replace(/\\/g, "/")); } return asset;