Merge branch '17995-filter-by-comparing-attrs'
[arvados.git] / lib / controller / federation / conn.go
index a9352098d3ae9aa8b7fec8f2765a6af39409d8bb..586ac23013a531dbcacdab9c705f307886abc158 100644 (file)
@@ -69,6 +69,9 @@ func saltedTokenProvider(local backend, remoteID string) rpc.TokenProvider {
                                tokens = append(tokens, salted)
                        case auth.ErrSalted:
                                tokens = append(tokens, token)
+                       case auth.ErrTokenFormat:
+                               // pass through unmodified (assume it's an OIDC access token)
+                               tokens = append(tokens, token)
                        case auth.ErrObsoleteToken:
                                ctx := auth.NewContext(ctx, &auth.Credentials{Tokens: []string{token}})
                                aca, err := local.APIClientAuthorizationCurrent(ctx, arvados.GetOptions{})
@@ -418,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) {
@@ -430,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)
 }
@@ -575,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)
 }