github.com/status-im/status-go@v1.1.0/server/pairing/config.go (about)

     1  package pairing
     2  
     3  import (
     4  	"crypto/ecdsa"
     5  	"crypto/tls"
     6  	"net"
     7  
     8  	"github.com/status-im/status-go/api"
     9  	"github.com/status-im/status-go/multiaccounts"
    10  	"github.com/status-im/status-go/protocol/requests"
    11  )
    12  
    13  type SenderConfig struct {
    14  	// SenderConfig.KeystorePath must end with keyUID
    15  	KeystorePath string `json:"keystorePath" validate:"required,keystorepath"`
    16  	// DeviceType SendPairInstallation need this information
    17  	DeviceType string `json:"deviceType" validate:"required"`
    18  
    19  	KeyUID   string `json:"keyUID" validate:"required,keyuid"`
    20  	Password string `json:"password" validate:"required"`
    21  	ChatKey  string `json:"chatKey"` // set only in case of a Keycard user, otherwise empty
    22  
    23  	DB *multiaccounts.Database `json:"-"`
    24  }
    25  
    26  type ReceiverConfig struct {
    27  	CreateAccount *requests.CreateAccount `json:"createAccount" validate:"required"`
    28  
    29  	// DeviceType SendPairInstallation need this information
    30  	// Deprecated: This field will be automatically overridden with runtime.GOOS and can be omitted by client.
    31  	// The field will be removed in https://github.com/status-im/status-go/issues/3351 is fully implemented.
    32  	DeviceType string `json:"-"`
    33  
    34  	DB             *multiaccounts.Database `json:"-"`
    35  	LoggedInKeyUID string                  `json:"-"`
    36  }
    37  
    38  type KeystoreFilesConfig struct {
    39  	KeystorePath   string `json:"keystorePath" validate:"required,keystorepath"`
    40  	LoggedInKeyUID string `json:"loggedInKeyUid" validate:"required,keyuid"`
    41  	Password       string `json:"password" validate:"required"`
    42  }
    43  
    44  type KeystoreFilesSenderConfig struct {
    45  	KeystoreFilesConfig
    46  	KeypairsToExport []string `json:"keypairsToExport" validate:"required"`
    47  }
    48  
    49  type KeystoreFilesReceiverConfig struct {
    50  	KeystoreFilesConfig
    51  	KeypairsToImport []string `json:"keypairsToImport" validate:"required"`
    52  }
    53  
    54  type ServerConfig struct {
    55  	// Timeout the number of milliseconds after which the pairing server will automatically terminate
    56  	Timeout uint `json:"timeout" validate:"omitempty,gte=0"`
    57  
    58  	// Connection fields, not json (un)marshalled
    59  	// Required for the server, but MUST NOT come from client
    60  
    61  	PK             *ecdsa.PublicKey `json:"-"`
    62  	EK             []byte           `json:"-"`
    63  	Cert           *tls.Certificate `json:"-"`
    64  	ListenIP       net.IP           `json:"-"`
    65  	IPAddresses    []net.IP         `json:"-"`
    66  	InstallationID string           `json:"-"`
    67  	KeyUID         string           `json:"-"`
    68  }
    69  
    70  type ClientConfig struct{}
    71  
    72  type SenderServerConfig struct {
    73  	SenderConfig *SenderConfig `json:"senderConfig" validate:"required"`
    74  	ServerConfig *ServerConfig `json:"serverConfig" validate:"omitempty,dive"`
    75  }
    76  
    77  type KeystoreFilesSenderServerConfig struct {
    78  	SenderConfig *KeystoreFilesSenderConfig `json:"senderConfig" validate:"required"`
    79  	ServerConfig *ServerConfig              `json:"serverConfig" validate:"omitempty,dive"`
    80  }
    81  
    82  type SenderClientConfig struct {
    83  	SenderConfig *SenderConfig `json:"senderConfig" validate:"required"`
    84  	ClientConfig *ClientConfig `json:"clientConfig"`
    85  }
    86  
    87  type ReceiverClientConfig struct {
    88  	ReceiverConfig *ReceiverConfig `json:"receiverConfig" validate:"required"`
    89  	ClientConfig   *ClientConfig   `json:"clientConfig"`
    90  }
    91  
    92  type KeystoreFilesReceiverClientConfig struct {
    93  	ReceiverConfig *KeystoreFilesReceiverConfig `json:"receiverConfig" validate:"required"`
    94  	ClientConfig   *ClientConfig                `json:"clientConfig"`
    95  }
    96  
    97  type ReceiverServerConfig struct {
    98  	ReceiverConfig *ReceiverConfig `json:"receiverConfig" validate:"required"`
    99  	ServerConfig   *ServerConfig   `json:"serverConfig" validate:"omitempty,dive"`
   100  }
   101  
   102  func NewSenderServerConfig() *SenderServerConfig {
   103  	return &SenderServerConfig{
   104  		SenderConfig: new(SenderConfig),
   105  		ServerConfig: new(ServerConfig),
   106  	}
   107  }
   108  
   109  func NewKeystoreFilesSenderServerConfig() *KeystoreFilesSenderServerConfig {
   110  	return &KeystoreFilesSenderServerConfig{
   111  		SenderConfig: new(KeystoreFilesSenderConfig),
   112  		ServerConfig: new(ServerConfig),
   113  	}
   114  }
   115  
   116  func NewSenderClientConfig() *SenderClientConfig {
   117  	return &SenderClientConfig{
   118  		SenderConfig: new(SenderConfig),
   119  		ClientConfig: new(ClientConfig),
   120  	}
   121  }
   122  
   123  func NewReceiverClientConfig() *ReceiverClientConfig {
   124  	return &ReceiverClientConfig{
   125  		ReceiverConfig: new(ReceiverConfig),
   126  		ClientConfig:   new(ClientConfig),
   127  	}
   128  }
   129  
   130  func NewKeystoreFilesReceiverClientConfig() *KeystoreFilesReceiverClientConfig {
   131  	return &KeystoreFilesReceiverClientConfig{
   132  		ReceiverConfig: new(KeystoreFilesReceiverConfig),
   133  		ClientConfig:   new(ClientConfig),
   134  	}
   135  }
   136  
   137  func NewReceiverServerConfig() *ReceiverServerConfig {
   138  	return &ReceiverServerConfig{
   139  		ReceiverConfig: new(ReceiverConfig),
   140  		ServerConfig:   new(ServerConfig),
   141  	}
   142  }
   143  
   144  func (c *ReceiverConfig) AbsoluteKeystorePath() string {
   145  	// Follow the same path as in InitKeyStoreDirWithAccount
   146  	// Keep keyUID empty as it's unknown yet
   147  	_, path := api.DefaultKeystorePath(c.CreateAccount.RootDataDir, "")
   148  	return path
   149  }