Skip to content
245 changes: 0 additions & 245 deletions lib/api/model/initial_snapshot.dart
Original file line number Diff line number Diff line change
Expand Up @@ -424,248 +424,3 @@ class UnreadHuddleSnapshot {

Map<String, dynamic> toJson() => _$UnreadHuddleSnapshotToJson(this);
}

/// Metadata about how to interpret the various group-based permission settings.
///
/// This is the type that [InitialSnapshot.serverSupportedPermissionSettings]
/// would have, according to the API as it exists as of 2025-08;
/// but that API is documented as unstable and subject to change.
///
/// For a useful value of this type, see [SupportedPermissionSettings.fixture].
///
/// For docs, search for "d_perm" in: https://zulip.com/api/register-queue
@JsonSerializable(fieldRename: FieldRename.snake)
class SupportedPermissionSettings {
final Map<String, PermissionSettingsItem> realm;
final Map<String, PermissionSettingsItem> stream;
final Map<String, PermissionSettingsItem> group;

/// Metadata about how to interpret certain group-based permission settings,
/// including all those that this client uses, based on "current" servers.
///
/// "Current" here means as of when this code was written, or last updated;
/// details in comments below. Naturally it'd be better to have an API to
/// get this information from the actual server.
///
/// Effectively we're counting on it being uncommon for the metadata for a
/// given permission to ever change from one server version to the next,
/// so that the values we take from one server version usually remain valid
/// for all past and future server versions that have the corresponding
/// permission at all.
///
/// TODO(server): Stabilize [InitialSnapshot.serverSupportedPermissionSettings]
/// or a similar API, and switch to using that. See thread:
/// https://chat.zulip.org/#narrow/channel/378-api-design/topic/server_supported_permission_settings/near/2247549
static SupportedPermissionSettings fixture = SupportedPermissionSettings(
realm: {
// From the server's Realm.REALM_PERMISSION_GROUP_SETTINGS,
// in zerver/models/realms.py. Current as of 6ab30fcce, 2025-08.
'create_multiuse_invite_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.ADMINISTRATORS,
),
'can_access_all_users_group': PermissionSettingsItem(
// require_system_group=True,
// allow_nobody_group=False,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
// # Note that user_can_access_all_other_users in the web
// # app is relying on members always have access.
// allowed_system_groups=[SystemGroups.EVERYONE, SystemGroups.MEMBERS],
),
'can_add_subscribers_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_add_custom_emoji_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_create_bots_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_create_groups': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_create_public_channel_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_create_private_channel_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_create_web_public_channel_group': PermissionSettingsItem(
// require_system_group=True,
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.OWNERS,
// allowed_system_groups=[
// SystemGroups.MODERATORS,
// SystemGroups.ADMINISTRATORS,
// SystemGroups.OWNERS,
// SystemGroups.NOBODY,
// ],
),
'can_create_write_only_bots_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_delete_any_message_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.ADMINISTRATORS,
),
'can_delete_own_message_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
'can_invite_users_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_manage_all_groups': PermissionSettingsItem(
// allow_nobody_group=False,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.OWNERS,
),
'can_manage_billing_group': PermissionSettingsItem(
// allow_nobody_group=False,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.ADMINISTRATORS,
),
'can_mention_many_users_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.ADMINISTRATORS,
),
'can_move_messages_between_channels_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MEMBERS,
),
'can_move_messages_between_topics_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
'can_resolve_topics_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
'can_set_delete_message_policy_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.MODERATORS,
),
'can_set_topics_policy_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.MEMBERS,
),
'can_summarize_topics_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
'direct_message_initiator_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
'direct_message_permission_group': PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
},
group: {}, // Please go ahead and fill this in when we come to need it.
stream: {
// From the server's Stream.stream_permission_group_settings,
// in zerver/models/streams.py. Current as of f9dc13014, 2025-08.
"can_add_subscribers_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.NOBODY,
),
"can_administer_channel_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name="stream_creator_or_nobody",
),
"can_delete_any_message_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.NOBODY,
),
"can_delete_own_message_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.NOBODY,
),
"can_move_messages_out_of_channel_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.NOBODY,
),
"can_move_messages_within_channel_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.NOBODY,
),
"can_remove_subscribers_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.ADMINISTRATORS,
),
"can_send_message_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.EVERYONE,
),
"can_subscribe_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: false,
// default_group_name=SystemGroups.NOBODY,
),
"can_resolve_topics_group": PermissionSettingsItem(
// allow_nobody_group=True,
allowEveryoneGroup: true,
// default_group_name=SystemGroups.NOBODY,
),
},
);

SupportedPermissionSettings({required this.realm, required this.stream, required this.group});

factory SupportedPermissionSettings.fromJson(Map<String, dynamic> json) =>
_$SupportedPermissionSettingsFromJson(json);

Map<String, dynamic> toJson() => _$SupportedPermissionSettingsToJson(this);
}

@JsonSerializable(fieldRename: FieldRename.snake)
class PermissionSettingsItem {
final bool allowEveryoneGroup;
// also other fields not yet used

PermissionSettingsItem({required this.allowEveryoneGroup});

factory PermissionSettingsItem.fromJson(Map<String, dynamic> json) =>
_$PermissionSettingsItemFromJson(json);

Map<String, dynamic> toJson() => _$PermissionSettingsItemToJson(this);
}
35 changes: 0 additions & 35 deletions lib/api/model/initial_snapshot.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading