github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/engine/unlock.go (about)

     1  // Copyright 2015 Keybase, Inc. All rights reserved. Use of
     2  // this source code is governed by the included BSD license.
     3  
     4  package engine
     5  
     6  import (
     7  	"github.com/keybase/client/go/libkb"
     8  )
     9  
    10  // Unlock is an engine.
    11  type Unlock struct {
    12  	libkb.Contextified
    13  	passphrase string
    14  }
    15  
    16  // NewUnlock creates a Unlock engine.
    17  func NewUnlock(g *libkb.GlobalContext) *Unlock {
    18  	return &Unlock{
    19  		Contextified: libkb.NewContextified(g),
    20  	}
    21  }
    22  
    23  // NewUnlock creates a Unlock engine.
    24  func NewUnlockWithPassphrase(g *libkb.GlobalContext, passphrase string) *Unlock {
    25  	return &Unlock{
    26  		Contextified: libkb.NewContextified(g),
    27  		passphrase:   passphrase,
    28  	}
    29  }
    30  
    31  // Name is the unique engine name.
    32  func (e *Unlock) Name() string {
    33  	return "Unlock"
    34  }
    35  
    36  // GetPrereqs returns the engine prereqs.
    37  func (e *Unlock) Prereqs() Prereqs {
    38  	return Prereqs{}
    39  }
    40  
    41  // RequiredUIs returns the required UIs.
    42  func (e *Unlock) RequiredUIs() []libkb.UIKind {
    43  	if e.passphrase != "" {
    44  		return nil
    45  	}
    46  	return []libkb.UIKind{libkb.SecretUIKind}
    47  }
    48  
    49  // SubConsumers returns the other UI consumers for this engine.
    50  func (e *Unlock) SubConsumers() []libkb.UIConsumer {
    51  	return nil
    52  }
    53  
    54  // Run starts the engine.
    55  func (e *Unlock) Run(m libkb.MetaContext) (err error) {
    56  	defer m.Trace("Unlock#Run", &err)()
    57  
    58  	un := m.CurrentUsername()
    59  	m.Debug("Active device: %+v", *m.ActiveDevice())
    60  	if un.IsNil() {
    61  		return libkb.NewNoUsernameError()
    62  	}
    63  	m = m.WithNewProvisionalLoginContext()
    64  	if e.passphrase == "" {
    65  		err = libkb.PassphraseLoginPromptThenSecretStore(m, un.String(), 5, false /* failOnStoreError */)
    66  	} else {
    67  		err = libkb.PassphraseLoginNoPromptThenSecretStore(m, un.String(), e.passphrase, false /* failOnStoreError */)
    68  	}
    69  	if err != nil {
    70  		return err
    71  	}
    72  	m.CommitProvisionalLogin()
    73  
    74  	return nil
    75  }