1// Copyright 2016 Keybase, Inc. All rights reserved. Use of 2// this source code is governed by the included BSD license. 3 4package engine 5 6import ( 7 "github.com/keybase/client/go/libkb" 8) 9 10// PaperKeySubmit is an engine. 11type PaperKeySubmit struct { 12 libkb.Contextified 13 paperPhrase string 14 deviceWithKeys *libkb.DeviceWithKeys 15} 16 17// NewPaperKeySubmit creates a PaperKeySubmit engine. 18func NewPaperKeySubmit(g *libkb.GlobalContext, paperPhrase string) *PaperKeySubmit { 19 return &PaperKeySubmit{ 20 Contextified: libkb.NewContextified(g), 21 paperPhrase: paperPhrase, 22 } 23} 24 25// Name is the unique engine name. 26func (e *PaperKeySubmit) Name() string { 27 return "PaperKeySubmit" 28} 29 30// Prereqs returns the engine prereqs. 31func (e *PaperKeySubmit) Prereqs() Prereqs { 32 return Prereqs{Device: true} 33} 34 35// RequiredUIs returns the required UIs. 36func (e *PaperKeySubmit) RequiredUIs() []libkb.UIKind { 37 return []libkb.UIKind{} 38} 39 40// SubConsumers returns the other UI consumers for this engine. 41func (e *PaperKeySubmit) SubConsumers() []libkb.UIConsumer { 42 return []libkb.UIConsumer{ 43 &PaperKeyGen{}, 44 } 45} 46 47// Run starts the engine. 48func (e *PaperKeySubmit) Run(m libkb.MetaContext) error { 49 me, err := libkb.LoadMe(libkb.NewLoadUserArgWithMetaContext(m)) 50 if err != nil { 51 return err 52 } 53 54 e.deviceWithKeys, err = matchPaperKey(m, me, e.paperPhrase) 55 if err != nil { 56 return err 57 } 58 59 m.ActiveDevice().CacheProvisioningKey(m, e.deviceWithKeys) 60 61 // send a notification that a paper key has been cached 62 // for rekey purposes 63 m.G().NotifyRouter.HandlePaperKeyCached(me.GetUID(), e.deviceWithKeys.EncryptionKey().GetKID(), e.deviceWithKeys.SigningKey().GetKID()) 64 65 // XXX - this is temporary until KBFS handles the above notification 66 m.G().UserChanged(m.Ctx(), me.GetUID()) 67 68 return nil 69} 70