15881: Add LDAP authentication option.
[arvados.git] / lib / controller / localdb / login_pam.go
index 01dfc1379d3064b06ad7a3e7760d60250cc00a52..538e3118edc839e0be355a6965de6da086b9ce9d 100644 (file)
@@ -9,12 +9,10 @@ import (
        "errors"
        "fmt"
        "net/http"
-       "net/url"
        "strings"
 
        "git.arvados.org/arvados.git/lib/controller/rpc"
        "git.arvados.org/arvados.git/sdk/go/arvados"
-       "git.arvados.org/arvados.git/sdk/go/auth"
        "git.arvados.org/arvados.git/sdk/go/ctxlog"
        "git.arvados.org/arvados.git/sdk/go/httpserver"
        "github.com/msteinert/pam"
@@ -85,25 +83,12 @@ func (ctrl *pamLoginController) UserAuthenticate(ctx context.Context, opts arvad
        if domain := ctrl.Cluster.Login.PAMDefaultEmailDomain; domain != "" && !strings.Contains(email, "@") {
                email = email + "@" + domain
        }
-       ctxlog.FromContext(ctx).WithFields(logrus.Fields{"user": user, "email": email}).Debug("pam authentication succeeded")
-       ctxRoot := auth.NewContext(ctx, &auth.Credentials{Tokens: []string{ctrl.Cluster.SystemRootToken}})
-       resp, err := ctrl.RailsProxy.UserSessionCreate(ctxRoot, rpc.UserSessionCreateOptions{
-               // Send a fake ReturnTo value instead of the caller's
-               // opts.ReturnTo. We won't follow the resulting
-               // redirect target anyway.
-               ReturnTo: ",https://none.invalid",
-               AuthInfo: rpc.UserSessionAuthInfo{
-                       Username: user,
-                       Email:    email,
-               },
+       ctxlog.FromContext(ctx).WithFields(logrus.Fields{
+               "user":  user,
+               "email": email,
+       }).Debug("pam authentication succeeded")
+       return createAPIClientAuthorization(ctx, ctrl.RailsProxy, ctrl.Cluster.SystemRootToken, rpc.UserSessionAuthInfo{
+               Username: user,
+               Email:    email,
        })
-       if err != nil {
-               return arvados.APIClientAuthorization{}, err
-       }
-       target, err := url.Parse(resp.RedirectLocation)
-       if err != nil {
-               return arvados.APIClientAuthorization{}, err
-       }
-       token := target.Query().Get("api_token")
-       return ctrl.RailsProxy.APIClientAuthorizationCurrent(auth.NewContext(ctx, auth.NewCredentials(token)), arvados.GetOptions{})
 }