16811: Fix public favorites.
[arvados-workbench2.git] / src / services / favorite-service / favorite-service.ts
index c41b2b992e10aafd33f07353f17087834ecf8a68..37c1380b6a6856eea91f43b17784e976601782d4 100644 (file)
@@ -20,25 +20,43 @@ export class FavoriteService {
     constructor(
         private linkService: LinkService,
         private groupsService: GroupsService,
-    ) {}
+    ) { }
 
     create(data: { userUuid: string; resource: { uuid: string; name: string } }) {
-        return this.linkService.create({
-            ownerUuid: data.userUuid,
+        const l = this.linkService.create({
+            // If this is for the all users group, it must be owned by
+            // the system user.
+            ownerUuid: (data.userUuid.substr(-22) === "-j7d0g-fffffffffffffff" ?
+                data.userUuid.substr(0, 5) + "-tpzed-000000000000000"
+                : data.userUuid),
             tailUuid: data.userUuid,
             headUuid: data.resource.uuid,
             linkClass: LinkClass.STAR,
             name: data.resource.name
         });
+
+        if (data.userUuid.substr(-22) === "-j7d0g-fffffffffffffff") {
+            // If this is for the all users group, we need to create a
+            // permission link as well.
+            l.then(result =>
+                this.linkService.create({
+                    tailUuid: data.userUuid,
+                    headUuid: result.uuid,
+                    linkClass: LinkClass.PERMISSION,
+                    name: "can_read"
+                }));
+        }
+
+        return l;
     }
 
     delete(data: { userUuid: string; resourceUuid: string; }) {
         return this.linkService
             .list({
                 filters: new FilterBuilder()
-                    .addEqual('tailUuid', data.userUuid)
-                    .addEqual('headUuid', data.resourceUuid)
-                    .addEqual('linkClass', LinkClass.STAR)
+                    .addEqual('tail_uuid', data.userUuid)
+                    .addEqual('head_uuid', data.resourceUuid)
+                    .addEqual('link_class', LinkClass.STAR)
                     .getFilters()
             })
             .then(results => Promise.all(
@@ -47,13 +65,13 @@ export class FavoriteService {
 
     list(userUuid: string, { filters, limit, offset, linkOrder, contentOrder }: FavoriteListArguments = {}): Promise<ListResults<GroupContentsResource>> {
         const listFilters = new FilterBuilder()
-            .addEqual('tailUuid', userUuid)
-            .addEqual('linkClass', LinkClass.STAR)
+            .addEqual('owner_uuid', userUuid)
+            .addEqual('link_class', LinkClass.STAR)
             .getFilters();
 
         return this.linkService
             .list({
-                filters: joinFilters(filters, listFilters),
+                filters: joinFilters(filters || '', listFilters),
                 limit,
                 offset,
                 order: linkOrder
@@ -74,9 +92,9 @@ export class FavoriteService {
         return this.linkService
             .list({
                 filters: new FilterBuilder()
-                    .addIn("headUuid", resourceUuids)
-                    .addEqual("tailUuid", userUuid)
-                    .addEqual("linkClass", LinkClass.STAR)
+                    .addIn("head_uuid", resourceUuids)
+                    .addEqual("tail_uuid", userUuid)
+                    .addEqual("link_class", LinkClass.STAR)
                     .getFilters()
             })
             .then(({ items }) => resourceUuids.reduce((results, uuid) => {