1 // Copyright (C) The Arvados Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
11 "git.arvados.org/arvados.git/lib/controller/railsproxy"
12 "git.arvados.org/arvados.git/lib/controller/rpc"
13 "git.arvados.org/arvados.git/sdk/go/arvados"
16 type railsProxy = rpc.Conn
19 cluster *arvados.Cluster
20 *railsProxy // handles API methods that aren't defined on Conn itself
25 func NewConn(cluster *arvados.Cluster) *Conn {
28 railsProxy: railsproxy.NewConn(cluster),
32 func (conn *Conn) Logout(ctx context.Context, opts arvados.LogoutOptions) (arvados.LogoutResponse, error) {
33 if conn.cluster.Login.ProviderAppID != "" {
34 // Proxy to RailsAPI, which hands off to sso-provider.
35 return conn.railsProxy.Logout(ctx, opts)
37 return conn.googleLoginController.Logout(ctx, conn.cluster, conn.railsProxy, opts)
41 func (conn *Conn) Login(ctx context.Context, opts arvados.LoginOptions) (arvados.LoginResponse, error) {
42 wantGoogle := conn.cluster.Login.GoogleClientID != ""
43 wantSSO := conn.cluster.Login.ProviderAppID != ""
44 if wantGoogle == wantSSO {
45 return arvados.LoginResponse{}, errors.New("configuration problem: exactly one of Login.GoogleClientID and Login.ProviderAppID must be configured")
46 } else if wantGoogle {
47 return conn.googleLoginController.Login(ctx, conn.cluster, conn.railsProxy, opts)
49 // Proxy to RailsAPI, which hands off to sso-provider.
50 return conn.railsProxy.Login(ctx, opts)