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 }