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