class SCHEMA_CLS(BaseSchema): organization_addr = BackendOrganizationAddrField(required=True) device_id = DeviceIDField(required=True) device_label = fields.String(allow_none=True, missing=None) human_handle = HumanHandleField(allow_none=True, missing=None) signing_key = fields.SigningKey(required=True) private_key = fields.PrivateKey(required=True) # `profile` replaces `is_admin` field (which is still required for backward # compatibility), hence `None` is not allowed is_admin = fields.Boolean(required=True) profile = UserProfileField(allow_none=False) user_manifest_id = EntryIDField(required=True) user_manifest_key = fields.SecretKey(required=True) local_symkey = fields.SecretKey(required=True) @post_load def make_obj(self, data): # Handle legacy `is_admin` field default_profile = UserProfile.ADMIN if data.pop( "is_admin") else UserProfile.STANDARD try: profile = data["profile"] except KeyError: data["profile"] = default_profile else: if default_profile == UserProfile.ADMIN and profile != UserProfile.ADMIN: raise ValidationError( "Fields `profile` and `is_admin` have incompatible values" ) return LocalDevice(**data)
class SCHEMA_CLS(BaseSchema): organization_addr = BackendOrganizationAddrField(required=True) device_id = DeviceIDField(required=True) signing_key = fields.SigningKey(required=True) private_key = fields.PrivateKey(required=True) is_admin = fields.Boolean(required=True) user_manifest_id = EntryIDField(required=True) user_manifest_key = fields.SecretKey(required=True) local_symkey = fields.SecretKey(required=True) human_handle = HumanHandleField(allow_none=True, missing=None) @post_load def make_obj(self, data): return LocalDevice(**data)
class SCHEMA_CLS(BaseSchema): id = BlockIDField(required=True) key = fields.SecretKey(required=True) offset = fields.Integer(required=True, validate=validate.Range(min=0)) size = fields.Integer(required=True, validate=validate.Range(min=0)) digest = fields.HashDigest(required=True) @post_load def make_obj(self, data: Dict[str, Any]) -> "BlockAccess": return BlockAccess(**data)
class SCHEMA_CLS(BaseSchema): type = fields.CheckedConstant("device_claim_answer", required=True) private_key = fields.PrivateKey(required=True) user_manifest_id = EntryIDField(required=True) user_manifest_key = fields.SecretKey(required=True) @post_load def make_obj(self, data): data.pop("type") return DeviceClaimAnswerContent(**data)
class SCHEMA_CLS(BaseSchema): type = fields.CheckedConstant("device_claim_answer", required=True) private_key = fields.PrivateKey(required=True) user_manifest_id = EntryIDField(required=True) user_manifest_key = fields.SecretKey(required=True) @post_load def make_obj( # type: ignore[misc] self, data: Dict[str, Any] ) -> "APIV1_DeviceClaimAnswerContent": data.pop("type") return APIV1_DeviceClaimAnswerContent(**data)
class SCHEMA_CLS(BaseSchema): name = EntryNameField(required=True) id = EntryIDField(required=True) key = fields.SecretKey(required=True) encryption_revision = fields.Int(required=True, validate=validate.Range(min=0)) encrypted_on = fields.DateTime(required=True) role_cached_on = fields.DateTime(required=True) role = RealmRoleField(required=True, allow_none=True) @post_load def make_obj(self, data: Dict[str, Any]) -> "WorkspaceEntry": return WorkspaceEntry(**data)
class SCHEMA_CLS(BaseSchema): type = fields.CheckedConstant("invite_device_confirmation", required=True) device_id = DeviceIDField(required=True) device_label = fields.String(allow_none=True, missing=None) human_handle = HumanHandleField(allow_none=True, missing=None) profile = UserProfileField(required=True) private_key = fields.PrivateKey(required=True) user_manifest_id = EntryIDField(required=True) user_manifest_key = fields.SecretKey(required=True) root_verify_key = fields.VerifyKey(required=True) @post_load def make_obj(self, data): data.pop("type") return InviteDeviceConfirmation(**data)
class SCHEMA_CLS(BaseSignedDataSchema): type = fields.CheckedConstant("sharing.granted", required=True) name = fields.String(required=True) 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(MessageContentType.SHARING_GRANTED, required=True) name = EntryNameField(required=True) 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( # type: ignore[misc] self, data: Dict[str, Any]) -> "SharingGrantedMessageContent": data.pop("type") return SharingGrantedMessageContent(**data)