communities

package
v0.88.4 Latest Latest
Warning

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

Go to latest
Published: Sep 27, 2021 License: MPL-2.0, MPL-2.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrAlreadyMember = errors.New("already a member")
View Source
var ErrCantRequestAccess = errors.New("can't request access")
View Source
var ErrCategoryAlreadyExists = errors.New("category already exists")
View Source
var ErrCategoryNotFound = errors.New("category not found")
View Source
var ErrChatAlreadyAssigned = errors.New("chat already assigned to a category")
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 ErrInvalidCommunityDescriptionCategoryNoID = errors.New("invalid community category id")
View Source
var ErrInvalidCommunityDescriptionCategoryNoName = errors.New("invalid community category name")
View Source
var ErrInvalidCommunityDescriptionChatIdentity = errors.New("invalid community chat name, missing")
View Source
var ErrInvalidCommunityDescriptionDuplicatedName = errors.New("invalid community chat name, duplicated")
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 ErrInvalidCommunityDescriptionUnknownChatCategory = errors.New("invalid community category in chat")
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 ErrNoChangeInPosition = errors.New("no change in category position")
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) AddRequestToJoin added in v0.83.8

func (o *Community) AddRequestToJoin(request *RequestToJoin)

func (*Community) BanUserFromCommunity added in v0.73.9

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

func (*Community) CanManageUsers added in v0.72.0

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

func (*Community) CanManageUsersPublicKeys added in v0.74.2

func (o *Community) CanManageUsersPublicKeys() ([]*ecdsa.PublicKey, error)

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) Categories added in v0.79.3

func (o *Community) Categories() map[string]*protobuf.CommunityCategory

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) CreateCategory added in v0.79.3

func (o *Community) CreateCategory(categoryID string, categoryName string, chatIDs []string) (*CommunityChanges, error)

func (*Community) CreateChat

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

func (*Community) DefaultFilters added in v0.83.2

func (o *Community) DefaultFilters() []string

func (*Community) DeleteCategory added in v0.79.3

func (o *Community) DeleteCategory(categoryID string) (*CommunityChanges, error)

func (*Community) DeleteChat

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

func (*Community) Description added in v0.76.3

func (o *Community) Description() *protobuf.CommunityDescription

func (*Community) DescriptionText added in v0.83.8

func (o *Community) DescriptionText() string

func (*Community) Edit added in v0.79.0

func (o *Community) Edit(description *protobuf.CommunityDescription)

func (*Community) EditCategory added in v0.79.3

func (o *Community) EditCategory(categoryID string, categoryName string, chatIDs []string) (*CommunityChanges, error)

func (*Community) EditChat added in v0.79.8

func (o *Community) EditChat(chatID string, chat *protobuf.CommunityChat) (*CommunityChanges, 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) IsBanned added in v0.73.9

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

func (*Community) IsMemberAdmin added in v0.74.2

func (o *Community) IsMemberAdmin(publicKey *ecdsa.PublicKey) 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) MarshalPublicAPIJSON added in v0.86.2

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

func (*Community) MarshaledDescription

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

func (*Community) MembersCount added in v0.76.3

func (o *Community) MembersCount() int

func (*Community) Muted added in v0.83.8

func (o *Community) Muted() bool

func (*Community) Name added in v0.74.2

func (o *Community) Name() string

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) ReorderCategories added in v0.79.3

func (o *Community) ReorderCategories(categoryID string, newPosition int) (*CommunityChanges, error)

func (*Community) ReorderChat added in v0.79.3

func (o *Community) ReorderChat(categoryID string, chatID string, newPosition int) (*CommunityChanges, error)

func (*Community) RequestedToJoinAt added in v0.72.0

func (o *Community) RequestedToJoinAt() uint64

func (*Community) RequestsToJoin added in v0.83.8

func (o *Community) RequestsToJoin() []*RequestToJoin

func (*Community) SortCategoryChats added in v0.79.3

func (o *Community) SortCategoryChats(changes *CommunityChanges, categoryID string)

func (*Community) StatusUpdatesChannelID added in v0.83.2

func (o *Community) StatusUpdatesChannelID() string

func (*Community) ToBytes

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

ToBytes returns the community in a wrapped & signed protocol message

func (*Community) ToSyncCommunityProtobuf added in v0.83.8

func (o *Community) ToSyncCommunityProtobuf(clock uint64) (*protobuf.SyncCommunity, error)

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) Verified added in v0.83.8

func (o *Community) Verified() bool

func (*Community) VerifyGrantSignature

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

type CommunityCategory added in v0.79.3

type CommunityCategory struct {
	ID       string `json:"id"`
	Name     string `json:"name"`
	Position int    `json:"position"` // Position is used to sort the categories
}

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"`

	CategoriesRemoved  []string                               `json:"categoriesRemoved"`
	CategoriesAdded    map[string]*protobuf.CommunityCategory `json:"categoriesAdded"`
	CategoriesModified map[string]*protobuf.CommunityCategory `json:"categoriesModified"`

	// 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"`
	Description string                               `json:"description"`
	Members     map[string]*protobuf.CommunityMember `json:"members"`
	Permissions *protobuf.CommunityPermissions       `json:"permissions"`
	CanPost     bool                                 `json:"canPost"`
	Position    int                                  `json:"position"`
	CategoryID  string                               `json:"categoryID"`
}

type CommunityChatChanges

type CommunityChatChanges struct {
	ChatModified     *protobuf.CommunityChat
	MembersAdded     map[string]*protobuf.CommunityMember
	MembersRemoved   map[string]*protobuf.CommunityMember
	CategoryModified string
	PositionModified int
}

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
	Muted                         bool
	Logger                        *zap.Logger
	RequestedToJoinAt             uint64
	RequestsToJoin                []*RequestToJoin
	MemberIdentity                *ecdsa.PublicKey
	SyncedAt                      uint64
}

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) BanUserFromCommunity added in v0.73.9

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

func (*Manager) CanPost

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

func (*Manager) CreateCategory added in v0.79.3

func (m *Manager) CreateCategory(request *requests.CreateCommunityCategory) (*Community, *CommunityChanges, error)

func (*Manager) CreateChat

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

func (*Manager) CreateCommunity

func (m *Manager) CreateCommunity(request *requests.CreateCommunity) (*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) DeleteCategory added in v0.79.3

func (m *Manager) DeleteCategory(request *requests.DeleteCommunityCategory) (*Community, *CommunityChanges, error)

func (*Manager) DeleteChat added in v0.83.8

func (m *Manager) DeleteChat(communityID types.HexBytes, chatID string) (*Community, *protobuf.CommunityDescription, error)

func (*Manager) EditCategory added in v0.79.3

func (m *Manager) EditCategory(request *requests.EditCommunityCategory) (*Community, *CommunityChanges, error)

func (*Manager) EditChat added in v0.79.8

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

func (*Manager) EditCommunity added in v0.79.0

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

CreateCommunity takes a description, updates the community with the description, saves it and returns it

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) GetSyncedRawCommunity added in v0.83.8

func (m *Manager) GetSyncedRawCommunity(id []byte) (*rawCommunityRow, 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) JoinedAndPendingCommunitiesWithRequests added in v0.83.8

func (m *Manager) JoinedAndPendingCommunitiesWithRequests() ([]*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) ReorderCategories added in v0.79.3

func (m *Manager) ReorderCategories(request *requests.ReorderCommunityCategories) (*Community, *CommunityChanges, error)

func (*Manager) ReorderChat added in v0.79.3

func (m *Manager) ReorderChat(request *requests.ReorderCommunityChat) (*Community, *CommunityChanges, error)

func (*Manager) RequestToJoin added in v0.72.0

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

func (*Manager) SaveRequestToJoin added in v0.83.8

func (m *Manager) SaveRequestToJoin(request *RequestToJoin) error

func (*Manager) SetMuted added in v0.81.0

func (m *Manager) SetMuted(id types.HexBytes, muted bool) error

func (*Manager) SetPrivateKey added in v0.83.8

func (m *Manager) SetPrivateKey(id []byte, privKey *ecdsa.PrivateKey) error

func (*Manager) SetSyncClock added in v0.83.8

func (m *Manager) SetSyncClock(id []byte, clock uint64) error

func (*Manager) ShouldHandleSyncCommunity added in v0.83.8

func (m *Manager) ShouldHandleSyncCommunity(community *protobuf.SyncCommunity) (bool, 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) JoinedAndPendingCommunitiesWithRequests added in v0.83.8

func (p *Persistence) JoinedAndPendingCommunitiesWithRequests(memberIdentity *ecdsa.PublicKey) (comms []*Community, err 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) SetMuted added in v0.81.0

func (p *Persistence) SetMuted(communityID []byte, muted bool) error

func (*Persistence) SetPrivateKey added in v0.83.8

func (p *Persistence) SetPrivateKey(id []byte, privKey *ecdsa.PrivateKey) error

func (*Persistence) SetRequestToJoinState added in v0.72.0

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

func (*Persistence) SetSyncClock added in v0.83.8

func (p *Persistence) SetSyncClock(id []byte, clock uint64) error

func (*Persistence) ShouldHandleSyncCommunity added in v0.83.8

func (p *Persistence) ShouldHandleSyncCommunity(community *protobuf.SyncCommunity) (bool, 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       RequestToJoinState `json:"state"`
	Our         bool               `json:"our"`
}

func (*RequestToJoin) CalculateID added in v0.72.0

func (r *RequestToJoin) CalculateID()

func (*RequestToJoin) Empty added in v0.83.8

func (r *RequestToJoin) Empty() bool

func (*RequestToJoin) InitFromSyncProtobuf added in v0.83.8

func (r *RequestToJoin) InitFromSyncProtobuf(proto *protobuf.SyncCommunityRequestsToJoin)

func (*RequestToJoin) ToSyncProtobuf added in v0.83.8

func (r *RequestToJoin) ToSyncProtobuf() *protobuf.SyncCommunityRequestsToJoin

type RequestToJoinState added in v0.83.8

type RequestToJoinState uint
const (
	RequestToJoinStatePending RequestToJoinState = iota + 1
	RequestToJoinStateDeclined
	RequestToJoinStateAccepted
)

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