Change license to AGPL
This commit:
- Updates the `LICENSE` file
- Start every file with something like:
// Copyright YEAR_FIRST_PUBLISHED Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
---
First, I removed existing license headers with this Ruby 3.1.2 script:
require 'set'
EXTENSIONS_TO_CHECK = Set['.h', '.hpp', '.cpp', '.m', '.mm', '.pch', '.swift']
same = 0
different = 0
all_files = `git ls-files`.lines.map { |line| line.strip }
all_files.each do |relative_path|
if relative_path == 'Pods'
next
end
unless EXTENSIONS_TO_CHECK.include? File.extname(relative_path)
next
end
path = File.expand_path(relative_path)
contents = File.read(path)
new_contents = contents.sub(/\/\/\n\/\/ Copyright .*\n\/\/\n\n/, '')
if contents == new_contents
same += 1
else
different += 1
end
File.write(path, new_contents)
end
puts "updated #{different} file(s), left #{same} untouched"
I'm sure this script could be improved, but it worked well enough.
Then, I created `Scripts/lint/lint-license-headers` and ran it to auto-
fix a lot of files. This changed the mode of some files, but I think
that's actually desirable. For example,
`SignalServiceKit/src/Util/AppContext.m` previously had a mode of
`0755/-rwxr-xr-x`, and it's now `0644/-rw-r--r--`.
Then I fixed some stragglers and updated the precommit script.
See [a similar change in the Desktop app][0].
[0]: 8bfaf598af
261 lines
9.4 KiB
Protocol Buffer
261 lines
9.4 KiB
Protocol Buffer
//
|
||
// Copyright 2019 Signal Messenger, LLC
|
||
// SPDX-License-Identifier: AGPL-3.0-only
|
||
//
|
||
|
||
syntax = "proto3";
|
||
|
||
// iOS - package name determines class prefix
|
||
package GroupsProtos;
|
||
|
||
option java_package = "org.signal.storageservice.protos.groups";
|
||
option java_multiple_files = true;
|
||
|
||
message AvatarUploadAttributes {
|
||
string key = 1;
|
||
string credential = 2;
|
||
string acl = 3;
|
||
string algorithm = 4;
|
||
string date = 5;
|
||
string policy = 6;
|
||
string signature = 7;
|
||
}
|
||
|
||
message Member {
|
||
enum Role {
|
||
UNKNOWN = 0;
|
||
DEFAULT = 1; // Normal member
|
||
ADMINISTRATOR = 2; // Group admin
|
||
}
|
||
|
||
bytes userId = 1; // The UuidCiphertext
|
||
Role role = 2;
|
||
bytes profileKey = 3; // The ProfileKeyCiphertext
|
||
bytes presentation = 4; // ProfileKeyCredentialPresentation
|
||
uint32 joinedAtRevision = 5; // The Group.revision this member joined at
|
||
}
|
||
|
||
message PendingMember {
|
||
Member member = 1; // The “invited” member
|
||
bytes addedByUserId = 2; // The UID who invited this member
|
||
uint64 timestamp = 3; // The time the invitation occurred
|
||
}
|
||
|
||
message RequestingMember {
|
||
bytes userId = 1;
|
||
bytes profileKey = 2;
|
||
bytes presentation = 3;
|
||
uint64 timestamp = 4;
|
||
}
|
||
|
||
message BannedMember {
|
||
bytes userId = 1;
|
||
uint64 bannedAtTimestamp = 2;
|
||
}
|
||
|
||
message AccessControl {
|
||
enum AccessRequired {
|
||
UNKNOWN = 0;
|
||
ANY = 1;
|
||
MEMBER = 2; // Any group member can make the modification
|
||
ADMINISTRATOR = 3; // Only administrators can make the modification
|
||
UNSATISFIABLE = 4;
|
||
}
|
||
|
||
AccessRequired attributes = 1; // Who can modify the group title, avatar, disappearing messages timer
|
||
AccessRequired members = 2; // Who can add people to the group
|
||
AccessRequired addFromInviteLink = 3;
|
||
}
|
||
|
||
message Group {
|
||
bytes publicKey = 1; // GroupPublicParams
|
||
bytes title = 2; // Encrypted title
|
||
string avatar = 3; // Pointer to encrypted avatar (‘key’ from AvatarUploadAttributes)
|
||
bytes disappearingMessagesTimer = 4; // Encrypted timer
|
||
AccessControl accessControl = 5;
|
||
uint32 revision = 6; // Current group revision number
|
||
repeated Member members = 7;
|
||
repeated PendingMember pendingMembers = 8;
|
||
repeated RequestingMember requestingMembers = 9;
|
||
bytes inviteLinkPassword = 10;
|
||
bytes descriptionBytes = 11;
|
||
bool announcementsOnly = 12;
|
||
repeated BannedMember bannedMembers = 13;
|
||
// next: 14
|
||
}
|
||
|
||
message GroupChange {
|
||
|
||
message Actions {
|
||
|
||
message AddMemberAction {
|
||
Member added = 1;
|
||
bool joinFromInviteLink = 2;
|
||
}
|
||
|
||
message DeleteMemberAction {
|
||
bytes deletedUserId = 1;
|
||
}
|
||
|
||
message ModifyMemberRoleAction {
|
||
bytes userId = 1;
|
||
Member.Role role = 2;
|
||
}
|
||
|
||
message ModifyMemberProfileKeyAction {
|
||
bytes presentation = 1;
|
||
bytes user_id = 2;
|
||
bytes profile_key = 3;
|
||
}
|
||
|
||
message AddPendingMemberAction {
|
||
PendingMember added = 1;
|
||
}
|
||
|
||
message DeletePendingMemberAction {
|
||
bytes deletedUserId = 1;
|
||
}
|
||
|
||
message PromotePendingMemberAction {
|
||
bytes presentation = 1;
|
||
bytes user_id = 2;
|
||
bytes profile_key = 3;
|
||
}
|
||
|
||
message AddRequestingMemberAction {
|
||
RequestingMember added = 1;
|
||
}
|
||
|
||
message DeleteRequestingMemberAction {
|
||
bytes deletedUserId = 1;
|
||
}
|
||
|
||
message PromoteRequestingMemberAction {
|
||
bytes userId = 1;
|
||
Member.Role role = 2;
|
||
}
|
||
|
||
message AddBannedMemberAction {
|
||
BannedMember added = 1;
|
||
}
|
||
|
||
message DeleteBannedMemberAction {
|
||
bytes deletedUserId = 1;
|
||
}
|
||
|
||
message ModifyTitleAction {
|
||
bytes title = 1;
|
||
}
|
||
|
||
message ModifyAvatarAction {
|
||
string avatar = 1;
|
||
}
|
||
|
||
message ModifyDisappearingMessagesTimerAction {
|
||
bytes timer = 1;
|
||
}
|
||
|
||
message ModifyAttributesAccessControlAction {
|
||
AccessControl.AccessRequired attributesAccess = 1;
|
||
}
|
||
|
||
message ModifyAvatarAccessControlAction {
|
||
AccessControl.AccessRequired avatarAccess = 1;
|
||
}
|
||
|
||
message ModifyMembersAccessControlAction {
|
||
AccessControl.AccessRequired membersAccess = 1;
|
||
}
|
||
|
||
message ModifyAddFromInviteLinkAccessControlAction {
|
||
AccessControl.AccessRequired addFromInviteLinkAccess = 1;
|
||
}
|
||
|
||
message ModifyInviteLinkPasswordAction {
|
||
bytes inviteLinkPassword = 1;
|
||
}
|
||
|
||
message ModifyDescriptionAction {
|
||
bytes descriptionBytes = 1;
|
||
}
|
||
|
||
message ModifyAnnouncementsOnlyAction {
|
||
bool announcementsOnly = 1;
|
||
}
|
||
|
||
bytes sourceUuid = 1; // Who made the change
|
||
uint32 revision = 2; // The change revision number
|
||
repeated AddMemberAction addMembers = 3; // Members added
|
||
repeated DeleteMemberAction deleteMembers = 4; // Members deleted
|
||
repeated ModifyMemberRoleAction modifyMemberRoles = 5; // Modified member roles
|
||
repeated ModifyMemberProfileKeyAction modifyMemberProfileKeys = 6; // Modified member profile keys
|
||
repeated AddPendingMemberAction addPendingMembers = 7; // Pending members added
|
||
repeated DeletePendingMemberAction deletePendingMembers = 8; // Pending members deleted
|
||
repeated PromotePendingMemberAction promotePendingMembers = 9; // Pending invitations accepted
|
||
ModifyTitleAction modifyTitle = 10; // Changed title
|
||
ModifyAvatarAction modifyAvatar = 11; // Changed avatar
|
||
ModifyDisappearingMessagesTimerAction modifyDisappearingMessagesTimer = 12; // Changed timer
|
||
ModifyAttributesAccessControlAction modifyAttributesAccess = 13; // Changed attributes access control
|
||
ModifyMembersAccessControlAction modifyMemberAccess = 14; // Changed membership access control
|
||
ModifyAddFromInviteLinkAccessControlAction modifyAddFromInviteLinkAccess = 15; // change epoch = 1
|
||
repeated AddRequestingMemberAction addRequestingMembers = 16; // change epoch = 1
|
||
repeated DeleteRequestingMemberAction deleteRequestingMembers = 17; // change epoch = 1
|
||
repeated PromoteRequestingMemberAction promoteRequestingMembers = 18; // change epoch = 1
|
||
ModifyInviteLinkPasswordAction modifyInviteLinkPassword = 19; // change epoch = 1
|
||
ModifyDescriptionAction modifyDescription = 20; // change epoch = 2
|
||
ModifyAnnouncementsOnlyAction modifyAnnouncementsOnly = 21; // change epoch = 3
|
||
repeated AddBannedMemberAction addBannedMembers = 22; // change epoch = 4
|
||
repeated DeleteBannedMemberAction deleteBannedMembers = 23; // change epoch = 4
|
||
}
|
||
|
||
bytes actions = 1; // The serialized actions
|
||
bytes serverSignature = 2; // Server’s signature over serialized actions
|
||
uint32 changeEpoch = 3;
|
||
}
|
||
|
||
message GroupChanges {
|
||
message GroupChangeState {
|
||
GroupChange groupChange = 1;
|
||
Group groupState = 2;
|
||
}
|
||
|
||
repeated bytes /*GroupChangeState*/ groupChanges = 1;
|
||
}
|
||
|
||
message GroupAttributeBlob {
|
||
oneof content {
|
||
string title = 1;
|
||
bytes avatar = 2;
|
||
uint32 disappearingMessagesDuration = 3;
|
||
string descriptionText = 4;
|
||
}
|
||
}
|
||
|
||
message GroupInviteLink {
|
||
message GroupInviteLinkContentsV1 {
|
||
bytes groupMasterKey = 1;
|
||
bytes inviteLinkPassword = 2;
|
||
}
|
||
|
||
oneof contents {
|
||
// I have renamed this field to work around a limitation
|
||
// in our code generation.
|
||
GroupInviteLinkContentsV1 contentsV1 = 1;
|
||
}
|
||
}
|
||
|
||
message GroupJoinInfo {
|
||
bytes publicKey = 1;
|
||
bytes title = 2;
|
||
string avatar = 3;
|
||
uint32 memberCount = 4;
|
||
AccessControl.AccessRequired addFromInviteLink = 5;
|
||
uint32 revision = 6;
|
||
bool pendingAdminApproval = 7;
|
||
bytes descriptionBytes = 8;
|
||
}
|
||
|
||
message GroupExternalCredential {
|
||
string token = 1;
|
||
}
|