groupsv2

package
v1.1.23 Latest Latest
Warning

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

Go to latest
Published: Apr 25, 2024 License: GPL-3.0 Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	GROUPSV2_CREDENTIAL = "/v1/certificate/group/%d/%d"
	GROUPSV2_TOKEN      = "/v1/groups/token"
)
View Source
const (
	HIGHEST_KNOWN_EPOCH = 1
	GROUPSV2_GROUP      = "/v1/groups/"
	GROUPSV2_GROUP_JOIN = "/v1/groups/join/%s"
)
View Source
const (
	GroupV2JoinsStatusMember  = 0
	GroupV2JoinsStatusInvite  = 1
	GroupV2JoinsStatusRequest = 2
	GroupV2JoinsStatusRemoved = 3
)

Variables

View Source
var INVITE_LINK_PASSWORD_SIZE_BYTES = 16

Functions

func CreateGroupChangeFromGroupActions

func CreateGroupChangeFromGroupActions(actions []byte) []byte

func CreatePromotePendingMemberAction

func CreatePromotePendingMemberAction(uuid []byte, group string) []byte

func GetGroupAuthCredentials

func GetGroupAuthCredentials(startDay int64, endDay int64) error

func GetGroupExternalCredential

func GetGroupExternalCredential(credential *GroupCredential) (*signalservice.GroupExternalCredential, error)

func GetGroupV2MembersForGroup

func GetGroupV2MembersForGroup(group string) ([]*signalservice.DecryptedMember, error)

func GetMemberPendingAdminApproval

func GetMemberPendingAdminApproval(user *entities.GroupUser, group *GroupV2) *signalservice.DecryptedRequestingMember

func GetMemberPendingProfileKey

func GetMemberPendingProfileKey(user *entities.GroupUser, group *GroupV2) *signalservice.DecryptedPendingMember

func GetSourceMember

func GetSourceMember(user *entities.GroupUser, group *GroupV2) *signalservice.DecryptedMember

func GroupInviteLinkUrl

func GroupInviteLinkUrl()

func GroupLinkPassword

func GroupLinkPassword()

func HexToUUID

func HexToUUID(id string) string

func IsAccessRequiredOneOf

func IsAccessRequiredOneOf(valueToTest signalservice.AccessControl_AccessRequired, acceptableValues ...signalservice.AccessControl_AccessRequired) bool

func IsMember

func IsMember(user *entities.GroupUser, group *GroupV2) bool

func IsMemberPendingAdminApproval

func IsMemberPendingAdminApproval(user *entities.GroupUser, group *GroupV2) bool

func IsMemberPendingProfileKey

func IsMemberPendingProfileKey(user *entities.GroupUser, group *GroupV2) bool

func PatchGroupV2

func PatchGroupV2(out []byte,
	groupsV2Authorization *GroupsV2Authorization) error

func SetupGroups

func SetupGroups(path string) error

Types

type GroupChangeApplicator

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

func NewGroupChangeApplicator

func NewGroupChangeApplicator(g *GroupValidator) *GroupChangeApplicator

func (*GroupChangeApplicator) ApplyAddMembers

func (g *GroupChangeApplicator) ApplyAddMembers(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	addMembers []*signalservice.GroupChange_Actions_AddMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyAddMembersPendingAdminApproval

func (g *GroupChangeApplicator) ApplyAddMembersPendingAdminApproval(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	actions []*signalservice.GroupChange_Actions_AddRequestingMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyAddMembersPendingProfileKeys

func (g *GroupChangeApplicator) ApplyAddMembersPendingProfileKeys(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	addMembersPendingProfileKeys []*signalservice.GroupChange_Actions_AddPendingMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyDeleteMembers

func (g *GroupChangeApplicator) ApplyDeleteMembers(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	deleteMembers []*signalservice.GroupChange_Actions_DeleteMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyDeleteMembersPendingAdminApproval

func (g *GroupChangeApplicator) ApplyDeleteMembersPendingAdminApproval(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	actions []*signalservice.GroupChange_Actions_DeleteRequestingMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyDeleteMembersPendingProfileKey

func (g *GroupChangeApplicator) ApplyDeleteMembersPendingProfileKey(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	deleteMembersPendingProfileKeys []*signalservice.GroupChange_Actions_DeletePendingMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyAddFromInviteLinkAccess

func (g *GroupChangeApplicator) ApplyModifyAddFromInviteLinkAccess(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	action *signalservice.GroupChange_Actions_ModifyAddFromInviteLinkAccessControlAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyAnnouncementsOnly

func (g *GroupChangeApplicator) ApplyModifyAnnouncementsOnly(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	action *signalservice.GroupChange_Actions_ModifyAnnouncementsOnlyAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyAttributesAccess

func (g *GroupChangeApplicator) ApplyModifyAttributesAccess(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyAttributesAccess *signalservice.GroupChange_Actions_ModifyAttributesAccessControlAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyAvatar

func (g *GroupChangeApplicator) ApplyModifyAvatar(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyAvatar *signalservice.GroupChange_Actions_ModifyAvatarAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyDescription

func (g *GroupChangeApplicator) ApplyModifyDescription(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	action *signalservice.GroupChange_Actions_ModifyDescriptionAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyDisappearingMessageTimer

func (g *GroupChangeApplicator) ApplyModifyDisappearingMessageTimer(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyDisappearingMessageTimer *signalservice.GroupChange_Actions_ModifyDisappearingMessagesTimerAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyInviteLinkPassword

func (g *GroupChangeApplicator) ApplyModifyInviteLinkPassword(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	action *signalservice.GroupChange_Actions_ModifyInviteLinkPasswordAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyMemberProfileKeys

func (g *GroupChangeApplicator) ApplyModifyMemberProfileKeys(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyMembers []*signalservice.GroupChange_Actions_ModifyMemberProfileKeyAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyMemberRoles

func (g *GroupChangeApplicator) ApplyModifyMemberRoles(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyMembers []*signalservice.GroupChange_Actions_ModifyMemberRoleAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyMembersAccess

func (g *GroupChangeApplicator) ApplyModifyMembersAccess(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyMembersAccess *signalservice.GroupChange_Actions_ModifyMembersAccessControlAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyModifyTitle

func (g *GroupChangeApplicator) ApplyModifyTitle(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	modifyTitle *signalservice.GroupChange_Actions_ModifyTitleAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyPromoteMembersPendingProfileKey

func (g *GroupChangeApplicator) ApplyPromoteMembersPendingProfileKey(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	promoteMembersPendingProfileKeys []*signalservice.GroupChange_Actions_PromotePendingMemberAction, groupImmut *GroupV2) error

func (*GroupChangeApplicator) ApplyPromotePendingAdminApproval

func (g *GroupChangeApplicator) ApplyPromotePendingAdminApproval(user *entities.GroupUser,
	inviteLinkPassword []byte,
	group *GroupV2,
	actions []*signalservice.GroupChange_Actions_PromoteRequestingMemberAction, groupImmut *GroupV2) error

type GroupCredential

type GroupCredential struct {
	Credential     []byte
	RedemptionTime int64
}

func GetCredentialForRedemption

func GetCredentialForRedemption(day int64) (*GroupCredential, error)

func GetCredentialForToday

func GetCredentialForToday() (*GroupCredential, error)

type GroupCredentials

type GroupCredentials struct {
	Credentials []GroupCredential `json:"credentials"`
}
var Credentials *GroupCredentials

type GroupExternalCredential

type GroupExternalCredential struct {
	Token []byte `json:"token"`
}

type GroupV2

type GroupV2 struct {
	MasterKey    []byte
	Hexid        string
	GroupContext signalservice.Group

	DecryptedGroup    *signalservice.DecryptedGroup
	GroupAction       *signalservice.DecryptedGroupChange
	JoinStatus        int
	Revision          uint32
	AnnouncementsOnly bool
	// contains filtered or unexported fields
}

GroupV2 holds group metadata.

func FindGroup

func FindGroup(hexid string) *GroupV2

func HandleGroupsV2

func HandleGroupsV2(src string, dm *signalservice.DataMessage) (*GroupV2, error)

func (*GroupV2) AddPendingMembers

func (g *GroupV2) AddPendingMembers(uuid []byte) error

func (*GroupV2) CheckJoinStatus

func (g *GroupV2) CheckJoinStatus() error

todo handle group join requests via link

func (*GroupV2) EncryptUUID

func (g *GroupV2) EncryptUUID(uuid []byte) ([]byte, error)

func (*GroupV2) JoinGroup

func (g *GroupV2) JoinGroup() error

func (*GroupV2) ModifyGroup

func (g *GroupV2) ModifyGroup(user *entities.GroupUser, params ModifyGroupParams, submittedActions *signalservice.GroupChange_Actions) (*entities.Resp, error)

func (*GroupV2) UpdateGroupFromServer

func (g *GroupV2) UpdateGroupFromServer() error

type GroupV2MessageContext

type GroupV2MessageContext struct {
	MasterKey   []byte // Masterkey is the unique identifier
	Revision    uint32 // holds the current revision number, if mismatch fetch the steps in between
	GroupChange []byte // protobuf of signalservice.GroupChange
}

GroupV2Message defines a group v2 message type

type GroupValidator

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

func NewGroupValidator

func NewGroupValidator(profileOp *zkgroup.ServerZkProfileOperations, config *config.Config) *GroupValidator

func (*GroupValidator) IsValidAvatarUrl

func (g *GroupValidator) IsValidAvatarUrl(url string, groupId []byte) bool

func (*GroupValidator) ValidateAccessControl

func (g *GroupValidator) ValidateAccessControl(group *signalservice.DecryptedGroup) error

func (*GroupValidator) ValidateAddMember

func (g *GroupValidator) ValidateAddMember(user *entities.GroupUser, inviteLinkPassword []byte,
	group *GroupV2, actions []*signalservice.GroupChange_Actions_AddMemberAction, groupPublicKey []byte) error

func (*GroupValidator) ValidateAddMembersPendingAdminApproval

func (g *GroupValidator) ValidateAddMembersPendingAdminApproval(user *entities.GroupUser, inviteLinkPassword []byte,
	group *GroupV2, actions []*signalservice.GroupChange_Actions_AddRequestingMemberAction) error

func (*GroupValidator) ValidateAddMembersPendingProfileKey

func (g *GroupValidator) ValidateAddMembersPendingProfileKey(user *entities.GroupUser,
	group *GroupV2, actions []*signalservice.GroupChange_Actions_AddPendingMemberAction) error

func (*GroupValidator) ValidateFinalGroupState

func (g *GroupValidator) ValidateFinalGroupState(group *signalservice.DecryptedGroup) error

func (*GroupValidator) ValidateMember

func (g *GroupValidator) ValidateMember(group *GroupV2, member *signalservice.Member, publicKey []byte) (*signalservice.Member, error)

func (*GroupValidator) ValidateMemberPendingAdminApproval

func (g *GroupValidator) ValidateMemberPendingAdminApproval(user *entities.GroupUser, group *GroupV2,
	memberPendingAdminApproval *signalservice.RequestingMember) (*signalservice.RequestingMember, error)

func (*GroupValidator) ValidateMemberPendingProfileKey

func (g *GroupValidator) ValidateMemberPendingProfileKey(group *GroupV2, member *signalservice.DecryptedMember,
	memberPendingProfileKey *signalservice.PendingMember) (*signalservice.PendingMember, error)

func (*GroupValidator) ValidatePresentationUpdate

func (g *GroupValidator) ValidatePresentationUpdate(source *entities.GroupUser,
	group *GroupV2,
	presentationData []byte) (zkgroup.ProfileKeyCredentialPresentation, error)

func (*GroupValidator) ValidateRoles

func (g *GroupValidator) ValidateRoles(group *signalservice.DecryptedGroup) error

type GroupsV2Authorization

type GroupsV2Authorization struct {
	Username string
	Password string
}

func NewGroupsV2Authorization

func NewGroupsV2Authorization(uuid []byte, groupSecretParams zkgroup.GroupSecretParams) (*GroupsV2Authorization, error)

func NewGroupsV2AuthorizationForGroup

func NewGroupsV2AuthorizationForGroup(uuid []byte, hexid string) (*GroupsV2Authorization, error)

type ModifyGroupParams

type ModifyGroupParams struct {
	InviteLinkPassword string `form:"inviteLinkPassword,optional"`
}

Jump to

Keyboard shortcuts

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