Merge branch '17995-filter-by-comparing-attrs'
[arvados.git] / lib / controller / federation / conn.go
index b2e928b82ed2761cacd173af9b2a936b7fd939a6..586ac23013a531dbcacdab9c705f307886abc158 100644 (file)
@@ -421,8 +421,19 @@ func (conn *Conn) GroupList(ctx context.Context, options arvados.ListOptions) (a
        return conn.generated_GroupList(ctx, options)
 }
 
+var userUuidRe = regexp.MustCompile(`^[0-9a-z]{5}-tpzed-[0-9a-z]{15}$`)
+
 func (conn *Conn) GroupContents(ctx context.Context, options arvados.GroupContentsOptions) (arvados.ObjectList, error) {
-       return conn.chooseBackend(options.UUID).GroupContents(ctx, options)
+       if options.ClusterID != "" {
+               // explicitly selected cluster
+               return conn.chooseBackend(options.ClusterID).GroupContents(ctx, options)
+       } else if userUuidRe.MatchString(options.UUID) {
+               // user, get the things they own on the local cluster
+               return conn.local.GroupContents(ctx, options)
+       } else {
+               // a group, potentially want to make federated request
+               return conn.chooseBackend(options.UUID).GroupContents(ctx, options)
+       }
 }
 
 func (conn *Conn) GroupShared(ctx context.Context, options arvados.ListOptions) (arvados.GroupList, error) {
@@ -433,6 +444,10 @@ func (conn *Conn) GroupDelete(ctx context.Context, options arvados.DeleteOptions
        return conn.chooseBackend(options.UUID).GroupDelete(ctx, options)
 }
 
+func (conn *Conn) GroupTrash(ctx context.Context, options arvados.DeleteOptions) (arvados.Group, error) {
+       return conn.chooseBackend(options.UUID).GroupTrash(ctx, options)
+}
+
 func (conn *Conn) GroupUntrash(ctx context.Context, options arvados.UntrashOptions) (arvados.Group, error) {
        return conn.chooseBackend(options.UUID).GroupUntrash(ctx, options)
 }
@@ -578,10 +593,6 @@ func (conn *Conn) UserUpdate(ctx context.Context, options arvados.UpdateOptions)
        return resp, err
 }
 
-func (conn *Conn) UserUpdateUUID(ctx context.Context, options arvados.UpdateUUIDOptions) (arvados.User, error) {
-       return conn.local.UserUpdateUUID(ctx, options)
-}
-
 func (conn *Conn) UserMerge(ctx context.Context, options arvados.UserMergeOptions) (arvados.User, error) {
        return conn.local.UserMerge(ctx, options)
 }