Skip to content

Commit 3ae0d93

Browse files
authored
Merge pull request #4748 from wireapp/release_2025-09-02_15_54
Release 2025-09-02 - (expected chart version 5.22.0)
2 parents 084f95d + 83cba8b commit 3ae0d93

File tree

149 files changed

+2610
-2539
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

149 files changed

+2610
-2539
lines changed

.envrc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ if [[ ! -d "$env_dir" || ! -f "$layout_dir/nix-rebuild" || "$store_paths" != $(<
2727
fi
2828
fi
2929
echo "🔧 Building environment"
30-
$bcmd build -f nix wireServer.devEnv -Lv --out-link ./.env
30+
$bcmd build -f nix wireServer.devEnv -Lv --out-link ./.env --fallback
3131
echo "$store_paths" >"$layout_dir/nix-rebuild"
3232
fi
3333

CHANGELOG.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1+
# [2025-09-02] (Chart Release 5.22.0)
2+
3+
## Release notes
4+
5+
6+
* Increase the default of `setChallengeTTL` from 2 to 7 days in Brig's Helm chart. (#4737)
7+
8+
9+
## Features
10+
11+
12+
* Introduce `galley.conversation.parent_conv` to support shadow conversations. (#4708)
13+
14+
* Add an endpoint to allow team admins to bulk add users to user groups. (#4712)
15+
16+
* Add member count to user group list endpoint. (#4714)
17+
18+
19+
## Bug fixes and other updates
20+
21+
22+
* Fix bug in reset logic for one2one conversations (#4735)
23+
24+
25+
## Internal changes
26+
27+
28+
* Refactoring of store effects in galley as a prerequisite for the postgres migration (#4732, #4738, #4740)
29+
30+
31+
* Unused UserGroup User events were removed (#4734)
32+
33+
* Update `nixpkgs` (source of dependencies) to [latest of `unstable`
34+
channel](https://github.com/NixOS/nixpkgs/commits/c53baa6685261e5253a1c355a1b322f82674a824).
35+
This has no specific reason other than preventing tech-debt. (#4733)
36+
37+
138
# [2025-08-25] (Chart Release 5.21.0)
239

340
## API changes

cassandra-schema.cql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1626,7 +1626,8 @@ CREATE TABLE galley_test.conversation (
16261626
public_group_state blob,
16271627
receipt_mode int,
16281628
team uuid,
1629-
type int
1629+
type int,
1630+
parent_conv uuid
16301631
) WITH bloom_filter_fp_chance = 0.1
16311632
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
16321633
AND comment = ''

charts/brig/templates/configmap.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,7 @@ data:
387387
{{- if .setAuditLogEmailRecipient }}
388388
setAuditLogEmailRecipient: {{ .setAuditLogEmailRecipient }}
389389
{{- end }}
390-
setChallengeTTL: {{ or .setChallengeTTL 172800 }}
390+
setChallengeTTL: {{ or .setChallengeTTL 604800 }}
391391
setEphemeralUserCreationEnabled: {{ .setEphemeralUserCreationEnabled }}
392392
{{- end }}
393393
{{- end }}

docs/src/developer/reference/config-options.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1024,6 +1024,19 @@ brig:
10241024
setEphemeralUserCreationEnabled: false
10251025
```
10261026

1027+
### Domain Verification Challenge TTL
1028+
1029+
```yaml
1030+
brig:
1031+
config:
1032+
optSettings:
1033+
setChallengeTTL: <seconds>
1034+
```
1035+
1036+
`setChallengeTTL` defines how long a domain verification challenge should be
1037+
stored. The challenge (`StoredDomainVerificationChallenge`) will be deleted
1038+
after this period.
1039+
10271040
## Settings in cargohold
10281041

10291042
AWS S3 (or an alternative provider / service) is used to upload and download

hack/bin/upload-images.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ readonly SCRIPT_DIR ROOT_DIR
2323

2424
tmp_link_store=$(mktemp -d)
2525
image_list_file="$tmp_link_store/image-list"
26-
nix -v --show-trace -L build -f "$ROOT_DIR/nix" wireServer.imagesList -o "$image_list_file"
26+
nix -v --show-trace -L build -f "$ROOT_DIR/nix" wireServer.imagesList -o "$image_list_file" --fallback
2727

2828
# Build everything first so we can benefit the most from having many cores.
29-
nix -v --show-trace -L build -f "$ROOT_DIR/nix" "wireServer.$IMAGES_ATTR" --no-link
29+
nix -v --show-trace -L build -f "$ROOT_DIR/nix" "wireServer.$IMAGES_ATTR" --no-link --fallback
3030

3131
xargs -I {} -P 10 "$SCRIPT_DIR/upload-image.sh" "wireServer.$IMAGES_ATTR.{}" < "$image_list_file"
3232

integration/test/API/Brig.hs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,11 +1063,12 @@ data GetUserGroupsArgs = GetUserGroupsArgs
10631063
pSize :: Maybe Int,
10641064
lastName :: Maybe String,
10651065
lastCreatedAt :: Maybe String,
1066-
lastId :: Maybe String
1066+
lastId :: Maybe String,
1067+
includeMemberCount :: Bool
10671068
}
10681069

10691070
instance Default GetUserGroupsArgs where
1070-
def = GetUserGroupsArgs Nothing Nothing Nothing Nothing Nothing Nothing Nothing
1071+
def = GetUserGroupsArgs Nothing Nothing Nothing Nothing Nothing Nothing Nothing False
10711072

10721073
getUserGroups :: (MakesValue user) => user -> GetUserGroupsArgs -> App Response
10731074
getUserGroups user GetUserGroupsArgs {..} = do
@@ -1082,7 +1083,8 @@ getUserGroups user GetUserGroupsArgs {..} = do
10821083
(("page_size",) . show) <$> pSize,
10831084
("last_seen_name",) <$> lastName,
10841085
("last_seen_created_at",) <$> lastCreatedAt,
1085-
("last_seen_id",) <$> lastId
1086+
("last_seen_id",) <$> lastId,
1087+
(if includeMemberCount then Just ("include_member_count", "true") else Nothing)
10861088
]
10871089
)
10881090

@@ -1102,6 +1104,15 @@ addUserToGroup user gid uid = do
11021104
req <- baseRequest user Brig Versioned $ joinHttpPath ["user-groups", gid, "users", uid]
11031105
submit "POST" req
11041106

1107+
addUsersToGroup :: (MakesValue user) => user -> String -> [String] -> App Response
1108+
addUsersToGroup user gid uids = do
1109+
req <- baseRequest user Brig Versioned $ joinHttpPath ["user-groups", gid, "users"]
1110+
submit "POST" $
1111+
req
1112+
& addJSONObject
1113+
[ "members" .= uids
1114+
]
1115+
11051116
removeUserFromGroup :: (MakesValue user) => user -> String -> String -> App Response
11061117
removeUserFromGroup user gid uid = do
11071118
req <- baseRequest user Brig Versioned $ joinHttpPath ["user-groups", gid, "users", uid]

integration/test/API/Galley.hs

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ data CreateConv = CreateConv
3333
groupConvType :: Maybe String,
3434
cells :: Bool,
3535
addPermission :: Maybe String,
36-
skipCreator :: Maybe Bool
36+
skipCreator :: Maybe Bool,
37+
parent :: Maybe String
3738
}
3839

3940
defProteus :: CreateConv
@@ -51,7 +52,8 @@ defProteus =
5152
groupConvType = Nothing,
5253
cells = False,
5354
addPermission = Nothing,
54-
skipCreator = Nothing
55+
skipCreator = Nothing,
56+
parent = Nothing
5557
}
5658

5759
defMLS :: CreateConv
@@ -87,7 +89,8 @@ instance MakesValue CreateConv where
8789
"receipt_mode" .=? cc.receiptMode,
8890
"group_conv_type" .=? cc.groupConvType,
8991
"add_permission" .=? cc.addPermission,
90-
"skip_creator" .=? cc.skipCreator
92+
"skip_creator" .=? cc.skipCreator,
93+
"parent" .=? cc.parent
9194
]
9295
)
9396

@@ -177,6 +180,19 @@ getConversation user qcnv = do
177180
req <- baseRequest user Galley Versioned (joinHttpPath ["conversations", domain, cnv])
178181
submit "GET" req
179182

183+
getConversationInternal ::
184+
( HasCallStack,
185+
MakesValue user,
186+
MakesValue qcnv
187+
) =>
188+
user ->
189+
qcnv ->
190+
App Response
191+
getConversationInternal user qcnv = do
192+
(_domain, cnv) <- objQid qcnv
193+
req <- baseRequest user Galley Unversioned (joinHttpPath ["i", "conversations", cnv])
194+
submit "GET" req
195+
180196
getSubConversation ::
181197
( HasCallStack,
182198
MakesValue user

integration/test/MLS/Util.hs

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -654,7 +654,10 @@ consumingMessages mlsProtocol mp = Codensity $ \k -> do
654654
-- at this point we know that every new user has been added to the
655655
-- conversation
656656
for_ (zip clients wss) $ \((cid, t), ws) -> case t of
657-
MLSNotificationMessageTag -> void $ consumeMessageNoExternal conv.ciphersuite cid mp ws
657+
MLSNotificationMessageTag ->
658+
when (conv.epoch > 0) $
659+
void $
660+
consumeMessageNoExternal conv.ciphersuite cid mp ws
658661
MLSNotificationWelcomeTag -> consumeWelcome cid mp ws
659662
pure r
660663

@@ -989,3 +992,34 @@ removeMemberFromChannel user channel userToBeRemoved = do
989992
convId
990993
mls.convs
991994
}
995+
996+
resetMLSConversation ::
997+
(HasCallStack, MakesValue cid, MakesValue conv) =>
998+
cid ->
999+
conv ->
1000+
App Value
1001+
resetMLSConversation cid conv = do
1002+
convId <- objConvId conv
1003+
mlsConv <- getMLSConv convId
1004+
resetConversation cid mlsConv.groupId mlsConv.epoch >>= assertStatus 200
1005+
1006+
conv' <- getConversation cid convId >>= getJSON 200
1007+
groupId <- conv' %. "group_id" & asString
1008+
groupId `shouldNotMatch` (mlsConv.groupId :: String)
1009+
conv' %. "epoch" `shouldMatchInt` 0
1010+
convId' <- objConvId conv'
1011+
1012+
modifyMLSState $ \mls ->
1013+
mls
1014+
{ convs =
1015+
Map.insert
1016+
convId'
1017+
( mlsConv
1018+
{ groupId,
1019+
epoch = 0,
1020+
convId = convId'
1021+
}
1022+
)
1023+
$ Map.delete convId mls.convs
1024+
}
1025+
pure conv'

integration/test/Notifications.hs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,9 @@ isConnectionNotif status n =
230230
isUserGroupCreatedNotif :: (MakesValue a) => a -> App Bool
231231
isUserGroupCreatedNotif = notifTypeIsEqual "user-group.created"
232232

233+
isUserGroupUpdatedNotif :: (MakesValue a) => a -> App Bool
234+
isUserGroupUpdatedNotif = notifTypeIsEqual "user-group.updated"
235+
233236
isConvResetNotif :: (HasCallStack, MakesValue n) => n -> App Bool
234237
isConvResetNotif n =
235238
fieldEquals n "payload.0.type" "conversation.mls-reset"

0 commit comments

Comments
 (0)