diff --git a/src/services/assetService.ts b/src/services/assetService.ts index 2ab0ffabd0..1e346d2649 100644 --- a/src/services/assetService.ts +++ b/src/services/assetService.ts @@ -176,6 +176,27 @@ export class AssetService { return metadata; } + /** + * Validate export file name + * @param asset - asset to process + */ + public validateFileName(asset: IAsset) { + try { + let validFileName = asset.name.replace(/[*\\\/:?<>|&]/g, (c) => "%" + c.charCodeAt(0).toString(16)); + + if (!validFileName.endsWith(asset.format)) { + validFileName = validFileName + "." + asset.format; + } + + if (validFileName !== asset.name) { + // console.log(`convert invalid file name '${asset.name}' to '${validFileName}'`); + asset.name = validFileName; + } + } catch (err) { + console.log(err); + } + } + /** * Get metadata for asset * @param asset - Asset for which to retrieve metadata @@ -184,9 +205,14 @@ export class AssetService { Guard.null(asset); const fileName = `${asset.id}${constants.assetMetadataFileExtension}`; + + this.validateFileName(asset); + try { const json = await this.storageProvider.readText(fileName); - return JSON.parse(json) as IAssetMetadata; + const iAssetMetadata = JSON.parse(json) as IAssetMetadata; + this.validateFileName(iAssetMetadata.asset); + return iAssetMetadata; } catch (err) { if (asset.type === AssetType.TFRecord) { return {