github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/protocol/keybase1/login.go (about) 1 // Auto-generated to Go types and interfaces using avdl-compiler v1.4.10 (https://github.com/keybase/node-avdl-compiler) 2 // Input file: avdl/keybase1/login.avdl 3 4 package keybase1 5 6 import ( 7 "github.com/keybase/go-framed-msgpack-rpc/rpc" 8 context "golang.org/x/net/context" 9 "time" 10 ) 11 12 type ConfiguredAccount struct { 13 Username string `codec:"username" json:"username"` 14 Fullname FullName `codec:"fullname" json:"fullname"` 15 HasStoredSecret bool `codec:"hasStoredSecret" json:"hasStoredSecret"` 16 IsCurrent bool `codec:"isCurrent" json:"isCurrent"` 17 } 18 19 func (o ConfiguredAccount) DeepCopy() ConfiguredAccount { 20 return ConfiguredAccount{ 21 Username: o.Username, 22 Fullname: o.Fullname.DeepCopy(), 23 HasStoredSecret: o.HasStoredSecret, 24 IsCurrent: o.IsCurrent, 25 } 26 } 27 28 type GetConfiguredAccountsArg struct { 29 SessionID int `codec:"sessionID" json:"sessionID"` 30 } 31 32 type LoginArg struct { 33 SessionID int `codec:"sessionID" json:"sessionID"` 34 DeviceType DeviceTypeV2 `codec:"deviceType" json:"deviceType"` 35 Username string `codec:"username" json:"username"` 36 ClientType ClientType `codec:"clientType" json:"clientType"` 37 DoUserSwitch bool `codec:"doUserSwitch" json:"doUserSwitch"` 38 PaperKey string `codec:"paperKey" json:"paperKey"` 39 DeviceName string `codec:"deviceName" json:"deviceName"` 40 } 41 42 type LoginProvisionedDeviceArg struct { 43 SessionID int `codec:"sessionID" json:"sessionID"` 44 Username string `codec:"username" json:"username"` 45 NoPassphrasePrompt bool `codec:"noPassphrasePrompt" json:"noPassphrasePrompt"` 46 } 47 48 type LoginWithPaperKeyArg struct { 49 SessionID int `codec:"sessionID" json:"sessionID"` 50 Username string `codec:"username" json:"username"` 51 } 52 53 type LogoutArg struct { 54 SessionID int `codec:"sessionID" json:"sessionID"` 55 Force bool `codec:"force" json:"force"` 56 KeepSecrets bool `codec:"keepSecrets" json:"keepSecrets"` 57 } 58 59 type DeprovisionArg struct { 60 SessionID int `codec:"sessionID" json:"sessionID"` 61 Username string `codec:"username" json:"username"` 62 DoRevoke bool `codec:"doRevoke" json:"doRevoke"` 63 } 64 65 type RecoverAccountFromEmailAddressArg struct { 66 Email string `codec:"email" json:"email"` 67 } 68 69 type RecoverPassphraseArg struct { 70 SessionID int `codec:"sessionID" json:"sessionID"` 71 Username string `codec:"username" json:"username"` 72 } 73 74 type PaperKeyArg struct { 75 SessionID int `codec:"sessionID" json:"sessionID"` 76 } 77 78 type PaperKeySubmitArg struct { 79 SessionID int `codec:"sessionID" json:"sessionID"` 80 PaperPhrase string `codec:"paperPhrase" json:"paperPhrase"` 81 } 82 83 type UnlockArg struct { 84 SessionID int `codec:"sessionID" json:"sessionID"` 85 } 86 87 type UnlockWithPassphraseArg struct { 88 SessionID int `codec:"sessionID" json:"sessionID"` 89 Passphrase string `codec:"passphrase" json:"passphrase"` 90 } 91 92 type AccountDeleteArg struct { 93 SessionID int `codec:"sessionID" json:"sessionID"` 94 Passphrase *string `codec:"passphrase,omitempty" json:"passphrase,omitempty"` 95 } 96 97 type LoginOneshotArg struct { 98 SessionID int `codec:"sessionID" json:"sessionID"` 99 Username string `codec:"username" json:"username"` 100 PaperKey string `codec:"paperKey" json:"paperKey"` 101 } 102 103 type IsOnlineArg struct { 104 } 105 106 type LoginInterface interface { 107 // Returns an array of information about accounts configured on the local 108 // machine. Currently configured accounts are defined as those that have stored 109 // secrets, but this definition may be expanded in the future. 110 GetConfiguredAccounts(context.Context, int) ([]ConfiguredAccount, error) 111 // Performs login. deviceType should be keybase1.DeviceTypeV2_DESKTOP 112 // or keybase1.DeviceTypeV2_MOBILE. username is optional. If the current 113 // device isn't provisioned, this function will provision it. 114 Login(context.Context, LoginArg) error 115 // Login a user only if the user is on a provisioned device. Username is optional. 116 // If noPassphrasePrompt is set, then only a stored secret will be used to unlock 117 // the device keys. 118 LoginProvisionedDevice(context.Context, LoginProvisionedDeviceArg) error 119 // Login and unlock by 120 // - trying unlocked device keys if available 121 // - prompting for a paper key and using that 122 LoginWithPaperKey(context.Context, LoginWithPaperKeyArg) error 123 Logout(context.Context, LogoutArg) error 124 Deprovision(context.Context, DeprovisionArg) error 125 RecoverAccountFromEmailAddress(context.Context, string) error 126 // Guide the user through possibilities of changing their passphrase. 127 // Lets them change their passphrase using a paper key or enter the reset pipeline. 128 RecoverPassphrase(context.Context, RecoverPassphraseArg) error 129 // PaperKey generates paper backup keys for restoring an account. 130 // It calls login_ui.displayPaperKeyPhrase with the phrase. 131 PaperKey(context.Context, int) error 132 // paperKeySubmit checks that paperPhrase is a valid paper key 133 // for the logged in user, caches the keys, and sends a notification. 134 PaperKeySubmit(context.Context, PaperKeySubmitArg) error 135 // Unlock restores access to local key store by priming passphrase stream cache. 136 Unlock(context.Context, int) error 137 UnlockWithPassphrase(context.Context, UnlockWithPassphraseArg) error 138 // accountDelete deletes the current user's account. 139 AccountDelete(context.Context, AccountDeleteArg) error 140 // loginOneshot allows a service to have a "onetime login", without 141 // provisioning a device. It bootstraps credentials with the given 142 // paperkey 143 LoginOneshot(context.Context, LoginOneshotArg) error 144 // isOnline returns whether the device is able to open a connection to keybase.io. 145 // Used for determining whether to offer proxy settings on the login screen. 146 IsOnline(context.Context) (bool, error) 147 } 148 149 func LoginProtocol(i LoginInterface) rpc.Protocol { 150 return rpc.Protocol{ 151 Name: "keybase.1.login", 152 Methods: map[string]rpc.ServeHandlerDescription{ 153 "getConfiguredAccounts": { 154 MakeArg: func() interface{} { 155 var ret [1]GetConfiguredAccountsArg 156 return &ret 157 }, 158 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 159 typedArgs, ok := args.(*[1]GetConfiguredAccountsArg) 160 if !ok { 161 err = rpc.NewTypeError((*[1]GetConfiguredAccountsArg)(nil), args) 162 return 163 } 164 ret, err = i.GetConfiguredAccounts(ctx, typedArgs[0].SessionID) 165 return 166 }, 167 }, 168 "login": { 169 MakeArg: func() interface{} { 170 var ret [1]LoginArg 171 return &ret 172 }, 173 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 174 typedArgs, ok := args.(*[1]LoginArg) 175 if !ok { 176 err = rpc.NewTypeError((*[1]LoginArg)(nil), args) 177 return 178 } 179 err = i.Login(ctx, typedArgs[0]) 180 return 181 }, 182 }, 183 "loginProvisionedDevice": { 184 MakeArg: func() interface{} { 185 var ret [1]LoginProvisionedDeviceArg 186 return &ret 187 }, 188 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 189 typedArgs, ok := args.(*[1]LoginProvisionedDeviceArg) 190 if !ok { 191 err = rpc.NewTypeError((*[1]LoginProvisionedDeviceArg)(nil), args) 192 return 193 } 194 err = i.LoginProvisionedDevice(ctx, typedArgs[0]) 195 return 196 }, 197 }, 198 "loginWithPaperKey": { 199 MakeArg: func() interface{} { 200 var ret [1]LoginWithPaperKeyArg 201 return &ret 202 }, 203 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 204 typedArgs, ok := args.(*[1]LoginWithPaperKeyArg) 205 if !ok { 206 err = rpc.NewTypeError((*[1]LoginWithPaperKeyArg)(nil), args) 207 return 208 } 209 err = i.LoginWithPaperKey(ctx, typedArgs[0]) 210 return 211 }, 212 }, 213 "logout": { 214 MakeArg: func() interface{} { 215 var ret [1]LogoutArg 216 return &ret 217 }, 218 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 219 typedArgs, ok := args.(*[1]LogoutArg) 220 if !ok { 221 err = rpc.NewTypeError((*[1]LogoutArg)(nil), args) 222 return 223 } 224 err = i.Logout(ctx, typedArgs[0]) 225 return 226 }, 227 }, 228 "deprovision": { 229 MakeArg: func() interface{} { 230 var ret [1]DeprovisionArg 231 return &ret 232 }, 233 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 234 typedArgs, ok := args.(*[1]DeprovisionArg) 235 if !ok { 236 err = rpc.NewTypeError((*[1]DeprovisionArg)(nil), args) 237 return 238 } 239 err = i.Deprovision(ctx, typedArgs[0]) 240 return 241 }, 242 }, 243 "recoverAccountFromEmailAddress": { 244 MakeArg: func() interface{} { 245 var ret [1]RecoverAccountFromEmailAddressArg 246 return &ret 247 }, 248 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 249 typedArgs, ok := args.(*[1]RecoverAccountFromEmailAddressArg) 250 if !ok { 251 err = rpc.NewTypeError((*[1]RecoverAccountFromEmailAddressArg)(nil), args) 252 return 253 } 254 err = i.RecoverAccountFromEmailAddress(ctx, typedArgs[0].Email) 255 return 256 }, 257 }, 258 "recoverPassphrase": { 259 MakeArg: func() interface{} { 260 var ret [1]RecoverPassphraseArg 261 return &ret 262 }, 263 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 264 typedArgs, ok := args.(*[1]RecoverPassphraseArg) 265 if !ok { 266 err = rpc.NewTypeError((*[1]RecoverPassphraseArg)(nil), args) 267 return 268 } 269 err = i.RecoverPassphrase(ctx, typedArgs[0]) 270 return 271 }, 272 }, 273 "paperKey": { 274 MakeArg: func() interface{} { 275 var ret [1]PaperKeyArg 276 return &ret 277 }, 278 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 279 typedArgs, ok := args.(*[1]PaperKeyArg) 280 if !ok { 281 err = rpc.NewTypeError((*[1]PaperKeyArg)(nil), args) 282 return 283 } 284 err = i.PaperKey(ctx, typedArgs[0].SessionID) 285 return 286 }, 287 }, 288 "paperKeySubmit": { 289 MakeArg: func() interface{} { 290 var ret [1]PaperKeySubmitArg 291 return &ret 292 }, 293 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 294 typedArgs, ok := args.(*[1]PaperKeySubmitArg) 295 if !ok { 296 err = rpc.NewTypeError((*[1]PaperKeySubmitArg)(nil), args) 297 return 298 } 299 err = i.PaperKeySubmit(ctx, typedArgs[0]) 300 return 301 }, 302 }, 303 "unlock": { 304 MakeArg: func() interface{} { 305 var ret [1]UnlockArg 306 return &ret 307 }, 308 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 309 typedArgs, ok := args.(*[1]UnlockArg) 310 if !ok { 311 err = rpc.NewTypeError((*[1]UnlockArg)(nil), args) 312 return 313 } 314 err = i.Unlock(ctx, typedArgs[0].SessionID) 315 return 316 }, 317 }, 318 "unlockWithPassphrase": { 319 MakeArg: func() interface{} { 320 var ret [1]UnlockWithPassphraseArg 321 return &ret 322 }, 323 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 324 typedArgs, ok := args.(*[1]UnlockWithPassphraseArg) 325 if !ok { 326 err = rpc.NewTypeError((*[1]UnlockWithPassphraseArg)(nil), args) 327 return 328 } 329 err = i.UnlockWithPassphrase(ctx, typedArgs[0]) 330 return 331 }, 332 }, 333 "accountDelete": { 334 MakeArg: func() interface{} { 335 var ret [1]AccountDeleteArg 336 return &ret 337 }, 338 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 339 typedArgs, ok := args.(*[1]AccountDeleteArg) 340 if !ok { 341 err = rpc.NewTypeError((*[1]AccountDeleteArg)(nil), args) 342 return 343 } 344 err = i.AccountDelete(ctx, typedArgs[0]) 345 return 346 }, 347 }, 348 "loginOneshot": { 349 MakeArg: func() interface{} { 350 var ret [1]LoginOneshotArg 351 return &ret 352 }, 353 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 354 typedArgs, ok := args.(*[1]LoginOneshotArg) 355 if !ok { 356 err = rpc.NewTypeError((*[1]LoginOneshotArg)(nil), args) 357 return 358 } 359 err = i.LoginOneshot(ctx, typedArgs[0]) 360 return 361 }, 362 }, 363 "isOnline": { 364 MakeArg: func() interface{} { 365 var ret [1]IsOnlineArg 366 return &ret 367 }, 368 Handler: func(ctx context.Context, args interface{}) (ret interface{}, err error) { 369 ret, err = i.IsOnline(ctx) 370 return 371 }, 372 }, 373 }, 374 } 375 } 376 377 type LoginClient struct { 378 Cli rpc.GenericClient 379 } 380 381 // Returns an array of information about accounts configured on the local 382 // machine. Currently configured accounts are defined as those that have stored 383 // secrets, but this definition may be expanded in the future. 384 func (c LoginClient) GetConfiguredAccounts(ctx context.Context, sessionID int) (res []ConfiguredAccount, err error) { 385 __arg := GetConfiguredAccountsArg{SessionID: sessionID} 386 err = c.Cli.Call(ctx, "keybase.1.login.getConfiguredAccounts", []interface{}{__arg}, &res, 0*time.Millisecond) 387 return 388 } 389 390 // Performs login. deviceType should be keybase1.DeviceTypeV2_DESKTOP 391 // or keybase1.DeviceTypeV2_MOBILE. username is optional. If the current 392 // device isn't provisioned, this function will provision it. 393 func (c LoginClient) Login(ctx context.Context, __arg LoginArg) (err error) { 394 err = c.Cli.Call(ctx, "keybase.1.login.login", []interface{}{__arg}, nil, 0*time.Millisecond) 395 return 396 } 397 398 // Login a user only if the user is on a provisioned device. Username is optional. 399 // If noPassphrasePrompt is set, then only a stored secret will be used to unlock 400 // the device keys. 401 func (c LoginClient) LoginProvisionedDevice(ctx context.Context, __arg LoginProvisionedDeviceArg) (err error) { 402 err = c.Cli.Call(ctx, "keybase.1.login.loginProvisionedDevice", []interface{}{__arg}, nil, 0*time.Millisecond) 403 return 404 } 405 406 // Login and unlock by 407 // - trying unlocked device keys if available 408 // - prompting for a paper key and using that 409 func (c LoginClient) LoginWithPaperKey(ctx context.Context, __arg LoginWithPaperKeyArg) (err error) { 410 err = c.Cli.Call(ctx, "keybase.1.login.loginWithPaperKey", []interface{}{__arg}, nil, 0*time.Millisecond) 411 return 412 } 413 414 func (c LoginClient) Logout(ctx context.Context, __arg LogoutArg) (err error) { 415 err = c.Cli.Call(ctx, "keybase.1.login.logout", []interface{}{__arg}, nil, 0*time.Millisecond) 416 return 417 } 418 419 func (c LoginClient) Deprovision(ctx context.Context, __arg DeprovisionArg) (err error) { 420 err = c.Cli.Call(ctx, "keybase.1.login.deprovision", []interface{}{__arg}, nil, 0*time.Millisecond) 421 return 422 } 423 424 func (c LoginClient) RecoverAccountFromEmailAddress(ctx context.Context, email string) (err error) { 425 __arg := RecoverAccountFromEmailAddressArg{Email: email} 426 err = c.Cli.Call(ctx, "keybase.1.login.recoverAccountFromEmailAddress", []interface{}{__arg}, nil, 0*time.Millisecond) 427 return 428 } 429 430 // Guide the user through possibilities of changing their passphrase. 431 // Lets them change their passphrase using a paper key or enter the reset pipeline. 432 func (c LoginClient) RecoverPassphrase(ctx context.Context, __arg RecoverPassphraseArg) (err error) { 433 err = c.Cli.Call(ctx, "keybase.1.login.recoverPassphrase", []interface{}{__arg}, nil, 0*time.Millisecond) 434 return 435 } 436 437 // PaperKey generates paper backup keys for restoring an account. 438 // It calls login_ui.displayPaperKeyPhrase with the phrase. 439 func (c LoginClient) PaperKey(ctx context.Context, sessionID int) (err error) { 440 __arg := PaperKeyArg{SessionID: sessionID} 441 err = c.Cli.Call(ctx, "keybase.1.login.paperKey", []interface{}{__arg}, nil, 0*time.Millisecond) 442 return 443 } 444 445 // paperKeySubmit checks that paperPhrase is a valid paper key 446 // for the logged in user, caches the keys, and sends a notification. 447 func (c LoginClient) PaperKeySubmit(ctx context.Context, __arg PaperKeySubmitArg) (err error) { 448 err = c.Cli.Call(ctx, "keybase.1.login.paperKeySubmit", []interface{}{__arg}, nil, 0*time.Millisecond) 449 return 450 } 451 452 // Unlock restores access to local key store by priming passphrase stream cache. 453 func (c LoginClient) Unlock(ctx context.Context, sessionID int) (err error) { 454 __arg := UnlockArg{SessionID: sessionID} 455 err = c.Cli.Call(ctx, "keybase.1.login.unlock", []interface{}{__arg}, nil, 0*time.Millisecond) 456 return 457 } 458 459 func (c LoginClient) UnlockWithPassphrase(ctx context.Context, __arg UnlockWithPassphraseArg) (err error) { 460 err = c.Cli.Call(ctx, "keybase.1.login.unlockWithPassphrase", []interface{}{__arg}, nil, 0*time.Millisecond) 461 return 462 } 463 464 // accountDelete deletes the current user's account. 465 func (c LoginClient) AccountDelete(ctx context.Context, __arg AccountDeleteArg) (err error) { 466 err = c.Cli.Call(ctx, "keybase.1.login.accountDelete", []interface{}{__arg}, nil, 0*time.Millisecond) 467 return 468 } 469 470 // loginOneshot allows a service to have a "onetime login", without 471 // provisioning a device. It bootstraps credentials with the given 472 // paperkey 473 func (c LoginClient) LoginOneshot(ctx context.Context, __arg LoginOneshotArg) (err error) { 474 err = c.Cli.Call(ctx, "keybase.1.login.loginOneshot", []interface{}{__arg}, nil, 0*time.Millisecond) 475 return 476 } 477 478 // isOnline returns whether the device is able to open a connection to keybase.io. 479 // Used for determining whether to offer proxy settings on the login screen. 480 func (c LoginClient) IsOnline(ctx context.Context) (res bool, err error) { 481 err = c.Cli.Call(ctx, "keybase.1.login.isOnline", []interface{}{IsOnlineArg{}}, &res, 0*time.Millisecond) 482 return 483 }