diff --git a/src/components/c2d/compute_engine_docker.ts b/src/components/c2d/compute_engine_docker.ts index 704730a7b..0edb22b1f 100644 --- a/src/components/c2d/compute_engine_docker.ts +++ b/src/components/c2d/compute_engine_docker.ts @@ -1572,6 +1572,22 @@ export class C2DEngineDocker extends C2DEngine { } } + private addUserDataToFilesObject( + filesObject: any, + userData: { [key: string]: any } + ): any { + if (filesObject?.url && userData) { + const url = new URL(filesObject.url) + const userDataObj = typeof userData === 'string' ? JSON.parse(userData) : userData + for (const [key, value] of Object.entries(userDataObj)) { + url.searchParams.append(key, String(value)) + } + filesObject.url = url.toString() + CORE_LOGGER.info('Appended userData to file url: ' + filesObject.url) + } + return filesObject + } + private async uploadData( job: DBComputeJob ): Promise<{ status: C2DStatusNumber; statusText: C2DStatusText }> { @@ -1736,7 +1752,8 @@ export class C2DEngineDocker extends C2DEngine { } else { CORE_LOGGER.info('asset file object seems to be encrypted, checking it...') // get the encrypted bytes - const filesObject: any = await decryptFilesObject(asset.fileObject) + let filesObject: any = await decryptFilesObject(asset.fileObject) + filesObject = await this.addUserDataToFilesObject(filesObject, asset.userdata) storage = Storage.getStorageClass(filesObject, config) } @@ -1771,7 +1788,12 @@ export class C2DEngineDocker extends C2DEngine { // 2. Get the service const service: Service = AssetUtils.getServiceById(ddo, serviceId) // 3. Decrypt the url - const decryptedFileObject = await decryptFilesObject(service.files) + let decryptedFileObject = await decryptFilesObject(service.files) + decryptedFileObject = await this.addUserDataToFilesObject( + decryptedFileObject, + asset.userdata + ) + storage = Storage.getStorageClass(decryptedFileObject, config) fileInfo = await storage.getFileInfo({ type: storage.getStorageType(decryptedFileObject)