@@ -98,8 +98,7 @@ export async function deactivateUser(userId: string): Promise<boolean> {
9898export async function createUserToken (
9999 name : string ,
100100 scope : v2Permission | undefined ,
101- expiry : string | undefined ) : Promise < v2CreateAPITokenResponse | undefined >
102- {
101+ expiry : string | undefined ) : Promise < v2CreateAPITokenResponse | undefined > {
103102 // Create request and send
104103 const request = {
105104 name : name ,
@@ -205,8 +204,7 @@ export async function createObject(
205204 parentType : v2ResourceVariant ,
206205 parentId : string ,
207206 metaLicense : string ,
208- dataLicense : string ) : Promise < v2Object | undefined >
209- {
207+ dataLicense : string ) : Promise < v2Object | undefined > {
210208 // Create request and send
211209 const request = {
212210 name : name ,
@@ -261,13 +259,17 @@ export async function getResourceHierarchy(resourceId: string) {
261259}
262260
263261export async function getPublicResourceUrl ( endpointHost : string , resource : ObjectInfo ) : Promise < string > {
264- // Return obvious case
265- if ( resource . variant === v2ResourceVariant . RESOURCE_VARIANT_PROJECT ) {
266- return `https://${ resource . name } `
262+ // Hierarchy objects are downloaded through the special Objects bucket
263+ if ( resource . variant !== v2ResourceVariant . RESOURCE_VARIANT_OBJECT ) {
264+ return `https://objects. ${ endpointHost } / ${ resource . id } / ${ resource . name } .tar.gz `
267265 }
268266
269- // The damn rest
270- let key = resource . name
267+ // Else traverse hierarchy up
268+ let project = undefined
269+ let collection = undefined
270+ let dataset = undefined
271+ let object = resource . name
272+
271273 while ( resource . variant !== v2ResourceVariant . RESOURCE_VARIANT_PROJECT ) {
272274 const parentRel = resource . relations . find ( rel =>
273275 rel . internal ?. direction === v2RelationDirection . RELATION_DIRECTION_INBOUND &&
@@ -278,8 +280,19 @@ export async function getPublicResourceUrl(endpointHost: string, resource: Objec
278280 const parentObj = await fetchResource ( parentRel . internal . resourceId )
279281 const objectInfo = toObjectInfo ( parentObj . resource , parentObj . permission )
280282 if ( objectInfo ) {
281- if ( objectInfo . variant !== v2ResourceVariant . RESOURCE_VARIANT_PROJECT ) {
282- key += `/${ objectInfo . name } `
283+ switch ( objectInfo . variant ) {
284+ case v2ResourceVariant . RESOURCE_VARIANT_PROJECT : {
285+ project = resource . name
286+ break
287+ }
288+ case v2ResourceVariant . RESOURCE_VARIANT_COLLECTION : {
289+ collection = resource . name
290+ break
291+ }
292+ case v2ResourceVariant . RESOURCE_VARIANT_DATASET : {
293+ dataset = resource . name
294+ break
295+ }
283296 }
284297 resource = objectInfo
285298 } else {
@@ -290,5 +303,11 @@ export async function getPublicResourceUrl(endpointHost: string, resource: Objec
290303 }
291304 }
292305
293- return `http://${ resource . name } .${ endpointHost } /${ key } `
306+ // Build url from its parts
307+ let url = `https://${ project } .${ endpointHost } `
308+ url += collection ? `/${ collection } ` : ''
309+ url += dataset ? `/${ dataset } ` : ''
310+ url += `/${ object } `
311+
312+ return url
294313}
0 commit comments