class SCHEMA_CLS(BaseSignedDataSchema): type = fields.EnumCheckedConstant(ManifestType.WORKSPACE_MANIFEST, required=True) id = EntryIDField(required=True) # Version 0 means the data is not synchronized version = fields.Integer(required=True, validate=validate.Range(min=0)) created = fields.DateTime(required=True) updated = fields.DateTime(required=True) children = fields.FrozenMap( EntryNameField(validate=validate.Length(min=1, max=256)), EntryIDField(required=True), required=True, ) @pre_load def fix_legacy(self, data): # Compatibility with versions <= 1.14 if data["author"] is None: data["author"] = LOCAL_AUTHOR_LEGACY_PLACEHOLDER return data @post_load def make_obj(self, data): data.pop("type") return WorkspaceManifest(**data)
class APIV1_HandshakeAnonymousAnswerSchema(BaseSchema): handshake = fields.CheckedConstant("answer", required=True) type = fields.EnumCheckedConstant(APIV1_HandshakeType.ANONYMOUS, required=True) client_api_version = ApiVersionField(required=True) organization_id = OrganizationIDField(required=True) # Cannot provide rvk during organization bootstrap rvk = fields.VerifyKey(missing=None)
class HandshakeInvitedAnswerSchema(BaseSchema): handshake = fields.CheckedConstant("answer", required=True) type = fields.EnumCheckedConstant(HandshakeType.INVITED, required=True) client_api_version = ApiVersionField(required=True) organization_id = OrganizationIDField(required=True) invitation_type = InvitationTypeField(required=True) token = fields.UUID(required=True)
class SCHEMA_CLS(BaseSignedDataSchema): type = fields.EnumCheckedConstant(ManifestType.FILE_MANIFEST, required=True) id = EntryIDField(required=True) parent = EntryIDField(required=True) # Version 0 means the data is not synchronized version = fields.Integer(required=True, validate=validate.Range(min=0)) created = fields.DateTime(required=True) updated = fields.DateTime(required=True) size = fields.Integer(required=True, validate=validate.Range(min=0)) blocksize = fields.Integer(required=True, validate=validate.Range(min=8)) blocks = fields.FrozenList(fields.Nested(BlockAccess.SCHEMA_CLS), required=True) @pre_load def fix_legacy(self, data): # Compatibility with versions <= 1.14 if data["author"] is None: data["author"] = LOCAL_AUTHOR_LEGACY_PLACEHOLDER return data @post_load def make_obj(self, data): data.pop("type") return FileManifest(**data)
class EventsRealmVlobsUpdatedRepSchema(BaseRepSchema): event = fields.EnumCheckedConstant(APIEvent.REALM_VLOBS_UPDATED, required=True) realm_id = fields.UUID(required=True) checkpoint = fields.Integer(required=True) src_id = fields.UUID(required=True) src_version = fields.Integer(required=True)
class APIV1_HandshakeAuthenticatedAnswerSchema(BaseSchema): handshake = fields.CheckedConstant("answer", required=True) type = fields.EnumCheckedConstant(APIV1_HandshakeType.AUTHENTICATED, required=True) client_api_version = ApiVersionField(required=True) organization_id = OrganizationIDField(required=True) device_id = DeviceIDField(required=True) rvk = fields.VerifyKey(required=True) answer = fields.Bytes(required=True)
class SCHEMA_CLS(BaseSignedDataSchema): type = fields.EnumCheckedConstant(MessageContentType.PING, required=True) ping = fields.String(required=True) @post_load def make_obj(self, data): data.pop("type") return PingMessageContent(**data)
class SCHEMA_CLS(BaseSignedDataSchema): type = fields.EnumCheckedConstant(MessageContentType.SHARING_REVOKED, required=True) id = EntryIDField(required=True) @post_load def make_obj(self, data): data.pop("type") return SharingRevokedMessageContent(**data)
class SCHEMA_CLS(SharingGrantedMessageContent.SCHEMA_CLS): type = fields.EnumCheckedConstant( MessageContentType.SHARING_REENCRYPTED, required=True) # This message is similar to `sharing.granted`. Hence both can be processed # interchangeably, which avoid possible concurrency issues when a sharing # occurs right before a reencryption. @post_load def make_obj(self, data): data.pop("type") return SharingReencryptedMessageContent(**data)
class SCHEMA_CLS(BaseSchema): type = fields.EnumCheckedConstant( LocalManifestType.LOCAL_USER_MANIFEST, required=True) base = fields.Nested(RemoteUserManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) last_processed_message = fields.Integer(required=True, validate=validate.Range(min=0)) workspaces = fields.FrozenList(fields.Nested( WorkspaceEntry.SCHEMA_CLS), required=True) @post_load def make_obj(self, data): data.pop("type") return LocalUserManifest(**data)
class SCHEMA_CLS(BaseSchema): type = fields.EnumCheckedConstant( LocalManifestType.LOCAL_FILE_MANIFEST, required=True) base = fields.Nested(RemoteFileManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) size = fields.Integer(required=True, validate=validate.Range(min=0)) blocksize = fields.Integer(required=True, validate=validate.Range(min=8)) blocks = fields.FrozenList(fields.FrozenList( fields.Nested(Chunk.SCHEMA_CLS)), required=True) @post_load def make_obj(self, data): data.pop("type") return LocalFileManifest(**data)
class SCHEMA_CLS(BaseSchema): type = fields.EnumCheckedConstant( LocalManifestType.LOCAL_FOLDER_MANIFEST, required=True) base = fields.Nested(RemoteFolderManifest.SCHEMA_CLS, required=True) need_sync = fields.Boolean(required=True) updated = fields.DateTime(required=True) children = fields.FrozenMap(EntryNameField(), EntryIDField(required=True), required=True) confined_entries = fields.FrozenSet(EntryIDField(required=True)) filtered_entries = fields.FrozenSet(EntryIDField(required=True)) @post_load def make_obj(self, data): data.pop("type") data.setdefault("confined_entries", frozenset()) data.setdefault("filtered_entries", frozenset()) return LocalFolderManifest(**data)
class SCHEMA_CLS(BaseSignedDataSchema): type = fields.EnumCheckedConstant(MessageContentType.SHARING_GRANTED, required=True) name = fields.String(required=True) author = DeviceIDField(required=True, allow_none=False) id = EntryIDField(required=True) encryption_revision = fields.Integer(required=True) encrypted_on = fields.DateTime(required=True) key = fields.SecretKey(required=True) # Don't include role given the only reliable way to get this information # is to fetch the realm role certificate from the backend. # Besides, we will also need the message sender's realm role certificate # to make sure he is an owner. @post_load def make_obj(self, data): data.pop("type") return SharingGrantedMessageContent(**data)
class SCHEMA_CLS(BaseSignedDataSchema): type = fields.EnumCheckedConstant(ManifestType.USER_MANIFEST, required=True) id = EntryIDField(required=True) # Version 0 means the data is not synchronized version = fields.Integer(required=True, validate=validate.Range(min=0)) created = fields.DateTime(required=True) updated = fields.DateTime(required=True) last_processed_message = fields.Integer(required=True, validate=validate.Range(min=0)) workspaces = fields.List(fields.Nested(WorkspaceEntry.SCHEMA_CLS), required=True) @pre_load def fix_legacy(self, data): # Compatibility with versions <= 1.14 if data["author"] is None: data["author"] = LOCAL_AUTHOR_LEGACY_PLACEHOLDER return data @post_load def make_obj(self, data): data.pop("type") return UserManifest(**data)
class InviteInfoUserRepSchema(BaseRepSchema): type = fields.EnumCheckedConstant(InvitationType.USER, required=True) claimer_email = fields.String(required=True) greeter_user_id = UserIDField(required=True) greeter_human_handle = HumanHandleField(allow_none=True, missing=True)
class InviteInfoDeviceRepSchema(BaseRepSchema): type = fields.EnumCheckedConstant(InvitationType.DEVICE, required=True) greeter_user_id = UserIDField(required=True) greeter_human_handle = HumanHandleField(allow_none=True, missing=True)
class InviteNewUserReqSchema(BaseReqSchema): type = fields.EnumCheckedConstant(InvitationType.USER, required=True) claimer_email = fields.String(required=True) send_email = fields.Boolean(required=True)
class InviteNewDeviceReqSchema(BaseReqSchema): type = fields.EnumCheckedConstant(InvitationType.DEVICE, required=True) send_email = fields.Boolean(required=True)
class APIV1_HandshakeAdministrationAnswerSchema(BaseSchema): handshake = fields.CheckedConstant("answer", required=True) type = fields.EnumCheckedConstant(APIV1_HandshakeType.ADMINISTRATION, required=True) client_api_version = ApiVersionField(required=True) token = fields.String(required=True)
class EventsInviteStatusChangedRepSchema(BaseRepSchema): event = fields.EnumCheckedConstant(APIEvent.INVITE_STATUS_CHANGED, required=True) token = fields.UUID(required=True) invitation_status = InvitationStatusField(required=True)
class InviteListItemDeviceSchema(BaseSchema): type = fields.EnumCheckedConstant(InvitationType.DEVICE, required=True) token = fields.UUID(required=True) created_on = fields.DateTime(required=True) status = InvitationStatusField(required=True)
class ForegroundReqSchema(BaseSchema): cmd = fields.EnumCheckedConstant(IPCCommand.FOREGROUND, required=True)
class EventsRealmRolesUpdatedRepSchema(BaseRepSchema): event = fields.EnumCheckedConstant(APIEvent.REALM_ROLES_UPDATED, required=True) realm_id = fields.UUID(required=True) role = RealmRoleField(required=True, allow_none=True)
class EventsPingedRepSchema(BaseRepSchema): event = fields.EnumCheckedConstant(APIEvent.PINGED, required=True) ping = fields.String(validate=validate.Length(max=64), required=True)
class EventsRealmMaintenanceFinishedRepSchema(BaseRepSchema): event = fields.EnumCheckedConstant(APIEvent.REALM_MAINTENANCE_FINISHED, required=True) realm_id = fields.UUID(required=True) encryption_revision = fields.Integer(required=True)
class EventsMessageReceivedRepSchema(BaseRepSchema): event = fields.EnumCheckedConstant(APIEvent.MESSAGE_RECEIVED, required=True) index = fields.Integer(required=True)
class NewInstanceReqSchema(BaseSchema): cmd = fields.EnumCheckedConstant(IPCCommand.NEW_INSTANCE, required=True) start_arg = fields.String(allow_none=True)
class InviteListItemUserSchema(BaseSchema): type = fields.EnumCheckedConstant(InvitationType.USER, required=True) token = fields.UUID(required=True) created_on = fields.DateTime(required=True) claimer_email = fields.String(required=True) status = InvitationStatusField(required=True)