// Run starts the engine. func (e *PaperKeyPrimary) Run(ctx *Context) error { var err error e.passphrase, err = libkb.MakePaperKeyPhrase(libkb.PaperKeyVersion) if err != nil { return err } kgarg := &PaperKeyGenArg{ Passphrase: e.passphrase, Me: e.args.Me, SigningKey: e.args.SigningKey, } kgeng := NewPaperKeyGen(kgarg, e.G()) if err := RunEngine(kgeng, ctx); err != nil { return err } // If they refuse to write down their key, don't kill the login flow, just print an // ugly warning, which likely they won't see... w := ctx.LoginUI.DisplayPrimaryPaperKey(context.TODO(), keybase1.DisplayPrimaryPaperKeyArg{Phrase: e.passphrase.String()}) if w != nil { e.G().Log.Errorf("Display paper key failure: %s", w.Error()) } return nil }
// Run starts the engine. func (e *PaperKeyPrimary) Run(ctx *Context) error { var err error e.passphrase, err = libkb.MakePaperKeyPhrase(libkb.PaperKeyVersion) if err != nil { return err } kgarg := &PaperKeyGenArg{ Passphrase: e.passphrase, Me: e.args.Me, SigningKey: e.args.SigningKey, } kgeng := NewPaperKeyGen(kgarg, e.G()) if err := RunEngine(kgeng, ctx); err != nil { return err } return ctx.LoginUI.DisplayPrimaryPaperKey(context.TODO(), keybase1.DisplayPrimaryPaperKeyArg{Phrase: e.passphrase.String()}) }
// Run starts the engine. func (e *PaperKey) Run(ctx *Context) error { me, err := libkb.LoadMe(libkb.NewLoadUserArg(e.G())) if err != nil { return err } // check for existing paper keys cki := me.GetComputedKeyInfos() if cki == nil { return fmt.Errorf("no computed key infos") } var needReload bool var devicesToRevoke []*libkb.Device for i, bdev := range cki.PaperDevices() { revoke, err := ctx.LoginUI.PromptRevokePaperKeys(context.TODO(), keybase1.PromptRevokePaperKeysArg{ Device: *bdev.ProtExport(), Index: i, }) if err != nil { e.G().Log.Warning("prompt error: %s", err) return err } if revoke { devicesToRevoke = append(devicesToRevoke, bdev) } } // Revoke all keys at once, not one-by-one. This way, a cancelation of the // experience above will stop all operations for _, bdev := range devicesToRevoke { reng := NewRevokeDeviceEngine(RevokeDeviceEngineArgs{ID: bdev.ID}, e.G()) if err := RunEngine(reng, ctx); err != nil { // probably not a good idea to continue... return err } needReload = true } if needReload { me, err = libkb.LoadMe(libkb.NewLoadUserArg(e.G())) if err != nil { return err } } signingKey, err := e.G().Keyrings.GetSecretKeyWithPrompt(ctx.LoginContext, libkb.SecretKeyArg{ Me: me, KeyType: libkb.DeviceSigningKeyType, }, ctx.SecretUI, "You must sign your new paper key") if err != nil { return err } e.passphrase, err = libkb.MakePaperKeyPhrase(libkb.PaperKeyVersion) if err != nil { return err } kgarg := &PaperKeyGenArg{ Passphrase: e.passphrase, Me: me, SigningKey: signingKey, } e.gen = NewPaperKeyGen(kgarg, e.G()) if err := RunEngine(e.gen, ctx); err != nil { return err } return ctx.LoginUI.DisplayPaperKeyPhrase(context.TODO(), keybase1.DisplayPaperKeyPhraseArg{Phrase: e.passphrase.String()}) }