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 }