github.com/status-im/status-go@v1.1.0/services/wallet/keycard_pairings.go (about)

     1  package wallet
     2  
     3  import (
     4  	"encoding/json"
     5  	"io/ioutil"
     6  	"os"
     7  	"path/filepath"
     8  )
     9  
    10  type KeycardPairings struct {
    11  	pairingsFile string
    12  }
    13  
    14  type KeycardPairing struct {
    15  	Key   string `json:"key"`
    16  	Index int    `json:"index"`
    17  }
    18  
    19  func NewKeycardPairings() *KeycardPairings {
    20  	return &KeycardPairings{}
    21  }
    22  
    23  func (kp *KeycardPairings) SetKeycardPairingsFile(filePath string) {
    24  	kp.pairingsFile = filePath
    25  }
    26  
    27  func (kp *KeycardPairings) GetPairingsJSONFileContent() ([]byte, error) {
    28  	_, err := os.Stat(kp.pairingsFile)
    29  	if os.IsNotExist(err) {
    30  		return []byte{}, nil
    31  	}
    32  
    33  	return ioutil.ReadFile(kp.pairingsFile)
    34  }
    35  
    36  func (kp *KeycardPairings) SetPairingsJSONFileContent(content []byte) error {
    37  	if len(content) == 0 {
    38  		// Nothing to write
    39  		return nil
    40  	}
    41  	_, err := os.Stat(kp.pairingsFile)
    42  	if os.IsNotExist(err) {
    43  		dir, _ := filepath.Split(kp.pairingsFile)
    44  		err = os.MkdirAll(dir, 0700)
    45  		if err != nil {
    46  			return err
    47  		}
    48  	}
    49  
    50  	return ioutil.WriteFile(kp.pairingsFile, content, 0600)
    51  }
    52  
    53  func (kp *KeycardPairings) GetPairings() (map[string]KeycardPairing, error) {
    54  	content, err := kp.GetPairingsJSONFileContent()
    55  	if err != nil {
    56  		return nil, err
    57  	}
    58  
    59  	if len(content) == 0 {
    60  		return nil, os.ErrNotExist
    61  	}
    62  
    63  	pairings := make(map[string]KeycardPairing)
    64  	err = json.Unmarshal(content, &pairings)
    65  	if err != nil {
    66  		return nil, err
    67  	}
    68  
    69  	return pairings, nil
    70  }