Adapt to key verification model changes

This commit is contained in:
bed 2025-06-17 14:14:52 +02:00
parent ed5c320a31
commit ec7952de18
26 changed files with 2149 additions and 860 deletions

View file

@ -1,5 +1,5 @@
const modelInfo = { const modelInfo = {
version: 128, version: 129,
} }
export default modelInfo export default modelInfo

View file

@ -37,6 +37,9 @@ import { GiftCardCreateReturnTypeRef } from "./TypeRefs.js"
import { GiftCardDeleteDataTypeRef } from "./TypeRefs.js" import { GiftCardDeleteDataTypeRef } from "./TypeRefs.js"
import { GroupKeyRotationInfoGetOutTypeRef } from "./TypeRefs.js" import { GroupKeyRotationInfoGetOutTypeRef } from "./TypeRefs.js"
import { GroupKeyRotationPostInTypeRef } from "./TypeRefs.js" import { GroupKeyRotationPostInTypeRef } from "./TypeRefs.js"
import { IdentityKeyGetInTypeRef } from "./TypeRefs.js"
import { IdentityKeyGetOutTypeRef } from "./TypeRefs.js"
import { IdentityKeyPostInTypeRef } from "./TypeRefs.js"
import { InvoiceDataGetInTypeRef } from "./TypeRefs.js" import { InvoiceDataGetInTypeRef } from "./TypeRefs.js"
import { InvoiceDataGetOutTypeRef } from "./TypeRefs.js" import { InvoiceDataGetOutTypeRef } from "./TypeRefs.js"
import { LocationServiceGetReturnTypeRef } from "./TypeRefs.js" import { LocationServiceGetReturnTypeRef } from "./TypeRefs.js"
@ -69,6 +72,7 @@ import { RegistrationServiceDataTypeRef } from "./TypeRefs.js"
import { RegistrationReturnTypeRef } from "./TypeRefs.js" import { RegistrationReturnTypeRef } from "./TypeRefs.js"
import { ResetFactorsDeleteDataTypeRef } from "./TypeRefs.js" import { ResetFactorsDeleteDataTypeRef } from "./TypeRefs.js"
import { ResetPasswordPostInTypeRef } from "./TypeRefs.js" import { ResetPasswordPostInTypeRef } from "./TypeRefs.js"
import { RolloutGetOutTypeRef } from "./TypeRefs.js"
import { SaltDataTypeRef } from "./TypeRefs.js" import { SaltDataTypeRef } from "./TypeRefs.js"
import { SaltReturnTypeRef } from "./TypeRefs.js" import { SaltReturnTypeRef } from "./TypeRefs.js"
import { SecondFactorAuthAllowedReturnTypeRef } from "./TypeRefs.js" import { SecondFactorAuthAllowedReturnTypeRef } from "./TypeRefs.js"
@ -292,6 +296,15 @@ export const GroupKeyRotationService = Object.freeze({
delete: null, delete: null,
} as const) } as const)
export const IdentityKeyService = Object.freeze({
app: "sys",
name: "IdentityKeyService",
get: { data: IdentityKeyGetInTypeRef, return: IdentityKeyGetOutTypeRef },
post: { data: IdentityKeyPostInTypeRef, return: null },
put: null,
delete: null,
} as const)
export const InvoiceDataService = Object.freeze({ export const InvoiceDataService = Object.freeze({
app: "sys", app: "sys",
name: "InvoiceDataService", name: "InvoiceDataService",
@ -418,6 +431,15 @@ export const ResetPasswordService = Object.freeze({
delete: null, delete: null,
} as const) } as const)
export const RolloutService = Object.freeze({
app: "sys",
name: "RolloutService",
get: { data: null, return: RolloutGetOutTypeRef },
post: null,
put: null,
delete: null,
} as const)
export const SaltService = Object.freeze({ export const SaltService = Object.freeze({
app: "sys", app: "sys",
name: "SaltService", name: "SaltService",

File diff suppressed because it is too large Load diff

View file

@ -20,6 +20,8 @@ export type KeyPair = {
symEncPrivEccKey: null | Uint8Array; symEncPrivEccKey: null | Uint8Array;
pubKyberKey: null | Uint8Array; pubKyberKey: null | Uint8Array;
symEncPrivKyberKey: null | Uint8Array; symEncPrivKyberKey: null | Uint8Array;
signature: null | PublicKeySignature;
} }
export const GroupTypeRef: TypeRef<Group> = new TypeRef("sys", 5) export const GroupTypeRef: TypeRef<Group> = new TypeRef("sys", 5)
@ -51,8 +53,9 @@ export type Group = {
members: Id; members: Id;
archives: ArchiveType[]; archives: ArchiveType[];
storageCounter: null | Id; storageCounter: null | Id;
formerGroupKeys: null | GroupKeysRef; formerGroupKeys: GroupKeysRef;
pubAdminGroupEncGKey: null | PubEncKeyData; pubAdminGroupEncGKey: null | PubEncKeyData;
identityKeyPair: null | IdentityKeyPair;
} }
export const GroupInfoTypeRef: TypeRef<GroupInfo> = new TypeRef("sys", 14) export const GroupInfoTypeRef: TypeRef<GroupInfo> = new TypeRef("sys", 14)
@ -681,6 +684,8 @@ export type PublicKeyGetOut = {
pubKeyVersion: NumberString; pubKeyVersion: NumberString;
pubEccKey: null | Uint8Array; pubEccKey: null | Uint8Array;
pubKyberKey: null | Uint8Array; pubKyberKey: null | Uint8Array;
signature: null | PublicKeySignature;
} }
export const SaltDataTypeRef: TypeRef<SaltData> = new TypeRef("sys", 417) export const SaltDataTypeRef: TypeRef<SaltData> = new TypeRef("sys", 417)
@ -2539,7 +2544,7 @@ export type UserGroupRoot = {
_ownerGroup: null | Id; _ownerGroup: null | Id;
invitations: Id; invitations: Id;
keyRotations: null | KeyRotationsRef; keyRotations: KeyRotationsRef;
groupKeyUpdates: null | GroupKeyUpdatesRef; groupKeyUpdates: null | GroupKeyUpdatesRef;
} }
export const PaymentErrorInfoTypeRef: TypeRef<PaymentErrorInfo> = new TypeRef("sys", 1632) export const PaymentErrorInfoTypeRef: TypeRef<PaymentErrorInfo> = new TypeRef("sys", 1632)
@ -3938,3 +3943,108 @@ export type PatchList = {
patches: Patch[]; patches: Patch[];
} }
export const IdentityKeyPairTypeRef: TypeRef<IdentityKeyPair> = new TypeRef("sys", 2575)
export function createIdentityKeyPair(values: StrippedEntity<IdentityKeyPair>): IdentityKeyPair {
return Object.assign(create(typeModels[IdentityKeyPairTypeRef.typeId], IdentityKeyPairTypeRef), values)
}
export type IdentityKeyPair = {
_type: TypeRef<IdentityKeyPair>;
_original?: IdentityKeyPair
_id: Id;
identityKeyVersion: NumberString;
encryptingKeyVersion: NumberString;
publicEd25519Key: Uint8Array;
privateEd25519Key: Uint8Array;
publicKeyMac: KeyMac;
}
export const PublicKeySignatureTypeRef: TypeRef<PublicKeySignature> = new TypeRef("sys", 2582)
export function createPublicKeySignature(values: StrippedEntity<PublicKeySignature>): PublicKeySignature {
return Object.assign(create(typeModels[PublicKeySignatureTypeRef.typeId], PublicKeySignatureTypeRef), values)
}
export type PublicKeySignature = {
_type: TypeRef<PublicKeySignature>;
_original?: PublicKeySignature
_id: Id;
signature: Uint8Array;
signingKeyVersion: NumberString;
signatureType: NumberString;
publicKeyVersion: NumberString;
}
export const IdentityKeyGetInTypeRef: TypeRef<IdentityKeyGetIn> = new TypeRef("sys", 2590)
export function createIdentityKeyGetIn(values: StrippedEntity<IdentityKeyGetIn>): IdentityKeyGetIn {
return Object.assign(create(typeModels[IdentityKeyGetInTypeRef.typeId], IdentityKeyGetInTypeRef), values)
}
export type IdentityKeyGetIn = {
_type: TypeRef<IdentityKeyGetIn>;
_original?: IdentityKeyGetIn
_format: NumberString;
version: null | NumberString;
identifierType: NumberString;
identifier: string;
}
export const IdentityKeyGetOutTypeRef: TypeRef<IdentityKeyGetOut> = new TypeRef("sys", 2595)
export function createIdentityKeyGetOut(values: StrippedEntity<IdentityKeyGetOut>): IdentityKeyGetOut {
return Object.assign(create(typeModels[IdentityKeyGetOutTypeRef.typeId], IdentityKeyGetOutTypeRef), values)
}
export type IdentityKeyGetOut = {
_type: TypeRef<IdentityKeyGetOut>;
_original?: IdentityKeyGetOut
_format: NumberString;
publicIdentityKey: Uint8Array;
publicIdentityKeyVersion: NumberString;
}
export const IdentityKeyPostInTypeRef: TypeRef<IdentityKeyPostIn> = new TypeRef("sys", 2599)
export function createIdentityKeyPostIn(values: StrippedEntity<IdentityKeyPostIn>): IdentityKeyPostIn {
return Object.assign(create(typeModels[IdentityKeyPostInTypeRef.typeId], IdentityKeyPostInTypeRef), values)
}
export type IdentityKeyPostIn = {
_type: TypeRef<IdentityKeyPostIn>;
_original?: IdentityKeyPostIn
_format: NumberString;
identityKeyPair: IdentityKeyPair;
signatures: PublicKeySignature[];
}
export const RolloutTypeRef: TypeRef<Rollout> = new TypeRef("sys", 2604)
export function createRollout(values: StrippedEntity<Rollout>): Rollout {
return Object.assign(create(typeModels[RolloutTypeRef.typeId], RolloutTypeRef), values)
}
export type Rollout = {
_type: TypeRef<Rollout>;
_original?: Rollout
_id: Id;
rolloutType: NumberString;
}
export const RolloutGetOutTypeRef: TypeRef<RolloutGetOut> = new TypeRef("sys", 2607)
export function createRolloutGetOut(values: StrippedEntity<RolloutGetOut>): RolloutGetOut {
return Object.assign(create(typeModels[RolloutGetOutTypeRef.typeId], RolloutGetOutTypeRef), values)
}
export type RolloutGetOut = {
_type: TypeRef<RolloutGetOut>;
_original?: RolloutGetOut
_format: NumberString;
rollouts: Rollout[];
}

View file

@ -1,5 +1,5 @@
const modelInfo = { const modelInfo = {
version: 87, version: 88,
} }
export default modelInfo export default modelInfo

View file

@ -26,6 +26,7 @@ import { CreateMailFolderReturnTypeRef } from "./TypeRefs.js"
import { UpdateMailFolderDataTypeRef } from "./TypeRefs.js" import { UpdateMailFolderDataTypeRef } from "./TypeRefs.js"
import { DeleteMailFolderDataTypeRef } from "./TypeRefs.js" import { DeleteMailFolderDataTypeRef } from "./TypeRefs.js"
import { CreateMailGroupDataTypeRef } from "./TypeRefs.js" import { CreateMailGroupDataTypeRef } from "./TypeRefs.js"
import { MailGroupPostOutTypeRef } from "./TypeRefs.js"
import { DeleteGroupDataTypeRef } from "./TypeRefs.js" import { DeleteGroupDataTypeRef } from "./TypeRefs.js"
import { DeleteMailDataTypeRef } from "./TypeRefs.js" import { DeleteMailDataTypeRef } from "./TypeRefs.js"
import { ManageLabelServicePostInTypeRef } from "./TypeRefs.js" import { ManageLabelServicePostInTypeRef } from "./TypeRefs.js"
@ -45,6 +46,7 @@ import { TranslationGetInTypeRef } from "./TypeRefs.js"
import { TranslationGetOutTypeRef } from "./TypeRefs.js" import { TranslationGetOutTypeRef } from "./TypeRefs.js"
import { UnreadMailStatePostInTypeRef } from "./TypeRefs.js" import { UnreadMailStatePostInTypeRef } from "./TypeRefs.js"
import { UserAccountCreateDataTypeRef } from "./TypeRefs.js" import { UserAccountCreateDataTypeRef } from "./TypeRefs.js"
import { UserAccountPostOutTypeRef } from "./TypeRefs.js"
export const ApplyLabelService = Object.freeze({ export const ApplyLabelService = Object.freeze({
app: "tutanota", app: "tutanota",
@ -167,7 +169,7 @@ export const MailGroupService = Object.freeze({
app: "tutanota", app: "tutanota",
name: "MailGroupService", name: "MailGroupService",
get: null, get: null,
post: { data: CreateMailGroupDataTypeRef, return: null }, post: { data: CreateMailGroupDataTypeRef, return: MailGroupPostOutTypeRef },
put: null, put: null,
delete: { data: DeleteGroupDataTypeRef, return: null }, delete: { data: DeleteGroupDataTypeRef, return: null },
} as const) } as const)
@ -284,7 +286,7 @@ export const UserAccountService = Object.freeze({
app: "tutanota", app: "tutanota",
name: "UserAccountService", name: "UserAccountService",
get: null, get: null,
post: { data: UserAccountCreateDataTypeRef, return: null }, post: { data: UserAccountCreateDataTypeRef, return: UserAccountPostOutTypeRef },
put: null, put: null,
delete: null, delete: null,
} as const) } as const)

File diff suppressed because it is too large Load diff

View file

@ -2501,3 +2501,31 @@ export type ResolveConversationsServiceGetOut = {
mailIds: IdTupleWrapper[]; mailIds: IdTupleWrapper[];
} }
export const UserAccountPostOutTypeRef: TypeRef<UserAccountPostOut> = new TypeRef("tutanota", 1664)
export function createUserAccountPostOut(values: StrippedEntity<UserAccountPostOut>): UserAccountPostOut {
return Object.assign(create(typeModels[UserAccountPostOutTypeRef.typeId], UserAccountPostOutTypeRef), values)
}
export type UserAccountPostOut = {
_type: TypeRef<UserAccountPostOut>;
_original?: UserAccountPostOut
_format: NumberString;
userId: Id;
userGroup: Id;
}
export const MailGroupPostOutTypeRef: TypeRef<MailGroupPostOut> = new TypeRef("tutanota", 1668)
export function createMailGroupPostOut(values: StrippedEntity<MailGroupPostOut>): MailGroupPostOut {
return Object.assign(create(typeModels[MailGroupPostOutTypeRef.typeId], MailGroupPostOutTypeRef), values)
}
export type MailGroupPostOut = {
_type: TypeRef<MailGroupPostOut>;
_original?: MailGroupPostOut
_format: NumberString;
mailGroup: Id;
}

View file

@ -68,10 +68,8 @@ import { checkKeyVersionConstraints, KeyLoaderFacade, parseKeyVersion } from "./
import { import {
Aes256Key, Aes256Key,
AesKey, AesKey,
PublicKey,
bitArrayToUint8Array, bitArrayToUint8Array,
createAuthVerifier, createAuthVerifier,
X25519KeyPair,
EncryptedPqKeyPairs, EncryptedPqKeyPairs,
getKeyLengthBytes, getKeyLengthBytes,
isEncryptedPqKeyPairs, isEncryptedPqKeyPairs,
@ -79,7 +77,9 @@ import {
KEY_LENGTH_BYTES_AES_256, KEY_LENGTH_BYTES_AES_256,
PQKeyPairs, PQKeyPairs,
PQPublicKeys, PQPublicKeys,
PublicKey,
uint8ArrayToKey, uint8ArrayToKey,
X25519KeyPair,
} from "@tutao/tutanota-crypto" } from "@tutao/tutanota-crypto"
import { PQFacade } from "./PQFacade.js" import { PQFacade } from "./PQFacade.js"
import { import {
@ -687,7 +687,12 @@ export class KeyRotationFacade {
const distributionKeyEncNewUserGroupKey = this.cryptoWrapper.encryptKey(legacyUserDistKey, newUserGroupKeys.symGroupKey.object) const distributionKeyEncNewUserGroupKey = this.cryptoWrapper.encryptKey(legacyUserDistKey, newUserGroupKeys.symGroupKey.object)
const authVerifier = createAuthVerifier(passphraseKey) const authVerifier = createAuthVerifier(passphraseKey)
const newGroupKeyEncCurrentGroupKey = this.cryptoWrapper.encryptKeyWithVersionedKey(newUserGroupKeys.symGroupKey, currentGroupKey.object) const newGroupKeyEncCurrentGroupKey = this.cryptoWrapper.encryptKeyWithVersionedKey(newUserGroupKeys.symGroupKey, currentGroupKey.object)
return { membershipSymEncNewGroupKey, distributionKeyEncNewUserGroupKey, authVerifier, newGroupKeyEncCurrentGroupKey } return {
membershipSymEncNewGroupKey,
distributionKeyEncNewUserGroupKey,
authVerifier,
newGroupKeyEncCurrentGroupKey,
}
} }
private async handlePendingInvitations(targetGroup: Group, newTargetGroupKey: VersionedKey) { private async handlePendingInvitations(targetGroup: Group, newTargetGroupKey: VersionedKey) {
@ -1402,5 +1407,15 @@ function hasNonQuantumSafeKeys(...keys: AesKey[]) {
} }
function makeKeyPair(keyPair: EncryptedPqKeyPairs | null): KeyPair | null { function makeKeyPair(keyPair: EncryptedPqKeyPairs | null): KeyPair | null {
return keyPair != null ? createKeyPair(keyPair) : null return keyPair != null
? createKeyPair({
pubEccKey: keyPair.pubEccKey,
symEncPrivEccKey: keyPair.symEncPrivEccKey,
pubKyberKey: keyPair.pubKyberKey,
symEncPrivKyberKey: keyPair.symEncPrivKyberKey,
pubRsaKey: keyPair.pubRsaKey,
symEncPrivRsaKey: keyPair.symEncPrivRsaKey,
signature: null,
})
: null
} }

View file

@ -623,6 +623,7 @@ o.spec("CryptoFacadeTest", function () {
symEncPrivKyberKey: null, symEncPrivKyberKey: null,
pubRsaKey: null, pubRsaKey: null,
symEncPrivRsaKey: null, symEncPrivRsaKey: null,
signature: null,
}) })
const senderKeyPairs = await pqFacade.generateKeyPairs() const senderKeyPairs = await pqFacade.generateKeyPairs()
@ -635,6 +636,7 @@ o.spec("CryptoFacadeTest", function () {
symEncPrivEccKey: aesEncrypt(senderGroupKey, senderKeyPairs.x25519KeyPair.privateKey), symEncPrivEccKey: aesEncrypt(senderGroupKey, senderKeyPairs.x25519KeyPair.privateKey),
pubKyberKey: kyberPublicKeyToBytes(senderKeyPairs.kyberKeyPair.publicKey), pubKyberKey: kyberPublicKeyToBytes(senderKeyPairs.kyberKeyPair.publicKey),
symEncPrivKyberKey: aesEncrypt(senderGroupKey, kyberPrivateKeyToBytes(senderKeyPairs.kyberKeyPair.privateKey)), symEncPrivKyberKey: aesEncrypt(senderGroupKey, kyberPrivateKeyToBytes(senderKeyPairs.kyberKeyPair.privateKey)),
signature: null,
}) })
const senderUserGroup = createGroup({ const senderUserGroup = createGroup({
@ -657,8 +659,9 @@ o.spec("CryptoFacadeTest", function () {
_id: "userGroupId", _id: "userGroupId",
currentKeys: senderKeyPair, currentKeys: senderKeyPair,
groupKeyVersion: "0", groupKeyVersion: "0",
formerGroupKeys: null, formerGroupKeys: object(),
pubAdminGroupEncGKey: null, pubAdminGroupEncGKey: null,
identityKeyPair: null,
}) })
when(keyLoaderFacade.loadCurrentKeyPair(senderUserGroup._id)).thenResolve({ version: 0, object: senderKeyPairs }) when(keyLoaderFacade.loadCurrentKeyPair(senderUserGroup._id)).thenResolve({ version: 0, object: senderKeyPairs })
@ -764,8 +767,9 @@ o.spec("CryptoFacadeTest", function () {
storageCounter: null, storageCounter: null,
type: "", type: "",
user: null, user: null,
formerGroupKeys: null, formerGroupKeys: object(),
pubAdminGroupEncGKey: null, pubAdminGroupEncGKey: null,
identityKeyPair: null,
}) })
when(keyLoaderFacade.loadCurrentKeyPair(senderUserGroup._id)).thenResolve(senderAsymmetricKeyPair) when(keyLoaderFacade.loadCurrentKeyPair(senderUserGroup._id)).thenResolve(senderAsymmetricKeyPair)
@ -1474,6 +1478,7 @@ o.spec("CryptoFacadeTest", function () {
symEncPrivKyberKey: aesEncrypt(recipientUser.userGroupKey, kyberPrivateKeyToBytes(pqKeyPairs.kyberKeyPair.privateKey)), symEncPrivKyberKey: aesEncrypt(recipientUser.userGroupKey, kyberPrivateKeyToBytes(pqKeyPairs.kyberKeyPair.privateKey)),
pubRsaKey: null, pubRsaKey: null,
symEncPrivRsaKey: null, symEncPrivRsaKey: null,
signature: null,
}) })
recipientUser.userGroup.currentKeys = recipientKeyPair recipientUser.userGroup.currentKeys = recipientKeyPair

View file

@ -121,7 +121,8 @@ o.spec("KeyLoaderFacadeTest", function () {
userGroup = createTestEntity(GroupTypeRef, { userGroup = createTestEntity(GroupTypeRef, {
_id: "my userGroup", _id: "my userGroup",
groupKeyVersion: String(userGroupKey.version), groupKeyVersion: String(userGroupKey.version),
formerGroupKeys: null, formerGroupKeys: object(),
identityKeyPair: null,
}) })
membership = createTestEntity(GroupMembershipTypeRef, { membership = createTestEntity(GroupMembershipTypeRef, {
@ -206,6 +207,7 @@ o.spec("KeyLoaderFacadeTest", function () {
symEncPrivKyberKey: null, symEncPrivKyberKey: null,
symEncPrivRsaKey: encryptRsaKey(currentGroupKey.object, RSA_TEST_KEYPAIR.privateKey), symEncPrivRsaKey: encryptRsaKey(currentGroupKey.object, RSA_TEST_KEYPAIR.privateKey),
pubRsaKey: hexToUint8Array(rsaPublicKeyToHex(RSA_TEST_KEYPAIR.publicKey)), pubRsaKey: hexToUint8Array(rsaPublicKeyToHex(RSA_TEST_KEYPAIR.publicKey)),
signature: null,
}) })
keyCache = object() keyCache = object()
keyLoaderFacade = new KeyLoaderFacade(keyCache, userFacade, entityClient, async () => cacheManagementFacade) keyLoaderFacade = new KeyLoaderFacade(keyCache, userFacade, entityClient, async () => cacheManagementFacade)
@ -225,6 +227,7 @@ o.spec("KeyLoaderFacadeTest", function () {
symEncPrivKyberKey: null, symEncPrivKyberKey: null,
symEncPrivRsaKey: encryptRsaKey(currentGroupKey.object, RSA_TEST_KEYPAIR.privateKey), symEncPrivRsaKey: encryptRsaKey(currentGroupKey.object, RSA_TEST_KEYPAIR.privateKey),
pubRsaKey: hexToUint8Array(rsaPublicKeyToHex(RSA_TEST_KEYPAIR.publicKey)), pubRsaKey: hexToUint8Array(rsaPublicKeyToHex(RSA_TEST_KEYPAIR.publicKey)),
signature: null,
}) })
keyCache = object() keyCache = object()
keyLoaderFacade = new KeyLoaderFacade(keyCache, userFacade, entityClient, async () => cacheManagementFacade) keyLoaderFacade = new KeyLoaderFacade(keyCache, userFacade, entityClient, async () => cacheManagementFacade)
@ -254,6 +257,7 @@ o.spec("KeyLoaderFacadeTest", function () {
symEncPrivKyberKey: null, symEncPrivKyberKey: null,
symEncPrivRsaKey: encryptRsaKey(currentGroupKey.object, RSA_TEST_KEYPAIR.privateKey), symEncPrivRsaKey: encryptRsaKey(currentGroupKey.object, RSA_TEST_KEYPAIR.privateKey),
pubRsaKey: hexToUint8Array(rsaPublicKeyToHex(RSA_TEST_KEYPAIR.publicKey)), pubRsaKey: hexToUint8Array(rsaPublicKeyToHex(RSA_TEST_KEYPAIR.publicKey)),
signature: null,
}) })
keyCache = object() keyCache = object()
keyLoaderFacade = new KeyLoaderFacade(keyCache, userFacade, entityClient, async () => cacheManagementFacade) keyLoaderFacade = new KeyLoaderFacade(keyCache, userFacade, entityClient, async () => cacheManagementFacade)

View file

@ -369,6 +369,7 @@ function prepareMultiAdminUserKeyRotation(
symEncPrivKyberKey: object(), symEncPrivKyberKey: object(),
pubRsaKey: null, pubRsaKey: null,
symEncPrivRsaKey: null, symEncPrivRsaKey: null,
signature: null,
}) })
const adminDistPqKeyPair = object<PQKeyPairs>() const adminDistPqKeyPair = object<PQKeyPairs>()
const adminGroupDistributionKeyPairKey = object<Aes256Key>() const adminGroupDistributionKeyPairKey = object<Aes256Key>()
@ -644,6 +645,7 @@ o.spec("KeyRotationFacade", function () {
symEncPrivKyberKey: generatedKeyPair.encryptedKyberPrivKey, symEncPrivKyberKey: generatedKeyPair.encryptedKyberPrivKey,
pubRsaKey: null, pubRsaKey: null,
symEncPrivRsaKey: null, symEncPrivRsaKey: null,
signature: null,
}) })
o(update.keyPair).deepEquals(sentKeyPairs) o(update.keyPair).deepEquals(sentKeyPairs)
o(update.group).equals(groupId) o(update.group).equals(groupId)
@ -1860,6 +1862,7 @@ o.spec("KeyRotationFacade", function () {
symEncPrivKyberKey: generatedKeyPairs.encryptedKyberPrivKey, symEncPrivKyberKey: generatedKeyPairs.encryptedKyberPrivKey,
pubRsaKey: null, pubRsaKey: null,
symEncPrivRsaKey: null, symEncPrivRsaKey: null,
signature: null,
}) })
o(update.keyPair).deepEquals(sentKeyPairs) o(update.keyPair).deepEquals(sentKeyPairs)
o(update.group).equals(groupId) o(update.group).equals(groupId)

View file

@ -27,6 +27,7 @@ const PUBLIC_KEY_GET_OUT: PublicKeyGetOut = {
pubEccKey: stringToUtf8Uint8Array("ecc-key"), pubEccKey: stringToUtf8Uint8Array("ecc-key"),
pubKyberKey: stringToUtf8Uint8Array("kyb-key"), pubKyberKey: stringToUtf8Uint8Array("kyb-key"),
pubRsaKey: null, pubRsaKey: null,
signature: null,
} }
const PUBLIC_KEY: Versioned<PQPublicKeys> = { const PUBLIC_KEY: Versioned<PQPublicKeys> = {
version: 0, version: 0,

View file

@ -58,6 +58,7 @@ o.spec("PublicKeyProviderTest", function () {
pubRsaKey: null, pubRsaKey: null,
pubKyberKey: kyberPublicKey, pubKyberKey: kyberPublicKey,
pubEccKey: x25519PublicKey, pubEccKey: x25519PublicKey,
signature: null,
}) })
when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve(publicKeyGetOut) when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve(publicKeyGetOut)
@ -81,6 +82,7 @@ o.spec("PublicKeyProviderTest", function () {
pubKyberKey: null, pubKyberKey: null,
pubRsaKey: rsaPublicKey, pubRsaKey: rsaPublicKey,
pubKeyVersion: "0", pubKeyVersion: "0",
signature: null,
}) })
when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve(publicKeyGetOut) when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve(publicKeyGetOut)
@ -110,6 +112,7 @@ o.spec("PublicKeyProviderTest", function () {
pubRsaKey, pubRsaKey,
pubKyberKey: null, pubKyberKey: null,
pubEccKey: null, pubEccKey: null,
signature: null,
}), }),
) )
await assertThrows(CryptoError, async () => publicKeyProvider.loadCurrentPubKey(publicKeyIdentifier)) await assertThrows(CryptoError, async () => publicKeyProvider.loadCurrentPubKey(publicKeyIdentifier))
@ -128,6 +131,7 @@ o.spec("PublicKeyProviderTest", function () {
pubRsaKey: null, pubRsaKey: null,
pubKyberKey: kyberPublicKey, pubKyberKey: kyberPublicKey,
pubEccKey: x25519PublicKey, pubEccKey: x25519PublicKey,
signature: null,
}), }),
) )
@ -151,6 +155,7 @@ o.spec("PublicKeyProviderTest", function () {
pubRsaKey: null, pubRsaKey: null,
pubKyberKey: kyberPublicKey, pubKyberKey: kyberPublicKey,
pubEccKey: x25519PublicKey, pubEccKey: x25519PublicKey,
signature: null,
}), }),
) )
o(currentVersion).notEquals(requestedVersion) o(currentVersion).notEquals(requestedVersion)
@ -166,6 +171,7 @@ o.spec("PublicKeyProviderTest", function () {
pubRsaKey, pubRsaKey,
pubKyberKey: null, pubKyberKey: null,
pubEccKey: null, pubEccKey: null,
signature: null,
}), }),
) )
await assertThrows(CryptoError, async () => publicKeyProvider.loadPubKey(publicKeyIdentifier, currentVersion)) await assertThrows(CryptoError, async () => publicKeyProvider.loadPubKey(publicKeyIdentifier, currentVersion))
@ -175,7 +181,13 @@ o.spec("PublicKeyProviderTest", function () {
o.spec("version validation", function () { o.spec("version validation", function () {
o("throws if the version is negative", async function () { o("throws if the version is negative", async function () {
when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve( when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve(
createPublicKeyGetOut({ pubKeyVersion: "-1", pubRsaKey: object(), pubKyberKey: null, pubEccKey: null }), createPublicKeyGetOut({
pubKeyVersion: "-1",
pubRsaKey: object(),
pubKyberKey: null,
pubEccKey: null,
signature: null,
}),
) )
const e = await assertThrows(CryptoError, async () => publicKeyProvider.loadCurrentPubKey(publicKeyIdentifier)) const e = await assertThrows(CryptoError, async () => publicKeyProvider.loadCurrentPubKey(publicKeyIdentifier))
@ -184,7 +196,13 @@ o.spec("PublicKeyProviderTest", function () {
o("throws if the version is not an integer", async function () { o("throws if the version is not an integer", async function () {
when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve( when(serviceExecutor.get(PublicKeyService, matchers.anything())).thenResolve(
createPublicKeyGetOut({ pubKeyVersion: "1.5", pubRsaKey: object(), pubKyberKey: null, pubEccKey: null }), createPublicKeyGetOut({
pubKeyVersion: "1.5",
pubRsaKey: object(),
pubKyberKey: null,
pubEccKey: null,
signature: null,
}),
) )
const e = await assertThrows(CryptoError, async () => publicKeyProvider.loadCurrentPubKey(publicKeyIdentifier)) const e = await assertThrows(CryptoError, async () => publicKeyProvider.loadCurrentPubKey(publicKeyIdentifier))
@ -218,6 +236,7 @@ o.spec("PublicKeyProvider - convert keys", function () {
pubKyberKey: kyberPublicKey, pubKyberKey: kyberPublicKey,
pubRsaKey: null, pubRsaKey: null,
pubKeyVersion: "1", pubKeyVersion: "1",
signature: null,
}) })
const fromPublicKeyGetOut = publicKeyProvider.convertFromPublicKeyGetOut(publicKeyGetOut) const fromPublicKeyGetOut = publicKeyProvider.convertFromPublicKeyGetOut(publicKeyGetOut)
@ -240,6 +259,7 @@ o.spec("PublicKeyProvider - convert keys", function () {
pubKyberKey: null, pubKyberKey: null,
pubRsaKey: rsaPublicKey, pubRsaKey: rsaPublicKey,
pubKeyVersion: "1", pubKeyVersion: "1",
signature: null,
}) })
const fromPublicKeyGetOut = publicKeyProvider.convertFromPublicKeyGetOut(publicKeyGetOut) const fromPublicKeyGetOut = publicKeyProvider.convertFromPublicKeyGetOut(publicKeyGetOut)
@ -264,6 +284,7 @@ o.spec("PublicKeyProvider - convert keys", function () {
pubKyberKey: null, pubKyberKey: null,
pubRsaKey: rsaPublicKey, pubRsaKey: rsaPublicKey,
pubKeyVersion: "1", pubKeyVersion: "1",
signature: null,
}) })
const fromPublicKeyGetOut = publicKeyProvider.convertFromPublicKeyGetOut(publicKeyGetOut) const fromPublicKeyGetOut = publicKeyProvider.convertFromPublicKeyGetOut(publicKeyGetOut)
@ -292,6 +313,7 @@ o.spec("PublicKeyProvider - convert keys", function () {
pubKyberKey: null, pubKyberKey: null,
pubRsaKey: null, pubRsaKey: null,
pubKeyVersion: "1", pubKeyVersion: "1",
signature: null,
}), }),
), ),
) )
@ -305,6 +327,7 @@ o.spec("PublicKeyProvider - convert keys", function () {
pubKyberKey: null, pubKyberKey: null,
pubRsaKey: null, pubRsaKey: null,
pubKeyVersion: "1", pubKeyVersion: "1",
signature: null,
}), }),
), ),
) )
@ -319,6 +342,7 @@ o.spec("PublicKeyProvider - convert keys", function () {
pubKyberKey: kyberPublicKey, pubKyberKey: kyberPublicKey,
pubRsaKey: null, pubRsaKey: null,
pubKeyVersion: "1", pubKeyVersion: "1",
signature: null,
}), }),
), ),
) )

View file

@ -155,6 +155,7 @@ mod tests {
.unwrap(), .unwrap(),
), ),
symEncPrivRsaKey: Some(generate_random_string::<17>().as_bytes().to_vec()), symEncPrivRsaKey: Some(generate_random_string::<17>().as_bytes().to_vec()),
signature: None,
}; };
let decrypted_key_pair = let decrypted_key_pair =
@ -196,6 +197,7 @@ mod tests {
) )
.unwrap(), .unwrap(),
), ),
signature: None,
}; };
let decrypted_key_pair = let decrypted_key_pair =
@ -248,6 +250,7 @@ mod tests {
) )
.unwrap(), .unwrap(),
), ),
signature: None,
}; };
let decrypted_key_pair = let decrypted_key_pair =

View file

@ -179,6 +179,7 @@ mod tests {
pubKeyVersion: current_key_version as i64, pubKeyVersion: current_key_version as i64,
pubKyberKey: Some(pub_key_for_mock.clone()), pubKyberKey: Some(pub_key_for_mock.clone()),
pubRsaKey: None, pubRsaKey: None,
signature: None,
}) })
}); });
let public_key_provider = make_public_key_provider(service_executor); let public_key_provider = make_public_key_provider(service_executor);
@ -211,6 +212,7 @@ mod tests {
pubKeyVersion: current_key_version as i64, pubKeyVersion: current_key_version as i64,
pubKyberKey: None, pubKyberKey: None,
pubRsaKey: Some(pub_key_for_mock.clone()), pubRsaKey: Some(pub_key_for_mock.clone()),
signature: None,
}) })
}); });
let public_key_provider = make_public_key_provider(service_executor); let public_key_provider = make_public_key_provider(service_executor);
@ -258,6 +260,7 @@ mod tests {
pubKeyVersion: requested_version as i64, pubKeyVersion: requested_version as i64,
pubKyberKey: Some(pub_key_for_mock.clone()), pubKyberKey: Some(pub_key_for_mock.clone()),
pubRsaKey: None, pubRsaKey: None,
signature: None,
}) })
}); });
let public_key_provider = make_public_key_provider(service_executor); let public_key_provider = make_public_key_provider(service_executor);
@ -296,6 +299,7 @@ mod tests {
pubKeyVersion: current_key_version as i64, pubKeyVersion: current_key_version as i64,
pubKyberKey: Some(pub_key_for_mock.clone()), pubKyberKey: Some(pub_key_for_mock.clone()),
pubRsaKey: None, pubRsaKey: None,
signature: None,
}) })
}); });
let public_key_provider = make_public_key_provider(service_executor); let public_key_provider = make_public_key_provider(service_executor);
@ -333,6 +337,7 @@ mod tests {
pubKeyVersion: requested_version as i64, pubKeyVersion: requested_version as i64,
pubKyberKey: None, pubKyberKey: None,
pubRsaKey: Some(pub_key_for_mock.clone()), pubRsaKey: Some(pub_key_for_mock.clone()),
signature: None,
}) })
}); });
let public_key_provider = make_public_key_provider(service_executor); let public_key_provider = make_public_key_provider(service_executor);
@ -375,6 +380,7 @@ mod tests {
pubKeyVersion: bad_version_from_server, pubKeyVersion: bad_version_from_server,
pubKyberKey: Some(pub_key_for_mock.clone()), pubKyberKey: Some(pub_key_for_mock.clone()),
pubRsaKey: None, pubRsaKey: None,
signature: None,
}) })
}); });
let public_key_provider = make_public_key_provider(service_executor); let public_key_provider = make_public_key_provider(service_executor);

View file

@ -27,6 +27,8 @@ pub struct KeyPair {
#[serde(rename = "2147")] #[serde(rename = "2147")]
#[serde(with = "serde_bytes")] #[serde(with = "serde_bytes")]
pub symEncPrivKyberKey: Option<Vec<u8>>, pub symEncPrivKyberKey: Option<Vec<u8>>,
#[serde(rename = "2589")]
pub signature: Option<PublicKeySignature>,
} }
impl Entity for KeyPair { impl Entity for KeyPair {
@ -81,9 +83,11 @@ pub struct Group {
#[serde(rename = "2092")] #[serde(rename = "2092")]
pub storageCounter: Option<GeneratedId>, pub storageCounter: Option<GeneratedId>,
#[serde(rename = "2273")] #[serde(rename = "2273")]
pub formerGroupKeys: Option<GroupKeysRef>, pub formerGroupKeys: GroupKeysRef,
#[serde(rename = "2475")] #[serde(rename = "2475")]
pub pubAdminGroupEncGKey: Option<PubEncKeyData>, pub pubAdminGroupEncGKey: Option<PubEncKeyData>,
#[serde(rename = "2588")]
pub identityKeyPair: Option<IdentityKeyPair>,
} }
impl Entity for Group { impl Entity for Group {
@ -1095,6 +1099,8 @@ pub struct PublicKeyGetOut {
#[serde(rename = "2149")] #[serde(rename = "2149")]
#[serde(with = "serde_bytes")] #[serde(with = "serde_bytes")]
pub pubKyberKey: Option<Vec<u8>>, pub pubKyberKey: Option<Vec<u8>>,
#[serde(rename = "2611")]
pub signature: Option<PublicKeySignature>,
} }
impl Entity for PublicKeyGetOut { impl Entity for PublicKeyGetOut {
@ -3894,7 +3900,7 @@ pub struct UserGroupRoot {
#[serde(rename = "1624")] #[serde(rename = "1624")]
pub invitations: GeneratedId, pub invitations: GeneratedId,
#[serde(rename = "2294")] #[serde(rename = "2294")]
pub keyRotations: Option<KeyRotationsRef>, pub keyRotations: KeyRotationsRef,
#[serde(rename = "2383")] #[serde(rename = "2383")]
pub groupKeyUpdates: Option<GroupKeyUpdatesRef>, pub groupKeyUpdates: Option<GroupKeyUpdatesRef>,
} }
@ -5985,3 +5991,155 @@ impl Entity for PatchList {
} }
} }
} }
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct IdentityKeyPair {
#[serde(rename = "2576")]
pub _id: Option<CustomId>,
#[serde(rename = "2577")]
pub identityKeyVersion: i64,
#[serde(rename = "2578")]
pub encryptingKeyVersion: i64,
#[serde(rename = "2579")]
#[serde(with = "serde_bytes")]
pub publicEd25519Key: Vec<u8>,
#[serde(rename = "2580")]
#[serde(with = "serde_bytes")]
pub privateEd25519Key: Vec<u8>,
#[serde(rename = "2581")]
pub publicKeyMac: KeyMac,
}
impl Entity for IdentityKeyPair {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2575),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct PublicKeySignature {
#[serde(rename = "2583")]
pub _id: Option<CustomId>,
#[serde(rename = "2584")]
#[serde(with = "serde_bytes")]
pub signature: Vec<u8>,
#[serde(rename = "2585")]
pub signingKeyVersion: i64,
#[serde(rename = "2586")]
pub signatureType: i64,
#[serde(rename = "2587")]
pub publicKeyVersion: i64,
}
impl Entity for PublicKeySignature {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2582),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct IdentityKeyGetIn {
#[serde(rename = "2591")]
pub _format: i64,
#[serde(rename = "2592")]
pub version: Option<i64>,
#[serde(rename = "2593")]
pub identifierType: i64,
#[serde(rename = "2594")]
pub identifier: String,
}
impl Entity for IdentityKeyGetIn {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2590),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct IdentityKeyGetOut {
#[serde(rename = "2596")]
pub _format: i64,
#[serde(rename = "2597")]
#[serde(with = "serde_bytes")]
pub publicIdentityKey: Vec<u8>,
#[serde(rename = "2598")]
pub publicIdentityKeyVersion: i64,
}
impl Entity for IdentityKeyGetOut {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2595),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct IdentityKeyPostIn {
#[serde(rename = "2600")]
pub _format: i64,
#[serde(rename = "2601")]
pub identityKeyPair: IdentityKeyPair,
#[serde(rename = "2602")]
pub signatures: Vec<PublicKeySignature>,
}
impl Entity for IdentityKeyPostIn {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2599),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct Rollout {
#[serde(rename = "2605")]
pub _id: Option<CustomId>,
#[serde(rename = "2606")]
pub rolloutType: i64,
}
impl Entity for Rollout {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2604),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct RolloutGetOut {
#[serde(rename = "2608")]
pub _format: i64,
#[serde(rename = "2609")]
pub rollouts: Vec<Rollout>,
}
impl Entity for RolloutGetOut {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Sys,
type_id: TypeId::from(2607),
}
}
}

View file

@ -3996,3 +3996,41 @@ impl Entity for ResolveConversationsServiceGetOut {
} }
} }
} }
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct UserAccountPostOut {
#[serde(rename = "1665")]
pub _format: i64,
#[serde(rename = "1666")]
pub userId: GeneratedId,
#[serde(rename = "1667")]
pub userGroup: GeneratedId,
}
impl Entity for UserAccountPostOut {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Tutanota,
type_id: TypeId::from(1664),
}
}
}
#[derive(uniffi::Record, Clone, Serialize, Deserialize)]
#[cfg_attr(any(test, feature = "testing"), derive(PartialEq, Debug))]
pub struct MailGroupPostOut {
#[serde(rename = "1669")]
pub _format: i64,
#[serde(rename = "1670")]
pub mailGroup: GeneratedId,
}
impl Entity for MailGroupPostOut {
fn type_ref() -> TypeRef {
TypeRef {
app: AppName::Tutanota,
type_id: TypeId::from(1668),
}
}
}

View file

@ -1485,7 +1485,9 @@ mod tests {
FORMAT_FIELD, ID_FIELD, OWNER_GROUP_FIELD, PERMISSIONS_FIELD, FORMAT_FIELD, ID_FIELD, OWNER_GROUP_FIELD, PERMISSIONS_FIELD,
}; };
use crate::entities::generated::sys; use crate::entities::generated::sys;
use crate::entities::generated::sys::{BucketKey, Group, GroupInfo, InstanceSessionKey}; use crate::entities::generated::sys::{
BucketKey, Group, GroupInfo, GroupKeysRef, InstanceSessionKey,
};
use crate::entities::generated::tutanota::{ use crate::entities::generated::tutanota::{
CalendarEventUidIndex, Mail, MailAddress, MailDetailsBlob, MailboxGroupRoot, CalendarEventUidIndex, Mail, MailAddress, MailDetailsBlob, MailboxGroupRoot,
OutOfOfficeNotification, OutOfOfficeNotificationRecipientList, OutOfOfficeNotification, OutOfOfficeNotificationRecipientList,
@ -1774,7 +1776,13 @@ mod tests {
.resolve_server_type_ref(&sys::PubEncKeyData::type_ref()) .resolve_server_type_ref(&sys::PubEncKeyData::type_ref())
.unwrap(); .unwrap();
let group = generate_random_group(None, None); let group = generate_random_group(
None,
GroupKeysRef {
_id: Some(CustomId::test_random()),
list: GeneratedId::test_random(),
},
);
let result = mapper.serialize_entity(group.clone()).unwrap(); let result = mapper.serialize_entity(group.clone()).unwrap();
assert_eq!( assert_eq!(
&group.groupInfo, &group.groupInfo,

View file

@ -70,7 +70,7 @@ impl KeyLoaderFacade {
current_group_key: &VersionedAesKey, current_group_key: &VersionedAesKey,
target_key_version: u64, target_key_version: u64,
) -> Result<FormerGroupKey, KeyLoadError> { ) -> Result<FormerGroupKey, KeyLoadError> {
let list_id = group.formerGroupKeys.clone().unwrap().list; let list_id = group.formerGroupKeys.clone().list;
let start_id = CustomId::from_custom_string(&current_group_key.version.to_string()); let start_id = CustomId::from_custom_string(&current_group_key.version.to_string());
let amount_of_keys_including_target = let amount_of_keys_including_target =
@ -294,7 +294,7 @@ impl KeyLoaderFacade {
if convert_version_to_u64(group.groupKeyVersion) == sym_group_key.version { if convert_version_to_u64(group.groupKeyVersion) == sym_group_key.version {
key_pair = group.currentKeys key_pair = group.currentKeys
} else { } else {
let former_keys_list = group.formerGroupKeys.unwrap().list; let former_keys_list = group.formerGroupKeys.list;
// we load by the version and thus can be sure that we are able to decrypt this key // we load by the version and thus can be sure that we are able to decrypt this key
let former_group_key: GroupKey = self let former_group_key: GroupKey = self
.entity_client .entity_client
@ -385,7 +385,16 @@ mod tests {
} }
fn generate_group_data() -> (Group, VersionedAesKey) { fn generate_group_data() -> (Group, VersionedAesKey) {
(generate_random_group(None, None), generate_group_key(1)) (
generate_random_group(
None,
GroupKeysRef {
_id: Some(CustomId::test_random()),
list: GeneratedId::test_random(),
},
),
generate_group_key(1),
)
} }
fn generate_group_with_keys( fn generate_group_with_keys(
@ -402,6 +411,7 @@ mod tests {
symEncPrivEccKey: None, symEncPrivEccKey: None,
symEncPrivKyberKey: None, symEncPrivKyberKey: None,
symEncPrivRsaKey: None, symEncPrivRsaKey: None,
signature: None,
}; };
match current_key_pair { match current_key_pair {
AsymmetricKeyPair::RSAX25519KeyPair(_) => { AsymmetricKeyPair::RSAX25519KeyPair(_) => {
@ -441,10 +451,10 @@ mod tests {
let mut group = generate_random_group( let mut group = generate_random_group(
Some(current_keys), Some(current_keys),
Some(GroupKeysRef { GroupKeysRef {
_id: Default::default(), _id: Default::default(),
list: GeneratedId("list".to_owned()), // Refers to `former_keys` list: GeneratedId("list".to_owned()), // Refers to `former_keys`
}), },
); );
group.groupKeyVersion = current_group_key.version as i64; group.groupKeyVersion = current_group_key.version as i64;
group group
@ -529,6 +539,7 @@ mod tests {
.unwrap(), .unwrap(),
), ),
symEncPrivRsaKey: None, symEncPrivRsaKey: None,
signature: None,
}), }),
}, },
); );
@ -559,7 +570,7 @@ mod tests {
typed_entity_client_mock typed_entity_client_mock
.expect_load_range::<GroupKey, CustomId>() .expect_load_range::<GroupKey, CustomId>()
.with( .with(
predicate::eq(group.formerGroupKeys.unwrap().list), predicate::eq(group.formerGroupKeys.list),
predicate::eq(CustomId::from_custom_string( predicate::eq(CustomId::from_custom_string(
&current_group_key.version.to_string(), &current_group_key.version.to_string(),
)), )),
@ -582,7 +593,13 @@ mod tests {
randomizer: &RandomizerFacade, randomizer: &RandomizerFacade,
) -> (MockUserFacade, MockTypedEntityClient) { ) -> (MockUserFacade, MockTypedEntityClient) {
let user_group_key = generate_group_key(0); let user_group_key = generate_group_key(0);
let user_group = generate_random_group(None, None); let user_group = generate_random_group(
None,
GroupKeysRef {
_id: Some(CustomId::test_random()),
list: GeneratedId::test_random(),
},
);
let mut user_facade_mock = MockUserFacade::default(); let mut user_facade_mock = MockUserFacade::default();
{ {

View file

@ -44,6 +44,9 @@ use crate::entities::generated::sys::GiftCardGetReturn;
use crate::entities::generated::sys::GiftCardDeleteData; use crate::entities::generated::sys::GiftCardDeleteData;
use crate::entities::generated::sys::GroupKeyRotationInfoGetOut; use crate::entities::generated::sys::GroupKeyRotationInfoGetOut;
use crate::entities::generated::sys::GroupKeyRotationPostIn; use crate::entities::generated::sys::GroupKeyRotationPostIn;
use crate::entities::generated::sys::IdentityKeyPostIn;
use crate::entities::generated::sys::IdentityKeyGetIn;
use crate::entities::generated::sys::IdentityKeyGetOut;
use crate::entities::generated::sys::InvoiceDataGetIn; use crate::entities::generated::sys::InvoiceDataGetIn;
use crate::entities::generated::sys::InvoiceDataGetOut; use crate::entities::generated::sys::InvoiceDataGetOut;
use crate::entities::generated::sys::LocationServiceGetReturn; use crate::entities::generated::sys::LocationServiceGetReturn;
@ -76,6 +79,7 @@ use crate::entities::generated::sys::RegistrationServiceData;
use crate::entities::generated::sys::RegistrationReturn; use crate::entities::generated::sys::RegistrationReturn;
use crate::entities::generated::sys::ResetFactorsDeleteData; use crate::entities::generated::sys::ResetFactorsDeleteData;
use crate::entities::generated::sys::ResetPasswordPostIn; use crate::entities::generated::sys::ResetPasswordPostIn;
use crate::entities::generated::sys::RolloutGetOut;
use crate::entities::generated::sys::SaltData; use crate::entities::generated::sys::SaltData;
use crate::entities::generated::sys::SaltReturn; use crate::entities::generated::sys::SaltReturn;
use crate::entities::generated::sys::SecondFactorAuthAllowedReturn; use crate::entities::generated::sys::SecondFactorAuthAllowedReturn;
@ -102,7 +106,7 @@ use crate::entities::generated::sys::VersionData;
use crate::entities::generated::sys::VersionReturn; use crate::entities::generated::sys::VersionReturn;
pub struct AdminGroupKeyRotationService; pub struct AdminGroupKeyRotationService;
crate::service_impl!(declare, AdminGroupKeyRotationService, "sys/admingroupkeyrotationservice", 128); crate::service_impl!(declare, AdminGroupKeyRotationService, "sys/admingroupkeyrotationservice", 129);
crate::service_impl!(POST, AdminGroupKeyRotationService, AdminGroupKeyRotationPostIn, ()); crate::service_impl!(POST, AdminGroupKeyRotationService, AdminGroupKeyRotationPostIn, ());
crate::service_impl!(GET, AdminGroupKeyRotationService, (), AdminGroupKeyRotationGetOut); crate::service_impl!(GET, AdminGroupKeyRotationService, (), AdminGroupKeyRotationGetOut);
crate::service_impl!(PUT, AdminGroupKeyRotationService, AdminGroupKeyRotationPutIn, ()); crate::service_impl!(PUT, AdminGroupKeyRotationService, AdminGroupKeyRotationPutIn, ());
@ -110,25 +114,25 @@ crate::service_impl!(PUT, AdminGroupKeyRotationService, AdminGroupKeyRotationPut
pub struct AffiliatePartnerKpiService; pub struct AffiliatePartnerKpiService;
crate::service_impl!(declare, AffiliatePartnerKpiService, "sys/affiliatepartnerkpiservice", 128); crate::service_impl!(declare, AffiliatePartnerKpiService, "sys/affiliatepartnerkpiservice", 129);
crate::service_impl!(GET, AffiliatePartnerKpiService, (), AffiliatePartnerKpiServiceGetOut); crate::service_impl!(GET, AffiliatePartnerKpiService, (), AffiliatePartnerKpiServiceGetOut);
pub struct AlarmService; pub struct AlarmService;
crate::service_impl!(declare, AlarmService, "sys/alarmservice", 128); crate::service_impl!(declare, AlarmService, "sys/alarmservice", 129);
crate::service_impl!(POST, AlarmService, AlarmServicePost, ()); crate::service_impl!(POST, AlarmService, AlarmServicePost, ());
pub struct AppStoreSubscriptionService; pub struct AppStoreSubscriptionService;
crate::service_impl!(declare, AppStoreSubscriptionService, "sys/appstoresubscriptionservice", 128); crate::service_impl!(declare, AppStoreSubscriptionService, "sys/appstoresubscriptionservice", 129);
crate::service_impl!(GET, AppStoreSubscriptionService, AppStoreSubscriptionGetIn, AppStoreSubscriptionGetOut); crate::service_impl!(GET, AppStoreSubscriptionService, AppStoreSubscriptionGetIn, AppStoreSubscriptionGetOut);
pub struct AutoLoginService; pub struct AutoLoginService;
crate::service_impl!(declare, AutoLoginService, "sys/autologinservice", 128); crate::service_impl!(declare, AutoLoginService, "sys/autologinservice", 129);
crate::service_impl!(POST, AutoLoginService, AutoLoginDataReturn, AutoLoginPostReturn); crate::service_impl!(POST, AutoLoginService, AutoLoginDataReturn, AutoLoginPostReturn);
crate::service_impl!(GET, AutoLoginService, AutoLoginDataGet, AutoLoginDataReturn); crate::service_impl!(GET, AutoLoginService, AutoLoginDataGet, AutoLoginDataReturn);
crate::service_impl!(DELETE, AutoLoginService, AutoLoginDataDelete, ()); crate::service_impl!(DELETE, AutoLoginService, AutoLoginDataDelete, ());
@ -136,7 +140,7 @@ crate::service_impl!(DELETE, AutoLoginService, AutoLoginDataDelete, ());
pub struct BrandingDomainService; pub struct BrandingDomainService;
crate::service_impl!(declare, BrandingDomainService, "sys/brandingdomainservice", 128); crate::service_impl!(declare, BrandingDomainService, "sys/brandingdomainservice", 129);
crate::service_impl!(POST, BrandingDomainService, BrandingDomainData, ()); crate::service_impl!(POST, BrandingDomainService, BrandingDomainData, ());
crate::service_impl!(GET, BrandingDomainService, (), BrandingDomainGetReturn); crate::service_impl!(GET, BrandingDomainService, (), BrandingDomainGetReturn);
crate::service_impl!(PUT, BrandingDomainService, BrandingDomainData, ()); crate::service_impl!(PUT, BrandingDomainService, BrandingDomainData, ());
@ -145,37 +149,37 @@ crate::service_impl!(DELETE, BrandingDomainService, BrandingDomainDeleteData, ()
pub struct ChangeKdfService; pub struct ChangeKdfService;
crate::service_impl!(declare, ChangeKdfService, "sys/changekdfservice", 128); crate::service_impl!(declare, ChangeKdfService, "sys/changekdfservice", 129);
crate::service_impl!(POST, ChangeKdfService, ChangeKdfPostIn, ()); crate::service_impl!(POST, ChangeKdfService, ChangeKdfPostIn, ());
pub struct ChangePasswordService; pub struct ChangePasswordService;
crate::service_impl!(declare, ChangePasswordService, "sys/changepasswordservice", 128); crate::service_impl!(declare, ChangePasswordService, "sys/changepasswordservice", 129);
crate::service_impl!(POST, ChangePasswordService, ChangePasswordPostIn, ()); crate::service_impl!(POST, ChangePasswordService, ChangePasswordPostIn, ());
pub struct CloseSessionService; pub struct CloseSessionService;
crate::service_impl!(declare, CloseSessionService, "sys/closesessionservice", 128); crate::service_impl!(declare, CloseSessionService, "sys/closesessionservice", 129);
crate::service_impl!(POST, CloseSessionService, CloseSessionServicePost, ()); crate::service_impl!(POST, CloseSessionService, CloseSessionServicePost, ());
pub struct CreateCustomerServerProperties; pub struct CreateCustomerServerProperties;
crate::service_impl!(declare, CreateCustomerServerProperties, "sys/createcustomerserverproperties", 128); crate::service_impl!(declare, CreateCustomerServerProperties, "sys/createcustomerserverproperties", 129);
crate::service_impl!(POST, CreateCustomerServerProperties, CreateCustomerServerPropertiesData, CreateCustomerServerPropertiesReturn); crate::service_impl!(POST, CreateCustomerServerProperties, CreateCustomerServerPropertiesData, CreateCustomerServerPropertiesReturn);
pub struct CustomDomainCheckService; pub struct CustomDomainCheckService;
crate::service_impl!(declare, CustomDomainCheckService, "sys/customdomaincheckservice", 128); crate::service_impl!(declare, CustomDomainCheckService, "sys/customdomaincheckservice", 129);
crate::service_impl!(GET, CustomDomainCheckService, CustomDomainCheckGetIn, CustomDomainCheckGetOut); crate::service_impl!(GET, CustomDomainCheckService, CustomDomainCheckGetIn, CustomDomainCheckGetOut);
pub struct CustomDomainService; pub struct CustomDomainService;
crate::service_impl!(declare, CustomDomainService, "sys/customdomainservice", 128); crate::service_impl!(declare, CustomDomainService, "sys/customdomainservice", 129);
crate::service_impl!(POST, CustomDomainService, CustomDomainData, CustomDomainReturn); crate::service_impl!(POST, CustomDomainService, CustomDomainData, CustomDomainReturn);
crate::service_impl!(PUT, CustomDomainService, CustomDomainData, ()); crate::service_impl!(PUT, CustomDomainService, CustomDomainData, ());
crate::service_impl!(DELETE, CustomDomainService, CustomDomainData, ()); crate::service_impl!(DELETE, CustomDomainService, CustomDomainData, ());
@ -183,50 +187,50 @@ crate::service_impl!(DELETE, CustomDomainService, CustomDomainData, ());
pub struct CustomerAccountTerminationService; pub struct CustomerAccountTerminationService;
crate::service_impl!(declare, CustomerAccountTerminationService, "sys/customeraccountterminationservice", 128); crate::service_impl!(declare, CustomerAccountTerminationService, "sys/customeraccountterminationservice", 129);
crate::service_impl!(POST, CustomerAccountTerminationService, CustomerAccountTerminationPostIn, CustomerAccountTerminationPostOut); crate::service_impl!(POST, CustomerAccountTerminationService, CustomerAccountTerminationPostIn, CustomerAccountTerminationPostOut);
pub struct CustomerPublicKeyService; pub struct CustomerPublicKeyService;
crate::service_impl!(declare, CustomerPublicKeyService, "sys/customerpublickeyservice", 128); crate::service_impl!(declare, CustomerPublicKeyService, "sys/customerpublickeyservice", 129);
crate::service_impl!(GET, CustomerPublicKeyService, (), PublicKeyGetOut); crate::service_impl!(GET, CustomerPublicKeyService, (), PublicKeyGetOut);
pub struct CustomerService; pub struct CustomerService;
crate::service_impl!(declare, CustomerService, "sys/customerservice", 128); crate::service_impl!(declare, CustomerService, "sys/customerservice", 129);
crate::service_impl!(DELETE, CustomerService, DeleteCustomerData, ()); crate::service_impl!(DELETE, CustomerService, DeleteCustomerData, ());
pub struct DebitService; pub struct DebitService;
crate::service_impl!(declare, DebitService, "sys/debitservice", 128); crate::service_impl!(declare, DebitService, "sys/debitservice", 129);
crate::service_impl!(PUT, DebitService, DebitServicePutData, ()); crate::service_impl!(PUT, DebitService, DebitServicePutData, ());
pub struct DomainMailAddressAvailabilityService; pub struct DomainMailAddressAvailabilityService;
crate::service_impl!(declare, DomainMailAddressAvailabilityService, "sys/domainmailaddressavailabilityservice", 128); crate::service_impl!(declare, DomainMailAddressAvailabilityService, "sys/domainmailaddressavailabilityservice", 129);
crate::service_impl!(GET, DomainMailAddressAvailabilityService, DomainMailAddressAvailabilityData, DomainMailAddressAvailabilityReturn); crate::service_impl!(GET, DomainMailAddressAvailabilityService, DomainMailAddressAvailabilityData, DomainMailAddressAvailabilityReturn);
pub struct ExternalPropertiesService; pub struct ExternalPropertiesService;
crate::service_impl!(declare, ExternalPropertiesService, "sys/externalpropertiesservice", 128); crate::service_impl!(declare, ExternalPropertiesService, "sys/externalpropertiesservice", 129);
crate::service_impl!(GET, ExternalPropertiesService, (), ExternalPropertiesReturn); crate::service_impl!(GET, ExternalPropertiesService, (), ExternalPropertiesReturn);
pub struct GiftCardRedeemService; pub struct GiftCardRedeemService;
crate::service_impl!(declare, GiftCardRedeemService, "sys/giftcardredeemservice", 128); crate::service_impl!(declare, GiftCardRedeemService, "sys/giftcardredeemservice", 129);
crate::service_impl!(POST, GiftCardRedeemService, GiftCardRedeemData, ()); crate::service_impl!(POST, GiftCardRedeemService, GiftCardRedeemData, ());
crate::service_impl!(GET, GiftCardRedeemService, GiftCardRedeemData, GiftCardRedeemGetReturn); crate::service_impl!(GET, GiftCardRedeemService, GiftCardRedeemData, GiftCardRedeemGetReturn);
pub struct GiftCardService; pub struct GiftCardService;
crate::service_impl!(declare, GiftCardService, "sys/giftcardservice", 128); crate::service_impl!(declare, GiftCardService, "sys/giftcardservice", 129);
crate::service_impl!(POST, GiftCardService, GiftCardCreateData, GiftCardCreateReturn); crate::service_impl!(POST, GiftCardService, GiftCardCreateData, GiftCardCreateReturn);
crate::service_impl!(GET, GiftCardService, (), GiftCardGetReturn); crate::service_impl!(GET, GiftCardService, (), GiftCardGetReturn);
crate::service_impl!(DELETE, GiftCardService, GiftCardDeleteData, ()); crate::service_impl!(DELETE, GiftCardService, GiftCardDeleteData, ());
@ -234,31 +238,38 @@ crate::service_impl!(DELETE, GiftCardService, GiftCardDeleteData, ());
pub struct GroupKeyRotationInfoService; pub struct GroupKeyRotationInfoService;
crate::service_impl!(declare, GroupKeyRotationInfoService, "sys/groupkeyrotationinfoservice", 128); crate::service_impl!(declare, GroupKeyRotationInfoService, "sys/groupkeyrotationinfoservice", 129);
crate::service_impl!(GET, GroupKeyRotationInfoService, (), GroupKeyRotationInfoGetOut); crate::service_impl!(GET, GroupKeyRotationInfoService, (), GroupKeyRotationInfoGetOut);
pub struct GroupKeyRotationService; pub struct GroupKeyRotationService;
crate::service_impl!(declare, GroupKeyRotationService, "sys/groupkeyrotationservice", 128); crate::service_impl!(declare, GroupKeyRotationService, "sys/groupkeyrotationservice", 129);
crate::service_impl!(POST, GroupKeyRotationService, GroupKeyRotationPostIn, ()); crate::service_impl!(POST, GroupKeyRotationService, GroupKeyRotationPostIn, ());
pub struct IdentityKeyService;
crate::service_impl!(declare, IdentityKeyService, "sys/identitykeyservice", 129);
crate::service_impl!(POST, IdentityKeyService, IdentityKeyPostIn, ());
crate::service_impl!(GET, IdentityKeyService, IdentityKeyGetIn, IdentityKeyGetOut);
pub struct InvoiceDataService; pub struct InvoiceDataService;
crate::service_impl!(declare, InvoiceDataService, "sys/invoicedataservice", 128); crate::service_impl!(declare, InvoiceDataService, "sys/invoicedataservice", 129);
crate::service_impl!(GET, InvoiceDataService, InvoiceDataGetIn, InvoiceDataGetOut); crate::service_impl!(GET, InvoiceDataService, InvoiceDataGetIn, InvoiceDataGetOut);
pub struct LocationService; pub struct LocationService;
crate::service_impl!(declare, LocationService, "sys/locationservice", 128); crate::service_impl!(declare, LocationService, "sys/locationservice", 129);
crate::service_impl!(GET, LocationService, (), LocationServiceGetReturn); crate::service_impl!(GET, LocationService, (), LocationServiceGetReturn);
pub struct MailAddressAliasService; pub struct MailAddressAliasService;
crate::service_impl!(declare, MailAddressAliasService, "sys/mailaddressaliasservice", 128); crate::service_impl!(declare, MailAddressAliasService, "sys/mailaddressaliasservice", 129);
crate::service_impl!(POST, MailAddressAliasService, MailAddressAliasServiceData, ()); crate::service_impl!(POST, MailAddressAliasService, MailAddressAliasServiceData, ());
crate::service_impl!(GET, MailAddressAliasService, MailAddressAliasGetIn, MailAddressAliasServiceReturn); crate::service_impl!(GET, MailAddressAliasService, MailAddressAliasGetIn, MailAddressAliasServiceReturn);
crate::service_impl!(DELETE, MailAddressAliasService, MailAddressAliasServiceDataDelete, ()); crate::service_impl!(DELETE, MailAddressAliasService, MailAddressAliasServiceDataDelete, ());
@ -266,7 +277,7 @@ crate::service_impl!(DELETE, MailAddressAliasService, MailAddressAliasServiceDat
pub struct MembershipService; pub struct MembershipService;
crate::service_impl!(declare, MembershipService, "sys/membershipservice", 128); crate::service_impl!(declare, MembershipService, "sys/membershipservice", 129);
crate::service_impl!(POST, MembershipService, MembershipAddData, ()); crate::service_impl!(POST, MembershipService, MembershipAddData, ());
crate::service_impl!(PUT, MembershipService, MembershipPutIn, ()); crate::service_impl!(PUT, MembershipService, MembershipPutIn, ());
crate::service_impl!(DELETE, MembershipService, MembershipRemoveData, ()); crate::service_impl!(DELETE, MembershipService, MembershipRemoveData, ());
@ -274,13 +285,13 @@ crate::service_impl!(DELETE, MembershipService, MembershipRemoveData, ());
pub struct MultipleMailAddressAvailabilityService; pub struct MultipleMailAddressAvailabilityService;
crate::service_impl!(declare, MultipleMailAddressAvailabilityService, "sys/multiplemailaddressavailabilityservice", 128); crate::service_impl!(declare, MultipleMailAddressAvailabilityService, "sys/multiplemailaddressavailabilityservice", 129);
crate::service_impl!(GET, MultipleMailAddressAvailabilityService, MultipleMailAddressAvailabilityData, MultipleMailAddressAvailabilityReturn); crate::service_impl!(GET, MultipleMailAddressAvailabilityService, MultipleMailAddressAvailabilityData, MultipleMailAddressAvailabilityReturn);
pub struct PaymentDataService; pub struct PaymentDataService;
crate::service_impl!(declare, PaymentDataService, "sys/paymentdataservice", 128); crate::service_impl!(declare, PaymentDataService, "sys/paymentdataservice", 129);
crate::service_impl!(POST, PaymentDataService, PaymentDataServicePostData, ()); crate::service_impl!(POST, PaymentDataService, PaymentDataServicePostData, ());
crate::service_impl!(GET, PaymentDataService, PaymentDataServiceGetData, PaymentDataServiceGetReturn); crate::service_impl!(GET, PaymentDataService, PaymentDataServiceGetData, PaymentDataServiceGetReturn);
crate::service_impl!(PUT, PaymentDataService, PaymentDataServicePutData, PaymentDataServicePutReturn); crate::service_impl!(PUT, PaymentDataService, PaymentDataServicePutData, PaymentDataServicePutReturn);
@ -288,71 +299,77 @@ crate::service_impl!(PUT, PaymentDataService, PaymentDataServicePutData, Payment
pub struct PlanService; pub struct PlanService;
crate::service_impl!(declare, PlanService, "sys/planservice", 128); crate::service_impl!(declare, PlanService, "sys/planservice", 129);
crate::service_impl!(GET, PlanService, (), PlanServiceGetOut); crate::service_impl!(GET, PlanService, (), PlanServiceGetOut);
pub struct PriceService; pub struct PriceService;
crate::service_impl!(declare, PriceService, "sys/priceservice", 128); crate::service_impl!(declare, PriceService, "sys/priceservice", 129);
crate::service_impl!(GET, PriceService, PriceServiceData, PriceServiceReturn); crate::service_impl!(GET, PriceService, PriceServiceData, PriceServiceReturn);
pub struct PublicKeyService; pub struct PublicKeyService;
crate::service_impl!(declare, PublicKeyService, "sys/publickeyservice", 128); crate::service_impl!(declare, PublicKeyService, "sys/publickeyservice", 129);
crate::service_impl!(GET, PublicKeyService, PublicKeyGetIn, PublicKeyGetOut); crate::service_impl!(GET, PublicKeyService, PublicKeyGetIn, PublicKeyGetOut);
crate::service_impl!(PUT, PublicKeyService, PublicKeyPutIn, ()); crate::service_impl!(PUT, PublicKeyService, PublicKeyPutIn, ());
pub struct ReferralCodeService; pub struct ReferralCodeService;
crate::service_impl!(declare, ReferralCodeService, "sys/referralcodeservice", 128); crate::service_impl!(declare, ReferralCodeService, "sys/referralcodeservice", 129);
crate::service_impl!(POST, ReferralCodeService, ReferralCodePostIn, ReferralCodePostOut); crate::service_impl!(POST, ReferralCodeService, ReferralCodePostIn, ReferralCodePostOut);
crate::service_impl!(GET, ReferralCodeService, ReferralCodeGetIn, ()); crate::service_impl!(GET, ReferralCodeService, ReferralCodeGetIn, ());
pub struct RegistrationCaptchaService; pub struct RegistrationCaptchaService;
crate::service_impl!(declare, RegistrationCaptchaService, "sys/registrationcaptchaservice", 128); crate::service_impl!(declare, RegistrationCaptchaService, "sys/registrationcaptchaservice", 129);
crate::service_impl!(POST, RegistrationCaptchaService, RegistrationCaptchaServiceData, ()); crate::service_impl!(POST, RegistrationCaptchaService, RegistrationCaptchaServiceData, ());
crate::service_impl!(GET, RegistrationCaptchaService, RegistrationCaptchaServiceGetData, RegistrationCaptchaServiceReturn); crate::service_impl!(GET, RegistrationCaptchaService, RegistrationCaptchaServiceGetData, RegistrationCaptchaServiceReturn);
pub struct RegistrationService; pub struct RegistrationService;
crate::service_impl!(declare, RegistrationService, "sys/registrationservice", 128); crate::service_impl!(declare, RegistrationService, "sys/registrationservice", 129);
crate::service_impl!(POST, RegistrationService, RegistrationServiceData, RegistrationReturn); crate::service_impl!(POST, RegistrationService, RegistrationServiceData, RegistrationReturn);
crate::service_impl!(GET, RegistrationService, (), RegistrationServiceData); crate::service_impl!(GET, RegistrationService, (), RegistrationServiceData);
pub struct ResetFactorsService; pub struct ResetFactorsService;
crate::service_impl!(declare, ResetFactorsService, "sys/resetfactorsservice", 128); crate::service_impl!(declare, ResetFactorsService, "sys/resetfactorsservice", 129);
crate::service_impl!(DELETE, ResetFactorsService, ResetFactorsDeleteData, ()); crate::service_impl!(DELETE, ResetFactorsService, ResetFactorsDeleteData, ());
pub struct ResetPasswordService; pub struct ResetPasswordService;
crate::service_impl!(declare, ResetPasswordService, "sys/resetpasswordservice", 128); crate::service_impl!(declare, ResetPasswordService, "sys/resetpasswordservice", 129);
crate::service_impl!(POST, ResetPasswordService, ResetPasswordPostIn, ()); crate::service_impl!(POST, ResetPasswordService, ResetPasswordPostIn, ());
pub struct RolloutService;
crate::service_impl!(declare, RolloutService, "sys/rolloutservice", 129);
crate::service_impl!(GET, RolloutService, (), RolloutGetOut);
pub struct SaltService; pub struct SaltService;
crate::service_impl!(declare, SaltService, "sys/saltservice", 128); crate::service_impl!(declare, SaltService, "sys/saltservice", 129);
crate::service_impl!(GET, SaltService, SaltData, SaltReturn); crate::service_impl!(GET, SaltService, SaltData, SaltReturn);
pub struct SecondFactorAuthAllowedService; pub struct SecondFactorAuthAllowedService;
crate::service_impl!(declare, SecondFactorAuthAllowedService, "sys/secondfactorauthallowedservice", 128); crate::service_impl!(declare, SecondFactorAuthAllowedService, "sys/secondfactorauthallowedservice", 129);
crate::service_impl!(GET, SecondFactorAuthAllowedService, (), SecondFactorAuthAllowedReturn); crate::service_impl!(GET, SecondFactorAuthAllowedService, (), SecondFactorAuthAllowedReturn);
pub struct SecondFactorAuthService; pub struct SecondFactorAuthService;
crate::service_impl!(declare, SecondFactorAuthService, "sys/secondfactorauthservice", 128); crate::service_impl!(declare, SecondFactorAuthService, "sys/secondfactorauthservice", 129);
crate::service_impl!(POST, SecondFactorAuthService, SecondFactorAuthData, ()); crate::service_impl!(POST, SecondFactorAuthService, SecondFactorAuthData, ());
crate::service_impl!(GET, SecondFactorAuthService, SecondFactorAuthGetData, SecondFactorAuthGetReturn); crate::service_impl!(GET, SecondFactorAuthService, SecondFactorAuthGetData, SecondFactorAuthGetReturn);
crate::service_impl!(DELETE, SecondFactorAuthService, SecondFactorAuthDeleteData, ()); crate::service_impl!(DELETE, SecondFactorAuthService, SecondFactorAuthDeleteData, ());
@ -360,77 +377,77 @@ crate::service_impl!(DELETE, SecondFactorAuthService, SecondFactorAuthDeleteData
pub struct SessionService; pub struct SessionService;
crate::service_impl!(declare, SessionService, "sys/sessionservice", 128); crate::service_impl!(declare, SessionService, "sys/sessionservice", 129);
crate::service_impl!(POST, SessionService, CreateSessionData, CreateSessionReturn); crate::service_impl!(POST, SessionService, CreateSessionData, CreateSessionReturn);
pub struct SignOrderProcessingAgreementService; pub struct SignOrderProcessingAgreementService;
crate::service_impl!(declare, SignOrderProcessingAgreementService, "sys/signorderprocessingagreementservice", 128); crate::service_impl!(declare, SignOrderProcessingAgreementService, "sys/signorderprocessingagreementservice", 129);
crate::service_impl!(POST, SignOrderProcessingAgreementService, SignOrderProcessingAgreementData, ()); crate::service_impl!(POST, SignOrderProcessingAgreementService, SignOrderProcessingAgreementData, ());
pub struct SurveyService; pub struct SurveyService;
crate::service_impl!(declare, SurveyService, "sys/surveyservice", 128); crate::service_impl!(declare, SurveyService, "sys/surveyservice", 129);
crate::service_impl!(POST, SurveyService, SurveyDataPostIn, ()); crate::service_impl!(POST, SurveyService, SurveyDataPostIn, ());
pub struct SwitchAccountTypeService; pub struct SwitchAccountTypeService;
crate::service_impl!(declare, SwitchAccountTypeService, "sys/switchaccounttypeservice", 128); crate::service_impl!(declare, SwitchAccountTypeService, "sys/switchaccounttypeservice", 129);
crate::service_impl!(POST, SwitchAccountTypeService, SwitchAccountTypePostIn, ()); crate::service_impl!(POST, SwitchAccountTypeService, SwitchAccountTypePostIn, ());
pub struct SystemKeysService; pub struct SystemKeysService;
crate::service_impl!(declare, SystemKeysService, "sys/systemkeysservice", 128); crate::service_impl!(declare, SystemKeysService, "sys/systemkeysservice", 129);
crate::service_impl!(GET, SystemKeysService, (), SystemKeysReturn); crate::service_impl!(GET, SystemKeysService, (), SystemKeysReturn);
pub struct TakeOverDeletedAddressService; pub struct TakeOverDeletedAddressService;
crate::service_impl!(declare, TakeOverDeletedAddressService, "sys/takeoverdeletedaddressservice", 128); crate::service_impl!(declare, TakeOverDeletedAddressService, "sys/takeoverdeletedaddressservice", 129);
crate::service_impl!(POST, TakeOverDeletedAddressService, TakeOverDeletedAddressData, ()); crate::service_impl!(POST, TakeOverDeletedAddressService, TakeOverDeletedAddressData, ());
pub struct UpdatePermissionKeyService; pub struct UpdatePermissionKeyService;
crate::service_impl!(declare, UpdatePermissionKeyService, "sys/updatepermissionkeyservice", 128); crate::service_impl!(declare, UpdatePermissionKeyService, "sys/updatepermissionkeyservice", 129);
crate::service_impl!(POST, UpdatePermissionKeyService, UpdatePermissionKeyData, ()); crate::service_impl!(POST, UpdatePermissionKeyService, UpdatePermissionKeyData, ());
pub struct UpdateSessionKeysService; pub struct UpdateSessionKeysService;
crate::service_impl!(declare, UpdateSessionKeysService, "sys/updatesessionkeysservice", 128); crate::service_impl!(declare, UpdateSessionKeysService, "sys/updatesessionkeysservice", 129);
crate::service_impl!(POST, UpdateSessionKeysService, UpdateSessionKeysPostIn, ()); crate::service_impl!(POST, UpdateSessionKeysService, UpdateSessionKeysPostIn, ());
pub struct UpgradePriceService; pub struct UpgradePriceService;
crate::service_impl!(declare, UpgradePriceService, "sys/upgradepriceservice", 128); crate::service_impl!(declare, UpgradePriceService, "sys/upgradepriceservice", 129);
crate::service_impl!(GET, UpgradePriceService, UpgradePriceServiceData, UpgradePriceServiceReturn); crate::service_impl!(GET, UpgradePriceService, UpgradePriceServiceData, UpgradePriceServiceReturn);
pub struct UserGroupKeyRotationService; pub struct UserGroupKeyRotationService;
crate::service_impl!(declare, UserGroupKeyRotationService, "sys/usergroupkeyrotationservice", 128); crate::service_impl!(declare, UserGroupKeyRotationService, "sys/usergroupkeyrotationservice", 129);
crate::service_impl!(POST, UserGroupKeyRotationService, UserGroupKeyRotationPostIn, ()); crate::service_impl!(POST, UserGroupKeyRotationService, UserGroupKeyRotationPostIn, ());
pub struct UserService; pub struct UserService;
crate::service_impl!(declare, UserService, "sys/userservice", 128); crate::service_impl!(declare, UserService, "sys/userservice", 129);
crate::service_impl!(DELETE, UserService, UserDataDelete, ()); crate::service_impl!(DELETE, UserService, UserDataDelete, ());
pub struct VerifierTokenService; pub struct VerifierTokenService;
crate::service_impl!(declare, VerifierTokenService, "sys/verifiertokenservice", 128); crate::service_impl!(declare, VerifierTokenService, "sys/verifiertokenservice", 129);
crate::service_impl!(POST, VerifierTokenService, VerifierTokenServiceIn, VerifierTokenServiceOut); crate::service_impl!(POST, VerifierTokenService, VerifierTokenServiceIn, VerifierTokenServiceOut);
pub struct VersionService; pub struct VersionService;
crate::service_impl!(declare, VersionService, "sys/versionservice", 128); crate::service_impl!(declare, VersionService, "sys/versionservice", 129);
crate::service_impl!(GET, VersionService, VersionData, VersionReturn); crate::service_impl!(GET, VersionService, VersionData, VersionReturn);

View file

@ -33,6 +33,7 @@ use crate::entities::generated::tutanota::CreateMailFolderReturn;
use crate::entities::generated::tutanota::UpdateMailFolderData; use crate::entities::generated::tutanota::UpdateMailFolderData;
use crate::entities::generated::tutanota::DeleteMailFolderData; use crate::entities::generated::tutanota::DeleteMailFolderData;
use crate::entities::generated::tutanota::CreateMailGroupData; use crate::entities::generated::tutanota::CreateMailGroupData;
use crate::entities::generated::tutanota::MailGroupPostOut;
use crate::entities::generated::tutanota::DeleteGroupData; use crate::entities::generated::tutanota::DeleteGroupData;
use crate::entities::generated::tutanota::DeleteMailData; use crate::entities::generated::tutanota::DeleteMailData;
use crate::entities::generated::tutanota::ManageLabelServicePostIn; use crate::entities::generated::tutanota::ManageLabelServicePostIn;
@ -52,60 +53,61 @@ use crate::entities::generated::tutanota::TranslationGetIn;
use crate::entities::generated::tutanota::TranslationGetOut; use crate::entities::generated::tutanota::TranslationGetOut;
use crate::entities::generated::tutanota::UnreadMailStatePostIn; use crate::entities::generated::tutanota::UnreadMailStatePostIn;
use crate::entities::generated::tutanota::UserAccountCreateData; use crate::entities::generated::tutanota::UserAccountCreateData;
use crate::entities::generated::tutanota::UserAccountPostOut;
pub struct ApplyLabelService; pub struct ApplyLabelService;
crate::service_impl!(declare, ApplyLabelService, "tutanota/applylabelservice", 87); crate::service_impl!(declare, ApplyLabelService, "tutanota/applylabelservice", 88);
crate::service_impl!(POST, ApplyLabelService, ApplyLabelServicePostIn, ()); crate::service_impl!(POST, ApplyLabelService, ApplyLabelServicePostIn, ());
pub struct CalendarService; pub struct CalendarService;
crate::service_impl!(declare, CalendarService, "tutanota/calendarservice", 87); crate::service_impl!(declare, CalendarService, "tutanota/calendarservice", 88);
crate::service_impl!(POST, CalendarService, UserAreaGroupPostData, CreateGroupPostReturn); crate::service_impl!(POST, CalendarService, UserAreaGroupPostData, CreateGroupPostReturn);
crate::service_impl!(DELETE, CalendarService, CalendarDeleteData, ()); crate::service_impl!(DELETE, CalendarService, CalendarDeleteData, ());
pub struct ContactListGroupService; pub struct ContactListGroupService;
crate::service_impl!(declare, ContactListGroupService, "tutanota/contactlistgroupservice", 87); crate::service_impl!(declare, ContactListGroupService, "tutanota/contactlistgroupservice", 88);
crate::service_impl!(POST, ContactListGroupService, UserAreaGroupPostData, CreateGroupPostReturn); crate::service_impl!(POST, ContactListGroupService, UserAreaGroupPostData, CreateGroupPostReturn);
crate::service_impl!(DELETE, ContactListGroupService, UserAreaGroupDeleteData, ()); crate::service_impl!(DELETE, ContactListGroupService, UserAreaGroupDeleteData, ());
pub struct CustomerAccountService; pub struct CustomerAccountService;
crate::service_impl!(declare, CustomerAccountService, "tutanota/customeraccountservice", 87); crate::service_impl!(declare, CustomerAccountService, "tutanota/customeraccountservice", 88);
crate::service_impl!(POST, CustomerAccountService, CustomerAccountCreateData, ()); crate::service_impl!(POST, CustomerAccountService, CustomerAccountCreateData, ());
pub struct DraftService; pub struct DraftService;
crate::service_impl!(declare, DraftService, "tutanota/draftservice", 87); crate::service_impl!(declare, DraftService, "tutanota/draftservice", 88);
crate::service_impl!(POST, DraftService, DraftCreateData, DraftCreateReturn); crate::service_impl!(POST, DraftService, DraftCreateData, DraftCreateReturn);
crate::service_impl!(PUT, DraftService, DraftUpdateData, DraftUpdateReturn); crate::service_impl!(PUT, DraftService, DraftUpdateData, DraftUpdateReturn);
pub struct EncryptTutanotaPropertiesService; pub struct EncryptTutanotaPropertiesService;
crate::service_impl!(declare, EncryptTutanotaPropertiesService, "tutanota/encrypttutanotapropertiesservice", 87); crate::service_impl!(declare, EncryptTutanotaPropertiesService, "tutanota/encrypttutanotapropertiesservice", 88);
crate::service_impl!(POST, EncryptTutanotaPropertiesService, EncryptTutanotaPropertiesData, ()); crate::service_impl!(POST, EncryptTutanotaPropertiesService, EncryptTutanotaPropertiesData, ());
pub struct EntropyService; pub struct EntropyService;
crate::service_impl!(declare, EntropyService, "tutanota/entropyservice", 87); crate::service_impl!(declare, EntropyService, "tutanota/entropyservice", 88);
crate::service_impl!(PUT, EntropyService, EntropyData, ()); crate::service_impl!(PUT, EntropyService, EntropyData, ());
pub struct ExternalUserService; pub struct ExternalUserService;
crate::service_impl!(declare, ExternalUserService, "tutanota/externaluserservice", 87); crate::service_impl!(declare, ExternalUserService, "tutanota/externaluserservice", 88);
crate::service_impl!(POST, ExternalUserService, ExternalUserData, ()); crate::service_impl!(POST, ExternalUserService, ExternalUserData, ());
pub struct GroupInvitationService; pub struct GroupInvitationService;
crate::service_impl!(declare, GroupInvitationService, "tutanota/groupinvitationservice", 87); crate::service_impl!(declare, GroupInvitationService, "tutanota/groupinvitationservice", 88);
crate::service_impl!(POST, GroupInvitationService, GroupInvitationPostData, GroupInvitationPostReturn); crate::service_impl!(POST, GroupInvitationService, GroupInvitationPostData, GroupInvitationPostReturn);
crate::service_impl!(PUT, GroupInvitationService, GroupInvitationPutData, ()); crate::service_impl!(PUT, GroupInvitationService, GroupInvitationPutData, ());
crate::service_impl!(DELETE, GroupInvitationService, GroupInvitationDeleteData, ()); crate::service_impl!(DELETE, GroupInvitationService, GroupInvitationDeleteData, ());
@ -113,26 +115,26 @@ crate::service_impl!(DELETE, GroupInvitationService, GroupInvitationDeleteData,
pub struct ImportMailService; pub struct ImportMailService;
crate::service_impl!(declare, ImportMailService, "tutanota/importmailservice", 87); crate::service_impl!(declare, ImportMailService, "tutanota/importmailservice", 88);
crate::service_impl!(POST, ImportMailService, ImportMailPostIn, ImportMailPostOut); crate::service_impl!(POST, ImportMailService, ImportMailPostIn, ImportMailPostOut);
crate::service_impl!(GET, ImportMailService, ImportMailGetIn, ImportMailGetOut); crate::service_impl!(GET, ImportMailService, ImportMailGetIn, ImportMailGetOut);
pub struct ListUnsubscribeService; pub struct ListUnsubscribeService;
crate::service_impl!(declare, ListUnsubscribeService, "tutanota/listunsubscribeservice", 87); crate::service_impl!(declare, ListUnsubscribeService, "tutanota/listunsubscribeservice", 88);
crate::service_impl!(POST, ListUnsubscribeService, ListUnsubscribeData, ()); crate::service_impl!(POST, ListUnsubscribeService, ListUnsubscribeData, ());
pub struct MailExportTokenService; pub struct MailExportTokenService;
crate::service_impl!(declare, MailExportTokenService, "tutanota/mailexporttokenservice", 87); crate::service_impl!(declare, MailExportTokenService, "tutanota/mailexporttokenservice", 88);
crate::service_impl!(POST, MailExportTokenService, (), MailExportTokenServicePostOut); crate::service_impl!(POST, MailExportTokenService, (), MailExportTokenServicePostOut);
pub struct MailFolderService; pub struct MailFolderService;
crate::service_impl!(declare, MailFolderService, "tutanota/mailfolderservice", 87); crate::service_impl!(declare, MailFolderService, "tutanota/mailfolderservice", 88);
crate::service_impl!(POST, MailFolderService, CreateMailFolderData, CreateMailFolderReturn); crate::service_impl!(POST, MailFolderService, CreateMailFolderData, CreateMailFolderReturn);
crate::service_impl!(PUT, MailFolderService, UpdateMailFolderData, ()); crate::service_impl!(PUT, MailFolderService, UpdateMailFolderData, ());
crate::service_impl!(DELETE, MailFolderService, DeleteMailFolderData, ()); crate::service_impl!(DELETE, MailFolderService, DeleteMailFolderData, ());
@ -140,87 +142,87 @@ crate::service_impl!(DELETE, MailFolderService, DeleteMailFolderData, ());
pub struct MailGroupService; pub struct MailGroupService;
crate::service_impl!(declare, MailGroupService, "tutanota/mailgroupservice", 87); crate::service_impl!(declare, MailGroupService, "tutanota/mailgroupservice", 88);
crate::service_impl!(POST, MailGroupService, CreateMailGroupData, ()); crate::service_impl!(POST, MailGroupService, CreateMailGroupData, MailGroupPostOut);
crate::service_impl!(DELETE, MailGroupService, DeleteGroupData, ()); crate::service_impl!(DELETE, MailGroupService, DeleteGroupData, ());
pub struct MailService; pub struct MailService;
crate::service_impl!(declare, MailService, "tutanota/mailservice", 87); crate::service_impl!(declare, MailService, "tutanota/mailservice", 88);
crate::service_impl!(DELETE, MailService, DeleteMailData, ()); crate::service_impl!(DELETE, MailService, DeleteMailData, ());
pub struct ManageLabelService; pub struct ManageLabelService;
crate::service_impl!(declare, ManageLabelService, "tutanota/managelabelservice", 87); crate::service_impl!(declare, ManageLabelService, "tutanota/managelabelservice", 88);
crate::service_impl!(POST, ManageLabelService, ManageLabelServicePostIn, ()); crate::service_impl!(POST, ManageLabelService, ManageLabelServicePostIn, ());
crate::service_impl!(DELETE, ManageLabelService, ManageLabelServiceDeleteIn, ()); crate::service_impl!(DELETE, ManageLabelService, ManageLabelServiceDeleteIn, ());
pub struct MoveMailService; pub struct MoveMailService;
crate::service_impl!(declare, MoveMailService, "tutanota/movemailservice", 87); crate::service_impl!(declare, MoveMailService, "tutanota/movemailservice", 88);
crate::service_impl!(POST, MoveMailService, MoveMailData, ()); crate::service_impl!(POST, MoveMailService, MoveMailData, ());
pub struct NewsService; pub struct NewsService;
crate::service_impl!(declare, NewsService, "tutanota/newsservice", 87); crate::service_impl!(declare, NewsService, "tutanota/newsservice", 88);
crate::service_impl!(POST, NewsService, NewsIn, ()); crate::service_impl!(POST, NewsService, NewsIn, ());
crate::service_impl!(GET, NewsService, (), NewsOut); crate::service_impl!(GET, NewsService, (), NewsOut);
pub struct ReceiveInfoService; pub struct ReceiveInfoService;
crate::service_impl!(declare, ReceiveInfoService, "tutanota/receiveinfoservice", 87); crate::service_impl!(declare, ReceiveInfoService, "tutanota/receiveinfoservice", 88);
crate::service_impl!(POST, ReceiveInfoService, ReceiveInfoServiceData, ReceiveInfoServicePostOut); crate::service_impl!(POST, ReceiveInfoService, ReceiveInfoServiceData, ReceiveInfoServicePostOut);
pub struct ReportMailService; pub struct ReportMailService;
crate::service_impl!(declare, ReportMailService, "tutanota/reportmailservice", 87); crate::service_impl!(declare, ReportMailService, "tutanota/reportmailservice", 88);
crate::service_impl!(POST, ReportMailService, ReportMailPostData, ()); crate::service_impl!(POST, ReportMailService, ReportMailPostData, ());
pub struct ResolveConversationsService; pub struct ResolveConversationsService;
crate::service_impl!(declare, ResolveConversationsService, "tutanota/resolveconversationsservice", 87); crate::service_impl!(declare, ResolveConversationsService, "tutanota/resolveconversationsservice", 88);
crate::service_impl!(GET, ResolveConversationsService, ResolveConversationsServiceGetIn, ResolveConversationsServiceGetOut); crate::service_impl!(GET, ResolveConversationsService, ResolveConversationsServiceGetIn, ResolveConversationsServiceGetOut);
pub struct SendDraftService; pub struct SendDraftService;
crate::service_impl!(declare, SendDraftService, "tutanota/senddraftservice", 87); crate::service_impl!(declare, SendDraftService, "tutanota/senddraftservice", 88);
crate::service_impl!(POST, SendDraftService, SendDraftData, SendDraftReturn); crate::service_impl!(POST, SendDraftService, SendDraftData, SendDraftReturn);
pub struct SimpleMoveMailService; pub struct SimpleMoveMailService;
crate::service_impl!(declare, SimpleMoveMailService, "tutanota/simplemovemailservice", 87); crate::service_impl!(declare, SimpleMoveMailService, "tutanota/simplemovemailservice", 88);
crate::service_impl!(POST, SimpleMoveMailService, SimpleMoveMailPostIn, ()); crate::service_impl!(POST, SimpleMoveMailService, SimpleMoveMailPostIn, ());
pub struct TemplateGroupService; pub struct TemplateGroupService;
crate::service_impl!(declare, TemplateGroupService, "tutanota/templategroupservice", 87); crate::service_impl!(declare, TemplateGroupService, "tutanota/templategroupservice", 88);
crate::service_impl!(POST, TemplateGroupService, UserAreaGroupPostData, CreateGroupPostReturn); crate::service_impl!(POST, TemplateGroupService, UserAreaGroupPostData, CreateGroupPostReturn);
crate::service_impl!(DELETE, TemplateGroupService, UserAreaGroupDeleteData, ()); crate::service_impl!(DELETE, TemplateGroupService, UserAreaGroupDeleteData, ());
pub struct TranslationService; pub struct TranslationService;
crate::service_impl!(declare, TranslationService, "tutanota/translationservice", 87); crate::service_impl!(declare, TranslationService, "tutanota/translationservice", 88);
crate::service_impl!(GET, TranslationService, TranslationGetIn, TranslationGetOut); crate::service_impl!(GET, TranslationService, TranslationGetIn, TranslationGetOut);
pub struct UnreadMailStateService; pub struct UnreadMailStateService;
crate::service_impl!(declare, UnreadMailStateService, "tutanota/unreadmailstateservice", 87); crate::service_impl!(declare, UnreadMailStateService, "tutanota/unreadmailstateservice", 88);
crate::service_impl!(POST, UnreadMailStateService, UnreadMailStatePostIn, ()); crate::service_impl!(POST, UnreadMailStateService, UnreadMailStatePostIn, ());
pub struct UserAccountService; pub struct UserAccountService;
crate::service_impl!(declare, UserAccountService, "tutanota/useraccountservice", 87); crate::service_impl!(declare, UserAccountService, "tutanota/useraccountservice", 88);
crate::service_impl!(POST, UserAccountService, UserAccountCreateData, ()); crate::service_impl!(POST, UserAccountService, UserAccountCreateData, UserAccountPostOut);

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -40,10 +40,7 @@ pub fn generate_random_string<const SIZE: usize>() -> String {
} }
#[must_use] #[must_use]
pub fn generate_random_group( pub fn generate_random_group(current_keys: Option<KeyPair>, former_keys: GroupKeysRef) -> Group {
current_keys: Option<KeyPair>,
former_keys: Option<GroupKeysRef>,
) -> Group {
let group_id = GeneratedId::test_random(); let group_id = GeneratedId::test_random();
Group { Group {
_format: 0, _format: 0,
@ -90,6 +87,7 @@ pub fn generate_random_group(
}), }),
storageCounter: None, storageCounter: None,
user: None, user: None,
identityKeyPair: None,
} }
} }

View file

@ -8,7 +8,8 @@
"2146": null, "2146": null,
"2145": null, "2145": null,
"1": "nS9dTQ", "1": "nS9dTQ",
"2147": null "2147": null,
"2589": []
} }
], ],
"8": "LIopQQN--R-0", "8": "LIopQQN--R-0",
@ -34,5 +35,6 @@
} }
], ],
"224": ["O0IlmJn--c-0"], "224": ["O0IlmJn--c-0"],
"981": "O0IlmJq----0" "981": "O0IlmJq----0",
"2588": []
} }