Merge branch '15964-fix-docs' refs #15964
[arvados.git] / lib / controller / localdb / login_testuser.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package localdb
6
7 import (
8         "context"
9         "errors"
10         "fmt"
11
12         "git.arvados.org/arvados.git/lib/controller/rpc"
13         "git.arvados.org/arvados.git/sdk/go/arvados"
14         "git.arvados.org/arvados.git/sdk/go/ctxlog"
15         "github.com/sirupsen/logrus"
16 )
17
18 type testLoginController struct {
19         Cluster    *arvados.Cluster
20         RailsProxy *railsProxy
21 }
22
23 func (ctrl *testLoginController) Logout(ctx context.Context, opts arvados.LogoutOptions) (arvados.LogoutResponse, error) {
24         return noopLogout(ctrl.Cluster, opts)
25 }
26
27 func (ctrl *testLoginController) Login(ctx context.Context, opts arvados.LoginOptions) (arvados.LoginResponse, error) {
28         return arvados.LoginResponse{}, errors.New("interactive login is not available")
29 }
30
31 func (ctrl *testLoginController) UserAuthenticate(ctx context.Context, opts arvados.UserAuthenticateOptions) (arvados.APIClientAuthorization, error) {
32         for username, user := range ctrl.Cluster.Login.Test.Users {
33                 if (opts.Username == username || opts.Username == user.Email) && opts.Password == user.Password {
34                         ctxlog.FromContext(ctx).WithFields(logrus.Fields{
35                                 "username": username,
36                                 "email":    user.Email,
37                         }).Debug("test authentication succeeded")
38                         return createAPIClientAuthorization(ctx, ctrl.RailsProxy, ctrl.Cluster.SystemRootToken, rpc.UserSessionAuthInfo{
39                                 Username: username,
40                                 Email:    user.Email,
41                         })
42                 }
43         }
44         return arvados.APIClientAuthorization{}, fmt.Errorf("authentication failed for user %q with password len=%d", opts.Username, len(opts.Password))
45 }