16535: Merge branch 'master'
[arvados.git] / lib / controller / localdb / conn.go
index 835ab435059fba3fc1323ae714b84ba85a9c1b58..4f0035edf993ad525c4d82b8d5e880049432c6c2 100644 (file)
@@ -6,11 +6,10 @@ package localdb
 
 import (
        "context"
-       "errors"
 
-       "git.curoverse.com/arvados.git/lib/controller/railsproxy"
-       "git.curoverse.com/arvados.git/lib/controller/rpc"
-       "git.curoverse.com/arvados.git/sdk/go/arvados"
+       "git.arvados.org/arvados.git/lib/controller/railsproxy"
+       "git.arvados.org/arvados.git/lib/controller/rpc"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
 )
 
 type railsProxy = rpc.Conn
@@ -18,26 +17,28 @@ type railsProxy = rpc.Conn
 type Conn struct {
        cluster     *arvados.Cluster
        *railsProxy // handles API methods that aren't defined on Conn itself
-
-       googleLoginController
+       loginController
 }
 
 func NewConn(cluster *arvados.Cluster) *Conn {
-       return &Conn{
-               cluster:    cluster,
-               railsProxy: railsproxy.NewConn(cluster),
+       railsProxy := railsproxy.NewConn(cluster)
+       var conn Conn
+       conn = Conn{
+               cluster:         cluster,
+               railsProxy:      railsProxy,
+               loginController: chooseLoginController(cluster, railsProxy),
        }
+       return &conn
+}
+
+func (conn *Conn) Logout(ctx context.Context, opts arvados.LogoutOptions) (arvados.LogoutResponse, error) {
+       return conn.loginController.Logout(ctx, opts)
 }
 
 func (conn *Conn) Login(ctx context.Context, opts arvados.LoginOptions) (arvados.LoginResponse, error) {
-       wantGoogle := conn.cluster.Login.GoogleClientID != ""
-       wantSSO := conn.cluster.Login.ProviderAppID != ""
-       if wantGoogle == wantSSO {
-               return arvados.LoginResponse{}, errors.New("configuration problem: exactly one of Login.GoogleClientID and Login.ProviderAppID must be configured")
-       } else if wantGoogle {
-               return conn.googleLoginController.Login(ctx, conn.cluster, conn.railsProxy, opts)
-       } else {
-               // Proxy to RailsAPI, which hands off to sso-provider.
-               return conn.railsProxy.Login(ctx, opts)
-       }
+       return conn.loginController.Login(ctx, opts)
+}
+
+func (conn *Conn) UserAuthenticate(ctx context.Context, opts arvados.UserAuthenticateOptions) (arvados.APIClientAuthorization, error) {
+       return conn.loginController.UserAuthenticate(ctx, opts)
 }