// Run starts the provisioner engine. func (e *Kex2Provisioner) Run(ctx *Context) (err error) { e.G().Log.Debug("+ Kex2Provisioner.Run()") defer func() { e.G().Log.Debug("- Kex2Provisioner.Run() -> %s", libkb.ErrToOk(err)) }() // before starting provisioning, need to load some information: // load self: e.me, err = libkb.LoadMe(libkb.NewLoadUserArg(e.G())) if err != nil { return err } // get signing key (including secret key): arg := libkb.SecretKeyArg{ Me: e.me, KeyType: libkb.DeviceSigningKeyType, } e.signingKey, err = e.G().Keyrings.GetSecretKeyWithPrompt(ctx.LoginContext, arg, ctx.SecretUI, "new device install") if err != nil { return err } // get current passphrase stream: e.pps, err = e.G().LoginState().GetPassphraseStream(ctx.SecretUI) if err != nil { return err } // ctx needed by some kex2 functions e.ctx = ctx deviceID := e.G().Env.GetDeviceID() // all set: start provisioner karg := kex2.KexBaseArg{ Ctx: context.TODO(), Mr: libkb.NewKexRouter(e.G()), DeviceID: deviceID, Secret: e.secret, SecretChannel: e.secretCh, Timeout: 5 * time.Minute, } parg := kex2.ProvisionerArg{ KexBaseArg: karg, Provisioner: e, } err = kex2.RunProvisioner(parg) if err == nil { ctx.ProvisionUI.ProvisionSuccess(context.TODO(), 0) } return err }
// Run starts the provisioner engine. func (e *Kex2Provisioner) Run(ctx *Context) error { // before starting provisioning, need to load some information: // load self: var err error e.me, err = libkb.LoadMe(libkb.NewLoadUserArg(e.G())) if err != nil { return err } // get signing key (including secret key): ska := libkb.SecretKeyArg{ Me: e.me, KeyType: libkb.DeviceSigningKeyType, } e.signingKey, err = e.G().Keyrings.GetSecretKeyWithPrompt(ctx.SecretKeyPromptArg(ska, "new device install")) if err != nil { return err } // get current passphrase stream if necessary: if e.pps == nil { e.pps, err = e.G().LoginState().GetPassphraseStream(ctx.SecretUI) if err != nil { return err } } // ctx needed by some kex2 functions e.ctx = ctx deviceID := e.G().Env.GetDeviceID() // all set: start provisioner karg := kex2.KexBaseArg{ Ctx: context.TODO(), Mr: libkb.NewKexRouter(e.G()), DeviceID: deviceID, Secret: e.secret, SecretChannel: e.secretCh, Timeout: 5 * time.Minute, } parg := kex2.ProvisionerArg{ KexBaseArg: karg, Provisioner: e, HelloTimeout: 15 * time.Second, } if err := kex2.RunProvisioner(parg); err != nil { return err } // succesfully provisioned the other device sarg := keybase1.ProvisionerSuccessArg{ DeviceName: e.provisioneeDeviceName, DeviceType: e.provisioneeDeviceType, } if err := ctx.ProvisionUI.ProvisionerSuccess(context.TODO(), sarg); err != nil { return err } return nil }