github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/service/login.go (about)

     1  // Copyright 2015 Keybase, Inc. All rights reserved. Use of
     2  // this source code is governed by the included BSD license.
     3  
     4  package service
     5  
     6  import (
     7  	"github.com/keybase/client/go/engine"
     8  	"github.com/keybase/client/go/libkb"
     9  	keybase1 "github.com/keybase/client/go/protocol/keybase1"
    10  	"github.com/keybase/go-framed-msgpack-rpc/rpc"
    11  	"golang.org/x/net/context"
    12  )
    13  
    14  type LoginHandler struct {
    15  	libkb.Contextified
    16  	*BaseHandler
    17  }
    18  
    19  func NewLoginHandler(xp rpc.Transporter, g *libkb.GlobalContext) *LoginHandler {
    20  	return &LoginHandler{
    21  		BaseHandler:  NewBaseHandler(g, xp),
    22  		Contextified: libkb.NewContextified(g),
    23  	}
    24  }
    25  
    26  func (h *LoginHandler) GetConfiguredAccounts(context context.Context, sessionID int) ([]keybase1.ConfiguredAccount, error) {
    27  	return h.G().GetConfiguredAccounts(context)
    28  }
    29  
    30  func (h *LoginHandler) Logout(ctx context.Context, arg keybase1.LogoutArg) (err error) {
    31  	defer h.G().CTrace(ctx, "Logout [service RPC]", &err)()
    32  	mctx := libkb.NewMetaContext(ctx, h.G()).WithLogTag("LOGOUT")
    33  	eng := engine.NewLogout(libkb.LogoutOptions{Force: arg.Force,
    34  		KeepSecrets: arg.KeepSecrets})
    35  	return engine.RunEngine2(mctx, eng)
    36  }
    37  
    38  func (h *LoginHandler) Deprovision(ctx context.Context, arg keybase1.DeprovisionArg) error {
    39  	eng := engine.NewDeprovisionEngine(h.G(), arg.Username, arg.DoRevoke, libkb.LogoutOptions{KeepSecrets: false, Force: true})
    40  	uis := libkb.UIs{
    41  		LogUI:     h.getLogUI(arg.SessionID),
    42  		SecretUI:  h.getSecretUI(arg.SessionID, h.G()),
    43  		SessionID: arg.SessionID,
    44  	}
    45  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
    46  	return engine.RunEngine2(m, eng)
    47  }
    48  
    49  func (h *LoginHandler) RecoverAccountFromEmailAddress(ctx context.Context, email string) error {
    50  	mctx := libkb.NewMetaContext(ctx, h.G())
    51  	res, err := mctx.G().API.Post(mctx, libkb.APIArg{
    52  		Endpoint:    "send-reset-pw",
    53  		SessionType: libkb.APISessionTypeNONE,
    54  		Args: libkb.HTTPArgs{
    55  			"email_or_username": libkb.S{Val: email},
    56  		},
    57  		AppStatusCodes: []int{libkb.SCOk, libkb.SCBadLoginUserNotFound},
    58  	})
    59  	if err != nil {
    60  		return err
    61  	}
    62  	if res.AppStatus.Code == libkb.SCBadLoginUserNotFound {
    63  		return libkb.NotFoundError{}
    64  	}
    65  	return nil
    66  }
    67  
    68  func (h *LoginHandler) PaperKey(ctx context.Context, sessionID int) error {
    69  	uis := libkb.UIs{
    70  		LogUI:     h.getLogUI(sessionID),
    71  		LoginUI:   h.getLoginUI(sessionID),
    72  		SecretUI:  h.getSecretUI(sessionID, h.G()),
    73  		SessionID: sessionID,
    74  	}
    75  	eng := engine.NewPaperKey(h.G())
    76  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
    77  	return engine.RunEngine2(m, eng)
    78  }
    79  
    80  func (h *LoginHandler) PaperKeySubmit(ctx context.Context, arg keybase1.PaperKeySubmitArg) error {
    81  	uis := libkb.UIs{
    82  		LogUI:     h.getLogUI(arg.SessionID),
    83  		SessionID: arg.SessionID,
    84  	}
    85  	eng := engine.NewPaperKeySubmit(h.G(), arg.PaperPhrase)
    86  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
    87  	return engine.RunEngine2(m, eng)
    88  }
    89  
    90  func (h *LoginHandler) Unlock(ctx context.Context, sessionID int) error {
    91  	uis := libkb.UIs{
    92  		LogUI:     h.getLogUI(sessionID),
    93  		SecretUI:  h.getSecretUI(sessionID, h.G()),
    94  		SessionID: sessionID,
    95  	}
    96  	eng := engine.NewUnlock(h.G())
    97  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
    98  	return engine.RunEngine2(m, eng)
    99  }
   100  
   101  func (h *LoginHandler) UnlockWithPassphrase(ctx context.Context, arg keybase1.UnlockWithPassphraseArg) error {
   102  	uis := libkb.UIs{
   103  		LogUI:     h.getLogUI(arg.SessionID),
   104  		SecretUI:  h.getSecretUI(arg.SessionID, h.G()),
   105  		SessionID: arg.SessionID,
   106  	}
   107  	eng := engine.NewUnlockWithPassphrase(h.G(), arg.Passphrase)
   108  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   109  	return engine.RunEngine2(m, eng)
   110  }
   111  
   112  func (h *LoginHandler) Login(ctx context.Context, arg keybase1.LoginArg) error {
   113  	uis := libkb.UIs{
   114  		LogUI:       h.getLogUI(arg.SessionID),
   115  		LoginUI:     h.getLoginUI(arg.SessionID),
   116  		ProvisionUI: h.getProvisionUI(arg.SessionID),
   117  		SecretUI:    h.getSecretUI(arg.SessionID, h.G()),
   118  		GPGUI:       h.getGPGUI(arg.SessionID),
   119  		SessionID:   arg.SessionID,
   120  	}
   121  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   122  	eng := engine.NewLoginWithUserSwitch(h.G(), arg.DeviceType, arg.Username, arg.ClientType, arg.DoUserSwitch)
   123  	eng.PaperKey = arg.PaperKey
   124  	eng.DeviceName = arg.DeviceName
   125  	return engine.RunEngine2(m, eng)
   126  }
   127  
   128  func (h *LoginHandler) LoginProvisionedDevice(ctx context.Context, arg keybase1.LoginProvisionedDeviceArg) error {
   129  	eng := engine.NewLoginProvisionedDevice(h.G(), arg.Username)
   130  
   131  	uis := libkb.UIs{
   132  		LogUI:     h.getLogUI(arg.SessionID),
   133  		SessionID: arg.SessionID,
   134  	}
   135  
   136  	if arg.NoPassphrasePrompt {
   137  		eng.SecretStoreOnly = true
   138  	} else {
   139  		uis.LoginUI = h.getLoginUI(arg.SessionID)
   140  		uis.SecretUI = h.getSecretUI(arg.SessionID, h.G())
   141  	}
   142  
   143  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   144  	return engine.RunEngine2(m, eng)
   145  }
   146  
   147  func (h *LoginHandler) LoginWithPaperKey(ctx context.Context, arg keybase1.LoginWithPaperKeyArg) error {
   148  	uis := libkb.UIs{
   149  		LogUI:     h.getLogUI(arg.SessionID),
   150  		SecretUI:  h.getSecretUI(arg.SessionID, h.G()),
   151  		SessionID: arg.SessionID,
   152  	}
   153  	eng := engine.NewLoginWithPaperKey(h.G(), arg.Username)
   154  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   155  	err := engine.RunEngine2(m, eng)
   156  	return err
   157  }
   158  
   159  func (h *LoginHandler) AccountDelete(ctx context.Context, arg keybase1.AccountDeleteArg) error {
   160  	uis := libkb.UIs{
   161  		LogUI:     h.getLogUI(arg.SessionID),
   162  		SessionID: arg.SessionID,
   163  		SecretUI:  h.getSecretUI(arg.SessionID, h.G()),
   164  	}
   165  	eng := engine.NewAccountDelete(h.G(), arg.Passphrase)
   166  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   167  	return engine.RunEngine2(m, eng)
   168  }
   169  
   170  func (h *LoginHandler) LoginOneshot(ctx context.Context, arg keybase1.LoginOneshotArg) error {
   171  	uis := libkb.UIs{
   172  		LogUI:     h.getLogUI(arg.SessionID),
   173  		SessionID: arg.SessionID,
   174  	}
   175  	eng := engine.NewLoginOneshot(h.G(), arg)
   176  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   177  	return engine.RunEngine2(m, eng)
   178  }
   179  
   180  func (h *LoginHandler) IsOnline(ctx context.Context) (bool, error) {
   181  	return h.G().ConnectivityMonitor.IsConnected(ctx) == libkb.ConnectivityMonitorYes, nil
   182  }
   183  
   184  func (h *LoginHandler) RecoverPassphrase(ctx context.Context, arg keybase1.RecoverPassphraseArg) error {
   185  	uis := libkb.UIs{
   186  		LogUI:       h.getLogUI(arg.SessionID),
   187  		LoginUI:     h.getLoginUI(arg.SessionID),
   188  		SecretUI:    h.getSecretUI(arg.SessionID, h.G()),
   189  		ProvisionUI: h.getProvisionUI(arg.SessionID),
   190  		SessionID:   arg.SessionID,
   191  	}
   192  	eng := engine.NewPassphraseRecover(h.G(), arg)
   193  	m := libkb.NewMetaContext(ctx, h.G()).WithUIs(uis)
   194  	return engine.RunEngine2(m, eng)
   195  }