Skip to content

Commit 58408bc

Browse files
PM-38130: Feat: Parse new organizations and policies properties from sync response (#6977)
1 parent 3732672 commit 58408bc

5 files changed

Lines changed: 84 additions & 6 deletions

File tree

app/src/test/kotlin/com/x8bit/bitwarden/data/vault/datasource/disk/VaultDiskSourceTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import com.bitwarden.network.model.createMockCollection
1010
import com.bitwarden.network.model.createMockDomains
1111
import com.bitwarden.network.model.createMockFolder
1212
import com.bitwarden.network.model.createMockSend
13+
import com.bitwarden.network.model.createMockSyncResponse
1314
import com.x8bit.bitwarden.data.vault.datasource.disk.dao.FakeCiphersDao
1415
import com.x8bit.bitwarden.data.vault.datasource.disk.dao.FakeCollectionsDao
1516
import com.x8bit.bitwarden.data.vault.datasource.disk.dao.FakeDomainsDao
@@ -459,7 +460,8 @@ private val DOMAINS_1: SyncResponseJson.Domains = createMockDomains(1)
459460
private val FOLDER_1: SyncResponseJson.Folder = createMockFolder(2)
460461
private val SEND_1: SyncResponseJson.Send = createMockSend(1)
461462

462-
private val VAULT_DATA: SyncResponseJson = SyncResponseJson(
463+
private val VAULT_DATA: SyncResponseJson = createMockSyncResponse(
464+
number = 1,
463465
folders = listOf(FOLDER_1),
464466
collections = listOf(COLLECTION_1),
465467
profile = mockk<SyncResponseJson.Profile> {

network/src/main/kotlin/com/bitwarden/network/model/SyncResponseJson.kt

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,11 @@ data class SyncResponseJson(
4242

4343
@Contextual
4444
@SerialName("policies")
45-
val policies: List<Policy>?,
45+
private val legacyPolicies: List<Policy>?,
46+
47+
@Contextual
48+
@SerialName("policiesNew")
49+
private val newPolicies: List<Policy>?,
4650

4751
@SerialName("domains")
4852
@JsonNames("Domains")
@@ -54,6 +58,11 @@ data class SyncResponseJson(
5458
@SerialName("userDecryption")
5559
val userDecryption: UserDecryptionJson?,
5660
) {
61+
/**
62+
* A list of policies associated with the vault data (nullable).
63+
*/
64+
val policies: List<Policy>? get() = newPolicies ?: legacyPolicies
65+
5766
/**
5867
* Represents domains in the vault response.
5968
*
@@ -207,7 +216,10 @@ data class SyncResponseJson(
207216
val name: String?,
208217

209218
@SerialName("organizations")
210-
val organizations: List<Organization>?,
219+
private val legacyOrganizations: List<Organization>?,
220+
221+
@SerialName("organizationsNew")
222+
private val newOrganizations: List<Organization>?,
211223

212224
@SerialName("usesKeyConnector")
213225
val shouldUseKeyConnector: Boolean,
@@ -234,6 +246,11 @@ data class SyncResponseJson(
234246
@Contextual
235247
val creationDate: Instant,
236248
) {
249+
/**
250+
* A list of organizations associated with the profile (nullable).
251+
*/
252+
val organizations: List<Organization>? get() = newOrganizations ?: legacyOrganizations
253+
237254
/**
238255
* Represents an organization in the vault response.
239256
*

network/src/test/kotlin/com/bitwarden/network/service/SyncServiceTest.kt

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,55 @@ private const val SYNC_SUCCESS_JSON = """
122122
"userIsClaimedByOrganization": false
123123
}
124124
],
125+
"organizationsNew": [
126+
{
127+
"usePolicies": false,
128+
"keyConnectorEnabled": false,
129+
"keyConnectorUrl": "mockKeyConnectorUrl-1",
130+
"type": 1,
131+
"seats": 1,
132+
"enabled": false,
133+
"providerType": 1,
134+
"maxCollections": 1,
135+
"selfHost": false,
136+
"permissions": {
137+
"manageGroups": false,
138+
"manageResetPassword": false,
139+
"accessReports": false,
140+
"managePolicies": false,
141+
"deleteAnyCollection": false,
142+
"manageSso": false,
143+
"deleteAssignedCollections": false,
144+
"manageUsers": false,
145+
"accessImportExport": false,
146+
"editAnyCollection": false,
147+
"accessEventLogs": false,
148+
"createNewCollections": false,
149+
"editAssignedCollections": false
150+
},
151+
"providerId": "mockProviderId-1",
152+
"id": "mockId-1",
153+
"useGroups": false,
154+
"useDirectory": false,
155+
"key": "mockKey-1",
156+
"providerName": "mockProviderName-1",
157+
"usersGetPremium": false,
158+
"maxStorageGb": 1,
159+
"identifier": "mockIdentifier-1",
160+
"use2fa": false,
161+
"familySponsorshipToDelete": false,
162+
"userId": "mockUserId-1",
163+
"useEvents": false,
164+
"familySponsorshipFriendlyName": "mockFamilySponsorshipFriendlyName-1",
165+
"useTotp": false,
166+
"familySponsorshipLastSyncDate": "2023-10-27T12:00:00.00Z",
167+
"name": "mockName-1",
168+
"useApi": false,
169+
"familySponsorshipValidUntil": "2023-10-27T12:00:00.00Z",
170+
"status": 1,
171+
"userIsClaimedByOrganization": false
172+
}
173+
],
125174
"providers": [
126175
{
127176
"useEvents": false,
@@ -403,6 +452,14 @@ private const val SYNC_SUCCESS_JSON = """
403452
"enabled": false
404453
}
405454
],
455+
"policiesNew": [
456+
{
457+
"organizationId": "mockOrganizationId-1",
458+
"id": "mockId-1",
459+
"type": 1,
460+
"enabled": false
461+
}
462+
],
406463
"sends": [
407464
{
408465
"accessCount": 1,

network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseProfileUtil.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ fun createMockProfile(
4848
isPremium = isPremium,
4949
culture = culture,
5050
name = name,
51-
organizations = organizations,
51+
legacyOrganizations = organizations,
52+
newOrganizations = organizations,
5253
shouldUseKeyConnector = shouldUseKeyConnector,
5354
id = id,
5455
masterPasswordHint = masterPasswordHint,

network/src/testFixtures/kotlin/com/bitwarden/network/model/SyncResponseUtil.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ fun createMockSyncResponse(
1010
collections: List<SyncResponseJson.Collection> = listOf(createMockCollection(number = number)),
1111
profile: SyncResponseJson.Profile = createMockProfile(number = number),
1212
ciphers: List<SyncResponseJson.Cipher> = listOf(createMockCipher(number = number)),
13-
policies: List<SyncResponseJson.Policy> = listOf(createMockPolicy(number = number)),
13+
policies: List<SyncResponseJson.Policy>? = listOf(createMockPolicy(number = number)),
1414
domains: SyncResponseJson.Domains = createMockDomains(number = number),
1515
sends: List<SyncResponseJson.Send> = listOf(createMockSend(number = number)),
1616
userDecryption: UserDecryptionJson? = createMockUserDecryption(number = number),
@@ -20,7 +20,8 @@ fun createMockSyncResponse(
2020
collections = collections,
2121
profile = profile,
2222
ciphers = ciphers,
23-
policies = policies,
23+
legacyPolicies = policies,
24+
newPolicies = policies,
2425
domains = domains,
2526
sends = sends,
2627
userDecryption = userDecryption,

0 commit comments

Comments
 (0)