communities

package
v0.128.2 Latest Latest
Warning

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

Go to latest
Published: Feb 2, 2023 License: MPL-2.0, MPL-2.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const OR = " OR "

Variables

View Source
var ErrAlreadyJoined = errors.New("already joined")
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 ErrInvalidCommunityTags = errors.New("invalid community tags")
View Source
var ErrInvalidGrant = errors.New("invalid grant")
View Source
var ErrInvalidMessage = errors.New("invalid community description message")
View Source
var ErrMemberNotFound = errors.New("member not found")
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 ErrOldRequestToJoin = errors.New("old request to join")
View Source
var ErrOldRequestToLeave = errors.New("old request to leave")
View Source
var ErrOrgNotFound = errors.New("community not found")
View Source
var ErrTorrentTimedout = errors.New("torrent has timed out")

Functions

func CalculateRequestID added in v0.106.3

func CalculateRequestID(publicKey string, communityID types.HexBytes) types.HexBytes

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) AcceptRequestToJoinAutomatically added in v0.103.2

func (o *Community) AcceptRequestToJoinAutomatically() bool

func (*Community) AddMember added in v0.103.2

func (o *Community) AddMember(publicKey *ecdsa.PublicKey, roles []protobuf.CommunityMember_Roles) error

func (*Community) AddRequestToJoin added in v0.83.8

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

func (*Community) AddRoleToMember added in v0.115.5

func (*Community) AllowsAllMembersToPinMessage added in v0.100.0

func (o *Community) AllowsAllMembersToPinMessage() bool

func (*Community) BanUserFromCommunity added in v0.73.9

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

func (*Community) BuildGrant added in v0.103.2

func (o *Community) BuildGrant(key *ecdsa.PublicKey, chatID string) ([]byte, error)

func (*Community) CanDeleteMessageForEveryone added in v0.115.5

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

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) CanMemberIdentityPost added in v0.94.12

func (o *Community) CanMemberIdentityPost(chatID string) (bool, 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) ChatIDs added in v0.97.4

func (o *Community) ChatIDs() (chatIDs []string)

func (*Community) Chats

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

func (*Community) ChatsByCategoryID added in v0.102.6

func (o *Community) ChatsByCategoryID(categoryID string) []string

func (*Community) Clock added in v0.72.0

func (o *Community) Clock() uint64

func (*Community) Color added in v0.101.1

func (o *Community) Color() string

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) Encrypt added in v0.102.2

func (o *Community) Encrypt()

func (*Community) Encrypted added in v0.102.2

func (o *Community) Encrypted() bool

func (*Community) GetMemberPubkeys added in v0.102.2

func (o *Community) GetMemberPubkeys() []*ecdsa.PublicKey

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) Images added in v0.101.1

func (o *Community) Images() map[string]*protobuf.IdentityImage

func (*Community) IntroMessage added in v0.100.1

func (o *Community) IntroMessage() 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) MagnetlinkMessageChannelID added in v0.96.2

func (o *Community) MagnetlinkMessageChannelID() string

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) MemberIdentity added in v0.94.12

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

func (*Community) MemberUpdateChannelID added in v0.103.3

func (o *Community) MemberUpdateChannelID() string

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) OutroMessage added in v0.100.1

func (o *Community) OutroMessage() string

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) RemoveOurselvesFromOrg added in v0.110.2

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

func (*Community) RemoveRoleFromMember added in v0.115.5

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) Spectate added in v0.111.5

func (o *Community) Spectate()

func (*Community) Spectated added in v0.111.5

func (o *Community) Spectated() bool

func (*Community) StatusUpdatesChannelID added in v0.83.2

func (o *Community) StatusUpdatesChannelID() string

func (*Community) Tags added in v0.102.5

func (o *Community) Tags() []CommunityTag

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, communitySettings *CommunitySettings) (*protobuf.SyncCommunity, error)

func (*Community) UnbanUserFromCommunity added in v0.102.6

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

func (*Community) UpdateChatFirstMessageTimestamp added in v0.109.1

func (o *Community) UpdateChatFirstMessageTimestamp(chatID string, timestamp uint32) (*CommunityChanges, 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 CommunityAdminSettings added in v0.100.0

type CommunityAdminSettings struct {
	PinMessageAllMembersEnabled bool `json:"pinMessageAllMembersEnabled"`
}

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"`
	Color       string                               `json:"color"`
	Emoji       string                               `json:"emoji"`
	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
	FirstMessageTimestampModified uint32
}

type CommunityResponse added in v0.72.0

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

type CommunitySettings added in v0.96.4

type CommunitySettings struct {
	CommunityID                  string `json:"communityId"`
	HistoryArchiveSupportEnabled bool   `json:"historyArchiveSupportEnabled"`
	Clock                        uint64 `json:"clock"`
}

type CommunityTag added in v0.102.5

type CommunityTag struct {
	Name  string `json:"name"`
	Emoji string `json:"emoji"`
}

type Config

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

type EncodedArchiveData added in v0.98.1

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

type HistoryArchiveDownloadTask added in v0.117.1

type HistoryArchiveDownloadTask struct {
	CancelChan chan struct{}
	Waiter     sync.WaitGroup

	Cancelled bool
	// contains filtered or unexported fields
}

func (*HistoryArchiveDownloadTask) Cancel added in v0.117.1

func (t *HistoryArchiveDownloadTask) Cancel()

func (*HistoryArchiveDownloadTask) IsCancelled added in v0.125.1

func (t *HistoryArchiveDownloadTask) IsCancelled() bool

type HistoryArchiveDownloadTaskInfo added in v0.117.1

type HistoryArchiveDownloadTaskInfo struct {
	TotalDownloadedArchivesCount int
	TotalArchivesCount           int
	Cancelled                    bool
}

type KnownCommunitiesResponse added in v0.100.1

type KnownCommunitiesResponse struct {
	ContractCommunities []string              `json:"contractCommunities"`
	Descriptions        map[string]*Community `json:"communities"`
	UnknownCommunities  []string              `json:"unknownCommunities"`
}

type Manager

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

func NewManager

func NewManager(identity *ecdsa.PrivateKey, db *sql.DB, encryptor *encryption.Protocol, logger *zap.Logger, verifier *ens.Verifier, transport *transport.Transport, torrentConfig *params.TorrentConfig) (*Manager, error)

func (*Manager) AcceptRequestToJoin added in v0.72.0

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

func (*Manager) AddHistoryArchiveDownloadTask added in v0.117.1

func (m *Manager) AddHistoryArchiveDownloadTask(communityID string, task *HistoryArchiveDownloadTask)

func (*Manager) AddMemberOwnerToCommunity added in v0.115.6

func (m *Manager) AddMemberOwnerToCommunity(communityID types.HexBytes, pk *ecdsa.PublicKey) (*Community, error)

func (*Manager) AddRoleToMember added in v0.115.5

func (m *Manager) AddRoleToMember(request *requests.AddRoleToMember) (*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) CancelRequestToJoin added in v0.114.1

func (m *Manager) CancelRequestToJoin(request *requests.CancelRequestToJoinCommunity) (*RequestToJoin, *Community, error)

func (*Manager) CanceledRequestsToJoinForCommunity added in v0.114.1

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

func (*Manager) CanceledRequestsToJoinForUser added in v0.114.1

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

func (*Manager) CommunitySettingsExist added in v0.96.4

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

func (*Manager) CreateAndSeedHistoryArchive added in v0.98.1

func (m *Manager) CreateAndSeedHistoryArchive(communityID types.HexBytes, topics []types.TopicType, startDate time.Time, endDate time.Time, partition time.Duration, encrypt bool) error

func (*Manager) CreateCategory added in v0.79.3

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

func (*Manager) CreateChat

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

func (*Manager) CreateCommunity

func (m *Manager) CreateCommunity(request *requests.CreateCommunity, publish bool) (*Community, error)

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

func (*Manager) CreateHistoryArchiveTorrent added in v0.98.1

func (m *Manager) CreateHistoryArchiveTorrent(communityID types.HexBytes, msgs []*types.Message, topics []types.TopicType, startDate time.Time, endDate time.Time, partition time.Duration, encrypt bool) ([]string, error)

func (*Manager) CreateHistoryArchiveTorrentFromDB added in v0.113.0

func (m *Manager) CreateHistoryArchiveTorrentFromDB(communityID types.HexBytes, topics []types.TopicType, startDate time.Time, endDate time.Time, partition time.Duration, encrypt bool) ([]string, error)

func (*Manager) CreateHistoryArchiveTorrentFromMessages added in v0.113.0

func (m *Manager) CreateHistoryArchiveTorrentFromMessages(communityID types.HexBytes, messages []*types.Message, topics []types.TopicType, startDate time.Time, endDate time.Time, partition time.Duration, encrypt bool) ([]string, error)

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) DeclinedRequestsToJoinForCommunity added in v0.106.1

func (m *Manager) DeclinedRequestsToJoinForCommunity(id types.HexBytes) ([]*RequestToJoin, 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) DeleteCommunity added in v0.114.1

func (m *Manager) DeleteCommunity(id types.HexBytes) error

func (*Manager) DeleteCommunitySettings added in v0.96.4

func (m *Manager) DeleteCommunitySettings(id types.HexBytes) error

func (*Manager) DeleteHistoryArchiveDownloadTask added in v0.117.3

func (m *Manager) DeleteHistoryArchiveDownloadTask(communityID string)

func (*Manager) DeletedCommunities added in v0.98.3

func (m *Manager) DeletedCommunities() ([]*Community, error)
func (m *Manager) DownloadHistoryArchivesByMagnetlink(communityID types.HexBytes, magnetlink string, cancelTask chan struct{}) (*HistoryArchiveDownloadTaskInfo, 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) EditChatFirstMessageTimestamp added in v0.109.1

func (m *Manager) EditChatFirstMessageTimestamp(communityID types.HexBytes, chatID string, timestamp uint32) (*Community, *CommunityChanges, error)

func (*Manager) EditCommunity added in v0.79.0

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

EditCommunity 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) ExtractMessagesFromHistoryArchive added in v0.125.0

func (m *Manager) ExtractMessagesFromHistoryArchive(communityID types.HexBytes, archiveID string) ([]*protobuf.WakuMessage, error)

func (*Manager) GetAdminCommunitiesChatIDs added in v0.97.4

func (m *Manager) GetAdminCommunitiesChatIDs() (map[string]bool, 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) GetCommunitiesSettings added in v0.96.4

func (m *Manager) GetCommunitiesSettings() ([]CommunitySettings, error)

func (*Manager) GetCommunityChatsFilters added in v0.98.1

func (m *Manager) GetCommunityChatsFilters(communityID types.HexBytes) ([]*transport.Filter, error)

func (*Manager) GetCommunityChatsTopics added in v0.98.1

func (m *Manager) GetCommunityChatsTopics(communityID types.HexBytes) ([]types.TopicType, error)

func (*Manager) GetCommunitySettingsByID added in v0.96.4

func (m *Manager) GetCommunitySettingsByID(id types.HexBytes) (*CommunitySettings, error)

func (*Manager) GetHistoryArchiveDownloadTask added in v0.117.1

func (m *Manager) GetHistoryArchiveDownloadTask(communityID string) *HistoryArchiveDownloadTask
func (m *Manager) GetHistoryArchiveMagnetlink(communityID types.HexBytes) (string, error)

func (*Manager) GetHistoryArchivePartitionStartTimestamp added in v0.98.1

func (m *Manager) GetHistoryArchivePartitionStartTimestamp(communityID types.HexBytes) (uint64, error)

func (*Manager) GetLastMessageArchiveEndDate added in v0.98.1

func (m *Manager) GetLastMessageArchiveEndDate(communityID types.HexBytes) (uint64, error)
func (m *Manager) GetLastSeenMagnetlink(communityID types.HexBytes) (string, error)

func (*Manager) GetLatestWakuMessageTimestamp added in v0.98.1

func (m *Manager) GetLatestWakuMessageTimestamp(topics []types.TopicType) (uint64, error)

func (*Manager) GetMagnetlinkMessageClock added in v0.98.1

func (m *Manager) GetMagnetlinkMessageClock(communityID types.HexBytes) (uint64, error)

func (*Manager) GetMessageArchiveIDsToImport added in v0.117.1

func (m *Manager) GetMessageArchiveIDsToImport(communityID types.HexBytes) ([]string, error)

func (*Manager) GetOldestWakuMessageTimestamp added in v0.98.1

func (m *Manager) GetOldestWakuMessageTimestamp(topics []types.TopicType) (uint64, error)

func (*Manager) GetRequestToJoin added in v0.103.2

func (m *Manager) GetRequestToJoin(ID types.HexBytes) (*RequestToJoin, error)

func (*Manager) GetRequestToJoinIDByPkAndCommunityID added in v0.113.0

func (m *Manager) GetRequestToJoinIDByPkAndCommunityID(pk *ecdsa.PublicKey, communityID []byte) ([]byte, error)

func (*Manager) GetStoredDescriptionForCommunities added in v0.100.1

func (m *Manager) GetStoredDescriptionForCommunities(communityIDs []types.HexBytes) (response *KnownCommunitiesResponse, err error)

func (*Manager) GetSyncedRawCommunity added in v0.83.8

func (m *Manager) GetSyncedRawCommunity(id []byte) (*RawCommunityRow, error)

func (*Manager) HandleCommunityCancelRequestToJoin added in v0.114.1

func (m *Manager) HandleCommunityCancelRequestToJoin(signer *ecdsa.PublicKey, request *protobuf.CommunityCancelRequestToJoin) (*RequestToJoin, 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) HandleCommunityRequestToJoinResponse added in v0.103.2

func (m *Manager) HandleCommunityRequestToJoinResponse(signer *ecdsa.PublicKey, request *protobuf.CommunityRequestToJoinResponse) error

func (*Manager) HandleCommunityRequestToLeave added in v0.106.3

func (m *Manager) HandleCommunityRequestToLeave(signer *ecdsa.PublicKey, proto *protobuf.CommunityRequestToLeave) error

func (*Manager) HandleSyncCommunitySettings added in v0.102.2

func (m *Manager) HandleSyncCommunitySettings(syncCommunitySettings *protobuf.SyncCommunitySettings) (*CommunitySettings, 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) IsAdminCommunity added in v0.100.0

func (m *Manager) IsAdminCommunity(pubKey *ecdsa.PublicKey) (bool, error)

func (*Manager) IsAdminCommunityByID added in v0.106.3

func (m *Manager) IsAdminCommunityByID(communityID types.HexBytes) (bool, error)

func (*Manager) IsEncrypted added in v0.102.2

func (m *Manager) IsEncrypted(communityID string) (bool, error)

func (*Manager) IsJoinedCommunity added in v0.100.0

func (m *Manager) IsJoinedCommunity(pubKey *ecdsa.PublicKey) (bool, error)

func (*Manager) IsSeedingHistoryArchiveTorrent added in v0.98.1

func (m *Manager) IsSeedingHistoryArchiveTorrent(communityID types.HexBytes) bool

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) LoadHistoryArchiveIndexFromFile added in v0.100.0

func (m *Manager) LoadHistoryArchiveIndexFromFile(myKey *ecdsa.PrivateKey, communityID types.HexBytes) (*protobuf.WakuMessageArchiveIndex, error)

func (*Manager) LogStdout added in v0.111.5

func (m *Manager) LogStdout(msg string, fields ...zap.Field)

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) RemoveRoleFromMember added in v0.115.5

func (m *Manager) RemoveRoleFromMember(request *requests.RemoveRoleFromMember) (*Community, 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) SaveCommunitySettings added in v0.96.4

func (m *Manager) SaveCommunitySettings(settings CommunitySettings) error

func (*Manager) SaveRequestToJoin added in v0.83.8

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

func (*Manager) SeedHistoryArchiveTorrent added in v0.98.1

func (m *Manager) SeedHistoryArchiveTorrent(communityID types.HexBytes) error

func (*Manager) SetMessageArchiveIDImported added in v0.117.1

func (m *Manager) SetMessageArchiveIDImported(communityID types.HexBytes, hash string, imported bool) 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) SetTorrentConfig added in v0.98.1

func (m *Manager) SetTorrentConfig(config *params.TorrentConfig)

func (*Manager) ShouldHandleSyncCommunity added in v0.83.8

func (m *Manager) ShouldHandleSyncCommunity(community *protobuf.SyncCommunity) (bool, error)

func (*Manager) ShouldHandleSyncCommunitySettings added in v0.102.2

func (m *Manager) ShouldHandleSyncCommunitySettings(communitySettings *protobuf.SyncCommunitySettings) (bool, error)

func (*Manager) SpectateCommunity added in v0.111.5

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

func (*Manager) Spectated added in v0.111.5

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

func (*Manager) Start added in v0.72.0

func (m *Manager) Start() error

func (*Manager) StartHistoryArchiveTasksInterval added in v0.98.1

func (m *Manager) StartHistoryArchiveTasksInterval(community *Community, interval time.Duration)

func (*Manager) StartTorrentClient added in v0.98.1

func (m *Manager) StartTorrentClient() error

func (*Manager) Stop

func (m *Manager) Stop() error

func (*Manager) StopHistoryArchiveTasksInterval added in v0.98.1

func (m *Manager) StopHistoryArchiveTasksInterval(communityID types.HexBytes)

func (*Manager) StopHistoryArchiveTasksIntervals added in v0.98.1

func (m *Manager) StopHistoryArchiveTasksIntervals()

func (*Manager) StopTorrentClient added in v0.98.1

func (m *Manager) StopTorrentClient() []error

func (*Manager) StoreWakuMessage added in v0.97.4

func (m *Manager) StoreWakuMessage(message *types.Message) error

func (*Manager) StoreWakuMessages added in v0.114.1

func (m *Manager) StoreWakuMessages(messages []*types.Message) error

func (*Manager) Subscribe

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

func (*Manager) TorrentClientStarted added in v0.98.1

func (m *Manager) TorrentClientStarted() bool

func (*Manager) TorrentFileExists added in v0.110.2

func (m *Manager) TorrentFileExists(communityID string) bool

func (*Manager) UnbanUserFromCommunity added in v0.102.6

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

func (*Manager) UnseedHistoryArchiveTorrent added in v0.98.1

func (m *Manager) UnseedHistoryArchiveTorrent(communityID types.HexBytes)

func (*Manager) UpdateCommunityDescriptionMagnetlinkMessageClock added in v0.98.1

func (m *Manager) UpdateCommunityDescriptionMagnetlinkMessageClock(communityID types.HexBytes, clock uint64) error

func (*Manager) UpdateCommunitySettings added in v0.96.4

func (m *Manager) UpdateCommunitySettings(settings CommunitySettings) error
func (m *Manager) UpdateLastSeenMagnetlink(communityID types.HexBytes, magnetlinkURI string) error

func (*Manager) UpdateMagnetlinkMessageClock added in v0.98.1

func (m *Manager) UpdateMagnetlinkMessageClock(communityID types.HexBytes, clock uint64) error

type Persistence

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

func (*Persistence) AllCommunities

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

func (*Persistence) CanceledRequestsToJoinForCommunity added in v0.114.1

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

func (*Persistence) CanceledRequestsToJoinForUser added in v0.114.1

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

func (*Persistence) CommunitySettingsExist added in v0.96.4

func (p *Persistence) CommunitySettingsExist(communityID types.HexBytes) (bool, error)

func (*Persistence) CreatedCommunities

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

func (*Persistence) DeclinedRequestsToJoinForCommunity added in v0.106.1

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

func (*Persistence) DeleteCommunity added in v0.114.1

func (p *Persistence) DeleteCommunity(id types.HexBytes) error

func (*Persistence) DeleteCommunitySettings added in v0.96.4

func (p *Persistence) DeleteCommunitySettings(communityID types.HexBytes) error

func (*Persistence) DeletedCommunities added in v0.98.3

func (p *Persistence) DeletedCommunities(memberIdentity *ecdsa.PublicKey) (comms []*Community, err error)

func (*Persistence) GetByID

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

func (*Persistence) GetCommunitiesSettings added in v0.96.4

func (p *Persistence) GetCommunitiesSettings() ([]CommunitySettings, error)

func (*Persistence) GetCommunityChatIDs added in v0.98.1

func (p *Persistence) GetCommunityChatIDs(communityID types.HexBytes) ([]string, error)

func (*Persistence) GetCommunitySettingsByID added in v0.96.4

func (p *Persistence) GetCommunitySettingsByID(communityID types.HexBytes) (*CommunitySettings, error)

func (*Persistence) GetDownloadedMessageArchiveIDs added in v0.117.1

func (p *Persistence) GetDownloadedMessageArchiveIDs(communityID types.HexBytes) ([]string, error)

func (*Persistence) GetLastMessageArchiveEndDate added in v0.98.1

func (p *Persistence) GetLastMessageArchiveEndDate(communityID types.HexBytes) (uint64, error)
func (p *Persistence) GetLastSeenMagnetlink(communityID types.HexBytes) (string, error)

func (*Persistence) GetLatestWakuMessageTimestamp added in v0.98.1

func (p *Persistence) GetLatestWakuMessageTimestamp(topics []types.TopicType) (uint64, error)

func (*Persistence) GetMagnetlinkMessageClock added in v0.98.1

func (p *Persistence) GetMagnetlinkMessageClock(communityID types.HexBytes) (uint64, error)

func (*Persistence) GetMessageArchiveIDsToImport added in v0.117.1

func (p *Persistence) GetMessageArchiveIDsToImport(communityID types.HexBytes) ([]string, error)

func (*Persistence) GetOldestWakuMessageTimestamp added in v0.98.1

func (p *Persistence) GetOldestWakuMessageTimestamp(topics []types.TopicType) (uint64, error)

func (*Persistence) GetRequestToJoin added in v0.72.0

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

func (*Persistence) GetRequestToJoinByPk added in v0.114.1

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

func (*Persistence) GetRequestToJoinIDByPkAndCommunityID added in v0.113.0

func (p *Persistence) GetRequestToJoinIDByPkAndCommunityID(pk string, communityID []byte) ([]byte, error)

func (*Persistence) GetWakuMessagesByFilterTopic added in v0.98.1

func (p *Persistence) GetWakuMessagesByFilterTopic(topics []types.TopicType, from uint64, to uint64) ([]types.Message, error)

func (*Persistence) HasCommunityArchiveInfo added in v0.100.0

func (p *Persistence) HasCommunityArchiveInfo(communityID types.HexBytes) (exists bool, err error)

func (*Persistence) HasMessageArchiveID added in v0.100.0

func (p *Persistence) HasMessageArchiveID(communityID types.HexBytes, hash string) (exists bool, err 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) RequestsToJoinForCommunityWithState added in v0.106.1

func (p *Persistence) RequestsToJoinForCommunityWithState(id []byte, state RequestToJoinState) ([]*RequestToJoin, error)

func (*Persistence) SaveCommunity

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

func (*Persistence) SaveCommunityArchiveInfo added in v0.100.0

func (p *Persistence) SaveCommunityArchiveInfo(communityID types.HexBytes, clock uint64, lastArchiveEndDate uint64) error

func (*Persistence) SaveCommunitySettings added in v0.96.4

func (p *Persistence) SaveCommunitySettings(communitySettings CommunitySettings) error

func (*Persistence) SaveLastMessageArchiveEndDate added in v0.98.1

func (p *Persistence) SaveLastMessageArchiveEndDate(communityID types.HexBytes, endDate uint64) error

func (*Persistence) SaveMessageArchiveID added in v0.100.0

func (p *Persistence) SaveMessageArchiveID(communityID types.HexBytes, hash string) error

func (*Persistence) SaveRequestToJoin added in v0.72.0

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

func (*Persistence) SaveRequestToLeave added in v0.106.3

func (p *Persistence) SaveRequestToLeave(request *RequestToLeave) error

func (*Persistence) SaveWakuMessage added in v0.97.4

func (p *Persistence) SaveWakuMessage(message *types.Message) error

func (*Persistence) SaveWakuMessages added in v0.111.5

func (p *Persistence) SaveWakuMessages(messages []*types.Message) (err error)

func (*Persistence) SetMessageArchiveIDImported added in v0.117.1

func (p *Persistence) SetMessageArchiveIDImported(communityID types.HexBytes, hash string, imported bool) 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)

func (*Persistence) ShouldHandleSyncCommunitySettings added in v0.102.2

func (p *Persistence) ShouldHandleSyncCommunitySettings(settings *protobuf.SyncCommunitySettings) (bool, error)

func (*Persistence) SpectatedCommunities added in v0.111.5

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

func (*Persistence) UpdateCommunitySettings added in v0.96.4

func (p *Persistence) UpdateCommunitySettings(communitySettings CommunitySettings) error

func (*Persistence) UpdateLastMessageArchiveEndDate added in v0.98.1

func (p *Persistence) UpdateLastMessageArchiveEndDate(communityID types.HexBytes, endDate uint64) error
func (p *Persistence) UpdateLastSeenMagnetlink(communityID types.HexBytes, magnetlinkURI string) error

func (*Persistence) UpdateMagnetlinkMessageClock added in v0.98.1

func (p *Persistence) UpdateMagnetlinkMessageClock(communityID types.HexBytes, clock uint64) error

type RawCommunityRow added in v0.97.4

type RawCommunityRow struct {
	ID          []byte
	PrivateKey  []byte
	Description []byte
	Joined      bool
	Spectated   bool
	Verified    bool
	SyncedAt    uint64
	Muted       bool
}

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
	RequestToJoinStateCanceled
)

type RequestToLeave added in v0.106.3

type RequestToLeave struct {
	ID          types.HexBytes `json:"id"`
	PublicKey   string         `json:"publicKey"`
	Clock       uint64         `json:"clock"`
	CommunityID types.HexBytes `json:"communityId"`
}

func NewRequestToLeave added in v0.106.3

func NewRequestToLeave(publicKey string, protobuf *protobuf.CommunityRequestToLeave) *RequestToLeave

type Subscription

type Subscription struct {
	Community                                *Community
	Invitations                              []*protobuf.CommunityInvitation
	CreatingHistoryArchivesSignal            *signal.CreatingHistoryArchivesSignal
	HistoryArchivesCreatedSignal             *signal.HistoryArchivesCreatedSignal
	NoHistoryArchivesCreatedSignal           *signal.NoHistoryArchivesCreatedSignal
	HistoryArchivesSeedingSignal             *signal.HistoryArchivesSeedingSignal
	HistoryArchivesUnseededSignal            *signal.HistoryArchivesUnseededSignal
	HistoryArchiveDownloadedSignal           *signal.HistoryArchiveDownloadedSignal
	DownloadingHistoryArchivesStartedSignal  *signal.DownloadingHistoryArchivesStartedSignal
	DownloadingHistoryArchivesFinishedSignal *signal.DownloadingHistoryArchivesFinishedSignal
	ImportingHistoryArchiveMessagesSignal    *signal.ImportingHistoryArchiveMessagesSignal
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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