Skip to content

Commit 58ace5b

Browse files
committed
refactor: URL creation for public resources
1 parent 39ac986 commit 58ace5b

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

composables/api_wrapper.ts

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,7 @@ export async function deactivateUser(userId: string): Promise<boolean> {
9898
export 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

263261
export 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

Comments
 (0)