1package engine 2 3import ( 4 "github.com/keybase/client/go/libkb" 5 keybase1 "github.com/keybase/client/go/protocol/keybase1" 6) 7 8type LoginOffline struct { 9 libkb.Contextified 10} 11 12func NewLoginOffline(g *libkb.GlobalContext) *LoginOffline { 13 return &LoginOffline{ 14 Contextified: libkb.NewContextified(g), 15 } 16} 17 18// Name is the unique engine name. 19func (e *LoginOffline) Name() string { 20 return "LoginOffline" 21} 22 23// Prereqs returns the engine prereqs. 24func (e *LoginOffline) Prereqs() Prereqs { 25 return Prereqs{} 26} 27 28// RequiredUIs returns the required UIs. 29func (e *LoginOffline) RequiredUIs() []libkb.UIKind { 30 return []libkb.UIKind{} 31} 32 33// SubConsumers returns the other UI consumers for this engine. 34func (e *LoginOffline) SubConsumers() []libkb.UIConsumer { 35 return nil 36} 37 38func (e *LoginOffline) Run(m libkb.MetaContext) error { 39 uid, err := e.run(m) 40 if err != nil { 41 return err 42 } 43 m.Debug("LoginOffline success, sending login notification") 44 m.G().NotifyRouter.HandleLogin(m.Ctx(), string(e.G().Env.GetUsernameForUID(uid))) 45 m.Debug("LoginOffline success, calling login hooks") 46 m.G().CallLoginHooks(m) 47 48 return nil 49} 50 51func (e *LoginOffline) run(m libkb.MetaContext) (uid keybase1.UID, err error) { 52 defer m.Trace("LoginOffline#run", &err)() 53 uid, err = libkb.BootstrapActiveDeviceFromConfig(m, false) 54 if err != nil { 55 err = libkb.NewLoginRequiredError(err.Error()) 56 return uid, err 57 } 58 return uid, nil 59} 60