communities

package
v0.73.4 Latest Latest
Warning

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

Go to latest
Published: Mar 15, 2021 License: MPL-2.0, MPL-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	RequestToJoinStatePending uint = iota + 1
	RequestToJoinStateDeclined
	RequestToJoinStateAccepted
)

Variables

View Source
var ErrAlreadyMember = errors.New("already a member")
View Source
var ErrCantRequestAccess = errors.New("can't request access")
View Source
var ErrChatAlreadyExists = errors.New("chat already exists")
View Source
var ErrChatNotFound = errors.New("chat not found")
View Source
var ErrInvalidCommunityDescription = errors.New("invalid community description")
View Source
var ErrInvalidCommunityDescriptionMemberInChatButNotInOrg = errors.New("invalid community description member in chat but not in org")
View Source
var ErrInvalidCommunityDescriptionNoChatPermissions = errors.New("invalid community description no chat permissions")
View Source
var ErrInvalidCommunityDescriptionNoOrgPermissions = errors.New("invalid community description no org permissions")
View Source
var ErrInvalidCommunityDescriptionUnknownChatAccess = errors.New("invalid community description unknown chat access")
View Source
var ErrInvalidCommunityDescriptionUnknownOrgAccess = errors.New("invalid community description unknown org access")
View Source
var ErrInvalidGrant = errors.New("invalid grant")
View Source
var ErrInvalidMessage = errors.New("invalid community description message")
View Source
var ErrNotAdmin = errors.New("no admin privileges for this community")
View Source
var ErrNotAuthorized = errors.New("not authorized")
View Source
var ErrOrgNotFound = errors.New("community not found")

Functions

func ValidateCommunityDescription

func ValidateCommunityDescription(desc *protobuf.CommunityDescription) error

Types

type Community

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

func New

func New(config Config) (*Community, error)

func (*Community) CanManageUsers added in v0.72.0

func (o *Community) CanManageUsers(pk *ecdsa.PublicKey) bool

func (*Community) CanPost

func (o *Community) CanPost(pk *ecdsa.PublicKey, chatID string, grantBytes []byte) (bool, error)

func (*Community) CanRequestAccess added in v0.72.0

func (o *Community) CanRequestAccess(pk *ecdsa.PublicKey) bool

func (*Community) Chats

func (o *Community) Chats() map[string]*protobuf.CommunityChat

func (*Community) Clock added in v0.72.0

func (o *Community) Clock() uint64

func (*Community) CreateChat

func (o *Community) CreateChat(chatID string, chat *protobuf.CommunityChat) (*CommunityChanges, error)

func (*Community) DeleteChat

func (o *Community) DeleteChat(chatID string) (*protobuf.CommunityDescription, error)

func (*Community) HasMember

func (o *Community) HasMember(pk *ecdsa.PublicKey) bool

func (*Community) ID

func (o *Community) ID() types.HexBytes

func (*Community) IDString

func (o *Community) IDString() string

func (*Community) InvitationOnly added in v0.72.0

func (o *Community) InvitationOnly() bool

func (*Community) InviteUserToChat

func (o *Community) InviteUserToChat(pk *ecdsa.PublicKey, chatID string) (*protobuf.CommunityInvitation, error)

func (*Community) InviteUserToOrg

func (o *Community) InviteUserToOrg(pk *ecdsa.PublicKey) (*protobuf.CommunityInvitation, error)

func (*Community) IsAdmin

func (o *Community) IsAdmin() bool

func (*Community) IsMemberInChat

func (o *Community) IsMemberInChat(pk *ecdsa.PublicKey, chatID string) bool

func (*Community) Join

func (o *Community) Join()

func (*Community) Joined

func (o *Community) Joined() bool

func (*Community) Leave

func (o *Community) Leave()

func (*Community) MarshalJSON

func (o *Community) MarshalJSON() ([]byte, error)

func (*Community) MarshaledDescription

func (o *Community) MarshaledDescription() ([]byte, error)

func (*Community) OnRequest added in v0.72.0

func (o *Community) OnRequest() bool

func (*Community) PrivateKey

func (o *Community) PrivateKey() *ecdsa.PrivateKey

func (*Community) PublicKey added in v0.72.0

func (o *Community) PublicKey() *ecdsa.PublicKey

func (*Community) RemoveUserFromChat

func (o *Community) RemoveUserFromChat(pk *ecdsa.PublicKey, chatID string) (*protobuf.CommunityDescription, error)

func (*Community) RemoveUserFromOrg

func (o *Community) RemoveUserFromOrg(pk *ecdsa.PublicKey) (*protobuf.CommunityDescription, error)

func (*Community) RequestedToJoinAt added in v0.72.0

func (o *Community) RequestedToJoinAt() uint64

func (*Community) ToBytes

func (o *Community) ToBytes() ([]byte, error)

ToBytes returns the community in a wrapped & signed protocol message

func (*Community) UpdateCommunityDescription added in v0.72.0

func (o *Community) UpdateCommunityDescription(signer *ecdsa.PublicKey, description *protobuf.CommunityDescription, rawMessage []byte) (*CommunityChanges, error)

UpdateCommunityDescription will update the community to the new community description and return a list of changes

func (*Community) ValidateRequestToJoin added in v0.72.0

func (o *Community) ValidateRequestToJoin(signer *ecdsa.PublicKey, request *protobuf.CommunityRequestToJoin) error

ValidateRequestToJoin validates a request, checks that the right permissions are applied

func (*Community) VerifyGrantSignature

func (o *Community) VerifyGrantSignature(data []byte) (*protobuf.Grant, error)

type CommunityChanges

type CommunityChanges struct {
	Community      *Community                           `json:"community"`
	MembersAdded   map[string]*protobuf.CommunityMember `json:"membersAdded"`
	MembersRemoved map[string]*protobuf.CommunityMember `json:"membersRemoved"`

	ChatsRemoved  map[string]*protobuf.CommunityChat `json:"chatsRemoved"`
	ChatsAdded    map[string]*protobuf.CommunityChat `json:"chatsAdded"`
	ChatsModified map[string]*CommunityChatChanges   `json:"chatsModified"`

	// ShouldMemberJoin indicates whether the user should join this community
	// automatically
	ShouldMemberJoin bool `json:"memberAdded"`

	// ShouldMemberJoin indicates whether the user should leave this community
	// automatically
	ShouldMemberLeave bool `json:"memberRemoved"`
}

func (*CommunityChanges) HasMemberLeft added in v0.72.0

func (c *CommunityChanges) HasMemberLeft(identity string) bool

func (*CommunityChanges) HasNewMember added in v0.72.0

func (c *CommunityChanges) HasNewMember(identity string) bool

type CommunityChat added in v0.72.0

type CommunityChat struct {
	ID          string                               `json:"id"`
	Name        string                               `json:"name"`
	Members     map[string]*protobuf.CommunityMember `json:"members"`
	Permissions *protobuf.CommunityPermissions       `json:"permissions"`
	CanPost     bool                                 `json:"canPost"`
}

type CommunityChatChanges

type CommunityChatChanges struct {
	MembersAdded   map[string]*protobuf.CommunityMember
	MembersRemoved map[string]*protobuf.CommunityMember
}

type CommunityResponse added in v0.72.0

type CommunityResponse struct {
	Community *Community        `json:"community"`
	Changes   *CommunityChanges `json:"changes"`
}

type Config

type Config struct {
	PrivateKey                    *ecdsa.PrivateKey
	CommunityDescription          *protobuf.CommunityDescription
	MarshaledCommunityDescription []byte
	ID                            *ecdsa.PublicKey
	Joined                        bool
	Requested                     bool
	Verified                      bool
	Logger                        *zap.Logger
	RequestedToJoinAt             uint64
	MemberIdentity                *ecdsa.PublicKey
}

type Manager

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

func NewManager

func NewManager(identity *ecdsa.PublicKey, db *sql.DB, logger *zap.Logger, verifier *ens.Verifier) (*Manager, error)

func (*Manager) AcceptRequestToJoin added in v0.72.0

func (m *Manager) AcceptRequestToJoin(request *requests.AcceptRequestToJoinCommunity) (*Community, error)

func (*Manager) All

func (m *Manager) All() ([]*Community, error)

func (*Manager) CanPost

func (m *Manager) CanPost(pk *ecdsa.PublicKey, communityID string, chatID string, grant []byte) (bool, error)

func (*Manager) CreateChat

func (m *Manager) CreateChat(communityID types.HexBytes, chat *protobuf.CommunityChat) (*Community, *CommunityChanges, error)

func (*Manager) CreateCommunity

func (m *Manager) CreateCommunity(description *protobuf.CommunityDescription) (*Community, error)

CreateCommunity takes a description, generates an ID for it, saves it and return it

func (*Manager) Created

func (m *Manager) Created() ([]*Community, error)

func (*Manager) DeclineRequestToJoin added in v0.72.0

func (m *Manager) DeclineRequestToJoin(request *requests.DeclineRequestToJoinCommunity) error

func (*Manager) ExportCommunity

func (m *Manager) ExportCommunity(id types.HexBytes) (*ecdsa.PrivateKey, error)

func (*Manager) GetByID added in v0.72.0

func (m *Manager) GetByID(id []byte) (*Community, error)

func (*Manager) GetByIDString

func (m *Manager) GetByIDString(idString string) (*Community, error)

func (*Manager) HandleCommunityDescriptionMessage

func (m *Manager) HandleCommunityDescriptionMessage(signer *ecdsa.PublicKey, description *protobuf.CommunityDescription, payload []byte) (*CommunityResponse, error)

func (*Manager) HandleCommunityInvitation

func (m *Manager) HandleCommunityInvitation(signer *ecdsa.PublicKey, invitation *protobuf.CommunityInvitation, payload []byte) (*CommunityResponse, error)

TODO: This is not fully implemented, we want to save the grant passed at this stage and make sure it's used when publishing.

func (*Manager) HandleCommunityRequestToJoin added in v0.72.0

func (m *Manager) HandleCommunityRequestToJoin(signer *ecdsa.PublicKey, request *protobuf.CommunityRequestToJoin) (*RequestToJoin, error)

func (*Manager) HandleWrappedCommunityDescriptionMessage

func (m *Manager) HandleWrappedCommunityDescriptionMessage(payload []byte) (*CommunityResponse, error)

func (*Manager) ImportCommunity

func (m *Manager) ImportCommunity(key *ecdsa.PrivateKey) (*Community, error)

func (*Manager) InviteUsersToCommunity added in v0.72.0

func (m *Manager) InviteUsersToCommunity(communityID types.HexBytes, pks []*ecdsa.PublicKey) (*Community, error)

func (*Manager) JoinCommunity

func (m *Manager) JoinCommunity(id types.HexBytes) (*Community, error)

func (*Manager) Joined

func (m *Manager) Joined() ([]*Community, error)

func (*Manager) LeaveCommunity

func (m *Manager) LeaveCommunity(id types.HexBytes) (*Community, error)

func (*Manager) PendingRequestsToJoinForCommunity added in v0.72.0

func (m *Manager) PendingRequestsToJoinForCommunity(id types.HexBytes) ([]*RequestToJoin, error)

func (*Manager) PendingRequestsToJoinForUser added in v0.72.0

func (m *Manager) PendingRequestsToJoinForUser(pk *ecdsa.PublicKey) ([]*RequestToJoin, error)

func (*Manager) RemoveUserFromCommunity

func (m *Manager) RemoveUserFromCommunity(id types.HexBytes, pk *ecdsa.PublicKey) (*Community, error)

func (*Manager) RequestToJoin added in v0.72.0

func (m *Manager) RequestToJoin(requester *ecdsa.PublicKey, request *requests.RequestToJoinCommunity) (*Community, *RequestToJoin, error)

func (*Manager) Start added in v0.72.0

func (m *Manager) Start() error

func (*Manager) Stop

func (m *Manager) Stop() error

func (*Manager) Subscribe

func (m *Manager) Subscribe() chan *Subscription

type Persistence

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

func (*Persistence) AllCommunities

func (p *Persistence) AllCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error)

func (*Persistence) CreatedCommunities

func (p *Persistence) CreatedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error)

func (*Persistence) GetByID

func (p *Persistence) GetByID(memberIdentity *ecdsa.PublicKey, id []byte) (*Community, error)

func (*Persistence) GetRequestToJoin added in v0.72.0

func (p *Persistence) GetRequestToJoin(id []byte) (*RequestToJoin, error)

func (*Persistence) HasPendingRequestsToJoinForUserAndCommunity added in v0.72.0

func (p *Persistence) HasPendingRequestsToJoinForUserAndCommunity(userPk string, communityID []byte) (bool, error)

func (*Persistence) JoinedCommunities

func (p *Persistence) JoinedCommunities(memberIdentity *ecdsa.PublicKey) ([]*Community, error)

func (*Persistence) PendingRequestsToJoinForCommunity added in v0.72.0

func (p *Persistence) PendingRequestsToJoinForCommunity(id []byte) ([]*RequestToJoin, error)

func (*Persistence) PendingRequestsToJoinForUser added in v0.72.0

func (p *Persistence) PendingRequestsToJoinForUser(pk string) ([]*RequestToJoin, error)

func (*Persistence) SaveCommunity

func (p *Persistence) SaveCommunity(community *Community) error

func (*Persistence) SaveRequestToJoin added in v0.72.0

func (p *Persistence) SaveRequestToJoin(request *RequestToJoin) (err error)

func (*Persistence) SetRequestToJoinState added in v0.72.0

func (p *Persistence) SetRequestToJoinState(pk string, communityID []byte, state uint) error

type RequestToJoin added in v0.72.0

type RequestToJoin struct {
	ID          types.HexBytes `json:"id"`
	PublicKey   string         `json:"publicKey"`
	Clock       uint64         `json:"clock"`
	ENSName     string         `json:"ensName,omitempty"`
	ChatID      string         `json:"chatId"`
	CommunityID types.HexBytes `json:"communityId"`
	State       uint           `json:"state"`
	Our         bool           `json:"our"`
}

func (*RequestToJoin) CalculateID added in v0.72.0

func (r *RequestToJoin) CalculateID()

type Subscription

type Subscription struct {
	Community   *Community
	Invitations []*protobuf.CommunityInvitation
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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