bertyprotocol

package
v2.269.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 29, 2021 License: Apache-2.0, MIT Imports: 110 Imported by: 0

README

Berty go/pkg/bertyprotocol

go.dev reference

Please, read the main README.md file first.

Usage

import "berty.tech/berty/v2/go/pkg/bertyprotocol"

Get the code

git clone https://github.com/berty/berty
cd berty/go/pkg/bertyprotocol

<!--
## Examples

_TODO: add links to internal examples + links to external repos using the protocol_
-->

Documentation

Overview

Package bertyprotocol is a reverse proxy.

It translates gRPC into RESTful JSON APIs.

Package bertyprotocol contains code for integrating the Berty protocol in your project.

See https://berty.tech/protocol for more information.

Index

Examples

Constants

View Source
const (
	AuthResponseType        = "code"
	AuthGrantType           = "authorization_code"
	AuthRedirect            = "berty://services-auth/"
	AuthClientID            = "berty"
	AuthCodeChallengeMethod = "S256"
)
View Source
const (
	NamespaceMessageKeystore  = "messages_keystore"
	NamespaceDeviceKeystore   = "device_keystore"
	NamespaceOrbitDBDatastore = "orbitdb_datastore"
	NamespaceOrbitDBDirectory = "orbitdb"
	NamespaceIPFSDatastore    = "ipfs_datastore"
)
View Source
const (
	ContextTokenHashField     ContextAuthValue = iota
	AuthHTTPPathTokenExchange                  = "/oauth/token" // nolint:gosec
	AuthHTTPPathAuthorize                      = "/authorize"
)
View Source
const ClientBufferSize = 256 * 1024
View Source
const CurrentGroupVersion = 1
View Source
const (
	ServiceReplicationID = "rpl"
)

Variables

View Source
var InMemoryDirectory = cacheleveldown.InMemoryDirectory

Functions

func ActivateGroupContext

func ActivateGroupContext(ctx context.Context, gc *groupContext, contact crypto.PubKey) error

func ConnectAll added in v2.39.0

func ConnectAll(t *testing.T, m libp2p_mocknet.Mocknet)

ConnectAll peers between themselves

func ConnectInLine added in v2.39.0

func ConnectInLine(t *testing.T, m libp2p_mocknet.Mocknet)

func DefaultOrbitDBOptions added in v2.32.1

func DefaultOrbitDBOptions(g *protocoltypes.Group, options *orbitdb.CreateDBOptions, keystore *BertySignedKeyStore, storeType string, groupOpenMode GroupOpenMode) (*orbitdb.CreateDBOptions, error)

func FillMessageKeysHolderUsingNewData

func FillMessageKeysHolderUsingNewData(ctx context.Context, gc *groupContext) <-chan crypto.PubKey

func FillMessageKeysHolderUsingPreviousData

func FillMessageKeysHolderUsingPreviousData(ctx context.Context, gc *groupContext) <-chan crypto.PubKey

func NewDeviceSecret

func NewDeviceSecret() (*protocoltypes.DeviceSecret, error)

func NewGroupMultiMember

func NewGroupMultiMember() (*protocoltypes.Group, crypto.PrivKey, error)

NewGroupMultiMember creates a new Group object and an invitation to be used by the first member of the group

func NewOrbitDatastoreCache added in v2.32.1

func NewOrbitDatastoreCache(ds datastore.Batching) cache.Interface

func NewSimpleAccessController added in v2.32.1

NewSimpleAccessController Returns a non configurable access controller

func RegisterReplicationServiceHandler added in v2.146.0

func RegisterReplicationServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error

RegisterReplicationServiceHandler registers the http handlers for service ReplicationService to "mux". The handlers forward requests to the grpc endpoint over "conn".

func RegisterReplicationServiceHandlerClient added in v2.146.0

func RegisterReplicationServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ReplicationServiceClient) error

RegisterReplicationServiceHandlerClient registers the http handlers for service ReplicationService to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ReplicationServiceClient". Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ReplicationServiceClient" doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in "ReplicationServiceClient" to call the correct interceptors.

func RegisterReplicationServiceHandlerFromEndpoint added in v2.146.0

func RegisterReplicationServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error)

RegisterReplicationServiceHandlerFromEndpoint is same as RegisterReplicationServiceHandler but automatically dials to "endpoint" and closes the connection when "ctx" gets done.

func RegisterReplicationServiceHandlerServer added in v2.146.0

func RegisterReplicationServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ReplicationServiceServer) error

RegisterReplicationServiceHandlerServer registers the http handlers for service ReplicationService to "mux". UnaryRPC :call ReplicationServiceServer directly. StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterReplicationServiceHandlerFromEndpoint instead.

func RegisterReplicationServiceServer added in v2.146.0

func RegisterReplicationServiceServer(s *grpc.Server, srv ReplicationServiceServer)

func RestoreAccountExport added in v2.189.0

func RestoreAccountExport(ctx context.Context, reader io.Reader, coreAPI ipfs_interface.CoreAPI, odb *BertyOrbitDB, logger *zap.Logger, handlers ...RestoreAccountHandler) error

func SendSecretsToExistingMembers

func SendSecretsToExistingMembers(ctx context.Context, gctx *groupContext, contact crypto.PubKey) <-chan crypto.PubKey

func TagGroupContextPeers added in v2.184.0

func TagGroupContextPeers(ctx context.Context, gc *groupContext, ipfsCoreAPI ipfsutil.ExtendedCoreAPI, weight int)

func WatchNewMembersAndSendSecrets

func WatchNewMembersAndSendSecrets(ctx context.Context, logger *zap.Logger, gctx *groupContext) <-chan crypto.PubKey

Types

type AccountKeys

type AccountKeys interface {
	AccountPrivKey() (crypto.PrivKey, error)
	AccountProofPrivKey() (crypto.PrivKey, error)
	DevicePrivKey() (crypto.PrivKey, error)
	ContactGroupPrivKey(pk crypto.PubKey) (crypto.PrivKey, error)
	MemberDeviceForGroup(g *protocoltypes.Group) (*OwnMemberDevice, error)
}

type AuthTokenIssuer added in v2.136.0

type AuthTokenIssuer struct {
	*AuthTokenVerifier
	// contains filtered or unexported fields
}

func NewAuthTokenIssuer added in v2.136.0

func NewAuthTokenIssuer(secret []byte, sk ed25519.PrivateKey) (*AuthTokenIssuer, error)

func (*AuthTokenIssuer) IssueCode added in v2.136.0

func (r *AuthTokenIssuer) IssueCode(codeChallenge string, services []string) (string, error)

func (*AuthTokenIssuer) IssueToken added in v2.136.0

func (r *AuthTokenIssuer) IssueToken(services []string) (string, error)

type AuthTokenServer added in v2.136.0

type AuthTokenServer struct {
	// contains filtered or unexported fields
}

func NewAuthTokenServer added in v2.136.0

func NewAuthTokenServer(secret []byte, sk ed25519.PrivateKey, services map[string]string, logger *zap.Logger) (*AuthTokenServer, error)

func (*AuthTokenServer) ServeHTTP added in v2.136.0

func (a *AuthTokenServer) ServeHTTP(w http.ResponseWriter, r *http.Request)

type AuthTokenVerifier added in v2.136.0

type AuthTokenVerifier struct {
	// contains filtered or unexported fields
}

func NewAuthTokenVerifier added in v2.136.0

func NewAuthTokenVerifier(secret []byte, pk ed25519.PublicKey) (*AuthTokenVerifier, error)

func (*AuthTokenVerifier) GRPCAuthInterceptor added in v2.136.0

func (r *AuthTokenVerifier) GRPCAuthInterceptor(serviceID string) func(ctx context.Context) (context.Context, error)

func (*AuthTokenVerifier) VerifyCode added in v2.136.0

func (r *AuthTokenVerifier) VerifyCode(code, codeVerifier string) (*protocoltypes.ServicesTokenCode, error)

func (*AuthTokenVerifier) VerifyToken added in v2.136.0

func (r *AuthTokenVerifier) VerifyToken(token, serviceID string) (*protocoltypes.ServicesTokenCode, error)

type BertyOrbitDB

type BertyOrbitDB struct {
	baseorbitdb.BaseOrbitDB
	// contains filtered or unexported fields
}

func NewBertyOrbitDB added in v2.141.0

func NewBertyOrbitDB(ctx context.Context, ipfs coreapi.CoreAPI, options *NewOrbitDBOptions) (*BertyOrbitDB, error)

func (*BertyOrbitDB) SetGroupSigPubKey added in v2.141.0

func (s *BertyOrbitDB) SetGroupSigPubKey(groupID string, pubKey crypto.PubKey) error

SetGroupSigPubKey registers a new group signature pubkey, mainly used to replicate a store data without needing to access to its content

type BertySignedKeyStore added in v2.32.1

type BertySignedKeyStore struct {
	sync.Map
}

func (*BertySignedKeyStore) CreateKey added in v2.32.1

func (s *BertySignedKeyStore) CreateKey(id string) (crypto.PrivKey, error)

func (*BertySignedKeyStore) GetKey added in v2.32.1

func (s *BertySignedKeyStore) GetKey(id string) (crypto.PrivKey, error)

func (*BertySignedKeyStore) HasKey added in v2.32.1

func (s *BertySignedKeyStore) HasKey(id string) (bool, error)

func (*BertySignedKeyStore) SetKey added in v2.32.1

func (s *BertySignedKeyStore) SetKey(pk crypto.PrivKey) error

func (*BertySignedKeyStore) Sign added in v2.32.1

func (s *BertySignedKeyStore) Sign(privKey crypto.PrivKey, bytes []byte) ([]byte, error)

func (*BertySignedKeyStore) Verify added in v2.32.1

func (s *BertySignedKeyStore) Verify(signature []byte, publicKey crypto.PubKey, data []byte) error

type Client

type Client interface {
	protocoltypes.ProtocolServiceClient

	Close() error
}

func NewClient added in v2.39.0

func NewClient(ctx context.Context, svc Service, clientOpts []grpc.DialOption, serverOpts []grpc.ServerOption) (Client, error)

func NewClientFromServer added in v2.39.0

func NewClientFromServer(ctx context.Context, s *grpc.Server, svc Service, opts ...grpc.DialOption) (Client, error)

func TestingClient

func TestingClient(ctx context.Context, t *testing.T, svc Service, clientOpts []grpc.DialOption, serverOpts []grpc.ServerOption) (client Client, cleanup func())

func TestingClientFromServer added in v2.39.0

func TestingClientFromServer(ctx context.Context, t *testing.T, s *grpc.Server, svc Service, dialOpts ...grpc.DialOption) (client Client, cleanup func())

type ConnectTestingProtocolFunc added in v2.266.2

type ConnectTestingProtocolFunc func(*testing.T, libp2p_mocknet.Mocknet)

Connect Peers Helper

type ContextAuthValue added in v2.136.0

type ContextAuthValue uint32

type DeviceKeystore added in v2.32.1

type DeviceKeystore interface {
	AccountPrivKey() (crypto.PrivKey, error)
	AccountProofPrivKey() (crypto.PrivKey, error)
	DevicePrivKey() (crypto.PrivKey, error)
	ContactGroupPrivKey(pk crypto.PubKey) (crypto.PrivKey, error)
	MemberDeviceForGroup(g *protocoltypes.Group) (*ownMemberDevice, error)
	RestoreAccountKeys(accountKey crypto.PrivKey, accountProofKey crypto.PrivKey) error

	AttachmentPrivKey(cid []byte) (crypto.PrivKey, error)
	AttachmentPrivKeyPut(cid []byte, sk crypto.PrivKey) error
	AttachmentSecret(cid []byte) ([]byte, error)
	AttachmentSecretPut(cid []byte, secret []byte) error
	AttachmentSecretSlice(cids [][]byte) ([][]byte, error)
	AttachmentSecretSlicePut(cids, secrets [][]byte) error
}

func NewDeviceKeystore added in v2.32.1

func NewDeviceKeystore(ks keystore.Keystore) DeviceKeystore

New creates a new deviceKeystore instance, if the keystore does not hold an deviceKeystore key, one will be created when required

func NewWithExistingKeys added in v2.32.1

func NewWithExistingKeys(ks keystore.Keystore, sk crypto.PrivKey, proofSK crypto.PrivKey) (DeviceKeystore, error)

NewWithExistingKeys creates a new deviceKeystore instance and registers the supplied secret key, useful when migrating deviceKeystore to another device

type EventMetadataReceived added in v2.66.1

type EventMetadataReceived struct {
	MetaEvent *protocoltypes.GroupMetadataEvent
	Event     proto.Message
}

type GroupOpenMode added in v2.146.0

type GroupOpenMode uint64
const (
	GroupOpenModeUndefined GroupOpenMode = iota
	GroupOpenModeReplicate
	GroupOpenModeWrite
)

type MemberDevice

type MemberDevice struct {
	Member crypto.PubKey
	Device crypto.PubKey
	Secret *protocoltypes.DeviceSecret
}

MemberDevice is a remote device part of a group

type NewOrbitDBOptions added in v2.141.0

type NewOrbitDBOptions struct {
	baseorbitdb.NewOrbitDBOptions
	Datastore       datastore.Batching
	MessageKeystore *messageKeystore
	DeviceKeystore  DeviceKeystore
}

type Opts

type Opts struct {
	Logger                 *zap.Logger
	IpfsCoreAPI            ipfsutil.ExtendedCoreAPI
	DeviceKeystore         DeviceKeystore
	DatastoreDir           string
	RootDatastore          ds.Batching
	OrbitDB                *BertyOrbitDB
	TinderDriver           tinder.Driver
	RendezvousRotationBase time.Duration
	Host                   host.Host
	PubSub                 *pubsub.PubSub
	LocalOnly              bool
	// contains filtered or unexported fields
}

Opts contains optional configuration flags for building a new Client

type OwnMemberDevice

type OwnMemberDevice struct {
	Member crypto.PrivKey
	Device crypto.PrivKey
}

OwnMemberDevice is own local device part of a group

func (*OwnMemberDevice) Public

func (d *OwnMemberDevice) Public() *MemberDevice

type ReplicationClient added in v2.146.0

type ReplicationClient interface {
	ReplicationServiceClient

	Close() error
}

type ReplicationService added in v2.146.0

type ReplicationService interface {
	ReplicationServiceServer

	Close() error
}

Service is the main Berty Protocol interface

func NewReplicationService added in v2.146.0

func NewReplicationService(ctx context.Context, store ds.Datastore, odb *BertyOrbitDB, logger *zap.Logger) (ReplicationService, error)

type ReplicationServiceClient added in v2.146.0

type ReplicationServiceClient interface {
	// ReplicateGroup
	ReplicateGroup(ctx context.Context, in *protocoltypes.ReplicationServiceReplicateGroup_Request, opts ...grpc.CallOption) (*protocoltypes.ReplicationServiceReplicateGroup_Reply, error)
}

ReplicationServiceClient is the client API for ReplicationService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewReplicationServiceClient added in v2.146.0

func NewReplicationServiceClient(cc *grpc.ClientConn) ReplicationServiceClient

type ReplicationServiceServer added in v2.146.0

type ReplicationServiceServer interface {
	// ReplicateGroup
	ReplicateGroup(context.Context, *protocoltypes.ReplicationServiceReplicateGroup_Request) (*protocoltypes.ReplicationServiceReplicateGroup_Reply, error)
}

ReplicationServiceServer is the server API for ReplicationService service.

type RestoreAccountHandler added in v2.200.0

type RestoreAccountHandler struct {
	Handler     func(header *tar.Header, reader *tar.Reader) (bool, error)
	PostProcess func() error
}

type Service added in v2.35.0

type Service interface {
	protocoltypes.ProtocolServiceServer

	Close() error
	Status() Status
	IpfsCoreAPI() ipfs_interface.CoreAPI
}

Service is the main Berty Protocol interface

func New

func New(ctx context.Context, opts Opts) (Service, error)

New initializes a new Service

Example (Basic)
package main

import (
	"context"
	"fmt"

	"berty.tech/berty/v2/go/pkg/bertyprotocol"
	"berty.tech/berty/v2/go/pkg/protocoltypes"
)

func main() {
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	client, err := bertyprotocol.New(ctx, bertyprotocol.Opts{})
	if err != nil {
		panic(err)
	}

	ret, err := client.InstanceGetConfiguration(ctx, &protocoltypes.InstanceGetConfiguration_Request{})
	if err != nil {
		panic(err)
	}

	for _, listener := range ret.Listeners {
		if listener == "/p2p-circuit" {
			fmt.Println(listener)
		}
	}

}
Output:

/p2p-circuit

func TestingService added in v2.39.0

func TestingService(ctx context.Context, t *testing.T, opts Opts) (Service, func())

TestingService returns a configured Client struct with in-memory contexts.

type Status

type Status struct {
	DB       error
	Protocol error
}

Status contains results of status checks

type Swiper added in v2.109.0

type Swiper struct {
	// contains filtered or unexported fields
}

func NewSwiper added in v2.109.0

func NewSwiper(logger *zap.Logger, ps *pubsub.PubSub, interval time.Duration) *Swiper

func (*Swiper) Announce added in v2.109.0

func (s *Swiper) Announce(ctx context.Context, topic, seed []byte)

watch looks for peers providing a resource

func (*Swiper) WatchTopic added in v2.109.0

func (s *Swiper) WatchTopic(ctx context.Context, topic, seed []byte, out chan<- peer.AddrInfo, done func())

WatchTopic looks for peers providing a resource. 'done' is used to alert parent when everything is done, to avoid data races.

type TestingOpts added in v2.39.0

type TestingOpts struct {
	Logger         *zap.Logger
	TracerProvider trace.Provider
	Mocknet        libp2p_mocknet.Mocknet
	RDVPeer        peer.AddrInfo
	DeviceKeystore DeviceKeystore
	CoreAPIMock    ipfsutil.CoreAPIMock
	OrbitDB        *BertyOrbitDB
	ConnectFunc    ConnectTestingProtocolFunc
}

type TestingProtocol added in v2.39.0

type TestingProtocol struct {
	Opts *Opts

	Service Service
	Client  Client
	IPFS    ipfsutil.CoreAPIMock
}

func NewTestingProtocol added in v2.39.0

func NewTestingProtocol(ctx context.Context, t *testing.T, opts *TestingOpts, ds datastore.Batching) (*TestingProtocol, func())

func NewTestingProtocolWithMockedPeers added in v2.122.0

func NewTestingProtocolWithMockedPeers(ctx context.Context, t *testing.T, opts *TestingOpts, ds datastore.Batching, amount int) ([]*TestingProtocol, func())

type TestingReplicationPeer added in v2.146.0

type TestingReplicationPeer struct {
	Service ReplicationService
}

func NewReplicationMockedPeer added in v2.146.0

func NewReplicationMockedPeer(ctx context.Context, t *testing.T, secret []byte, sk ed25519.PublicKey, opts *TestingOpts) (*TestingReplicationPeer, func())

type UnimplementedReplicationServiceServer added in v2.146.0

type UnimplementedReplicationServiceServer struct{}

UnimplementedReplicationServiceServer can be embedded to have forward compatible implementations.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL