status-im/status-go

View on GitHub
services/ext/rpc.go

Summary

Maintainability
A
0 mins
Test Coverage
F
0%
// TODO: These types should be defined using protobuf, but protoc can only emit []byte instead of types.HexBytes,
// which causes issues when marshaling to JSON on the react side. Let's do that once the chat protocol is moved to the go repo.

package ext

import (
    "crypto/ecdsa"

    "github.com/status-im/status-go/eth-node/crypto"
    "github.com/status-im/status-go/eth-node/types"
)

// SendPublicMessageRPC represents the RPC payload for the SendPublicMessage RPC method
type SendPublicMessageRPC struct {
    Sig     string // TODO: remove
    Chat    string
    Payload types.HexBytes
}

// TODO: implement with accordance to https://github.com/status-im/status-go/protocol/issues/28.
func (m SendPublicMessageRPC) ID() string { return m.Chat }

func (m SendPublicMessageRPC) PublicName() string { return m.Chat }

func (m SendPublicMessageRPC) PublicKey() *ecdsa.PublicKey { return nil }

// SendDirectMessageRPC represents the RPC payload for the SendDirectMessage RPC method
type SendDirectMessageRPC struct {
    Sig     string // TODO: remove
    Chat    string
    Payload types.HexBytes
    PubKey  types.HexBytes
    DH      bool // TODO: make sure to remove safely
}

// TODO: implement with accordance to https://github.com/status-im/status-go/protocol/issues/28.
func (m SendDirectMessageRPC) ID() string { return "" }

func (m SendDirectMessageRPC) PublicName() string { return "" }

func (m SendDirectMessageRPC) PublicKey() *ecdsa.PublicKey {
    publicKey, _ := crypto.UnmarshalPubkey(m.PubKey)
    return publicKey
}

type JoinRPC struct {
    Chat    string
    PubKey  types.HexBytes
    Payload types.HexBytes
}

func (m JoinRPC) ID() string { return m.Chat }

func (m JoinRPC) PublicName() string {
    if len(m.PubKey) > 0 {
        return ""
    }
    return m.Chat
}

func (m JoinRPC) PublicKey() *ecdsa.PublicKey {
    if len(m.PubKey) > 0 {
        return nil
    }
    publicKey, _ := crypto.UnmarshalPubkey(m.PubKey)
    return publicKey
}