class UserRegisterPostSchema(BaseSchema): username = fields.String(validate=validate.Length(min=1, max=256)) password = fields.String(validate=validate.Length(min=1), required=True) firstname = fields.String(missing=None) lastname = fields.String(missing=None) email_address = fields.Email(required=True) purpose = fields.Constant('user')
class InitPostSchema(BaseSchema): username = fields.String(validate=validate.Length(min=1, max=256), required=True) password = fields.String(validate=validate.Length(min=1), required=True) key = fields.String(validate=validate.Length(equal=20), required=True) purpose = fields.String( missing='internal', validate=validate.OneOf(['user', 'internal', 'external_api']) )
class _BaseUserSchema(BaseSchema): username = fields.String(validate=validate.Length(min=1, max=256), required=True) firstname = fields.String(missing=None, allow_none=True) lastname = fields.String(missing=None, allow_none=True) purpose = fields.String(missing='user', validate=validate.OneOf( ['user', 'internal', 'external_api'])) enabled = fields.Boolean(missing=True)
class MessageSchema(Schema): uuid = fields.UUID(dump_only=True) content = fields.String(required=True) alias = fields.String(validate=validate.Length(max=256), allow_none=True) user_uuid = fields.UUID(dump_only=True) tenant_uuid = fields.UUID(dump_only=True) wazo_uuid = fields.UUID(dump_only=True) created_at = fields.DateTime(dump_only=True) room = fields.Nested('RoomSchema', dump_only=True, only=['uuid'])
class TenantFullSchema(BaseSchema): uuid = fields.UUID(missing=None) parent_uuid = fields.UUID(dump_only=True) name = fields.String( validate=validate.Length(min=1, max=128), default=None, missing=None ) slug = fields.String( validate=[validate.Length(min=1, max=10), validate.Regexp(r'^[a-zA-Z0-9_]+$')], missing=None, ) contact_uuid = fields.UUID(data_key='contact', missing=None, default=None) phone = fields.String( validate=validate.Length(min=1, max=32), default=None, missing=None ) domain_names = fields.List( fields.String( validate=validate.Regexp( r'^(?=.{1,253}\.?$)(?:(?!(-|_)|[^.]+_)[A-Za-z0-9-_]{1,}(?<!-)(?:\.|$)){2,63}$' ), ), missing=[], default=[], allow_none=False, ) address = fields.Nested( TenantAddress, missing=empty_tenant_address, default=empty_tenant_address, allow_none=False, ) @post_dump def add_empty_address(self, data, **kwargs): data['address'] = data['address'] or empty_tenant_address return data @post_load def ensure_domain_names_are_unique(self, data, **kwargs): data['domain_names'] = sorted(list(set(data['domain_names']))) return data
class PolicyFullSchema(BaseSchema): uuid = fields.String(dump_only=True) tenant_uuid = fields.String(dump_only=True, attribute='tenant_uuid_exposed') name = fields.String(validate=validate.Length(min=1, max=80), required=True) slug = fields.String( validate=[validate.Length(min=1, max=80), validate.Regexp(SLUG_REGEX)], missing=None, ) description = fields.String(allow_none=True, missing=None) acl = fields.List(fields.String(), missing=[], attribute='acl') read_only = fields.Boolean(dump_only=True) shared = fields.Boolean(missing=False) @post_dump(pass_original=True) def set_shared_exposed_only_for_dump(self, data, original, **kwargs): data['shared'] = original.shared_exposed return data
class TenantSchema(BaseSchema): uuid = xfields.UUID(missing=None) parent_uuid = xfields.UUID(dump_only=True) name = xfields.String(validate=validate.Length(min=1, max=128), default=None, missing=None) contact_uuid = xfields.UUID(data_key='contact', missing=None, default=None) phone = xfields.String(validate=validate.Length(min=1, max=32), default=None, missing=None) address = xfields.Nested( TenantAddress, missing=empty_tenant_address, default=empty_tenant_address, allow_none=False, ) @post_dump def add_empty_address(self, data): data['address'] = data['address'] or empty_tenant_address return data
class PasswordResetQueryParameters(BaseSchema): username = fields.String(validate=validate.Length(min=1, max=256), missing=None) email_address = fields.Email(data_key='email', missing=None) @validates_schema def validate_mutually_exclusive_fields(self, data, **kwargs): username = data.get('username') email = data.get('email_address') if (username, email).count(None) != 1: msg = '"username" or "email" should be used' raise ValidationError(msg)
class TenantSchema(BaseSchema): uuid = xfields.UUID(missing=None) parent_uuid = xfields.UUID(dump_only=True) name = xfields.String(validate=validate.Length(min=1, max=128), default=None, missing=None) contact_uuid = xfields.UUID(load_from='contact', dump_to='contact', missing=None, default=None) phone = xfields.String(validate=validate.Length(min=1, max=32), default=None, missing=None) address = xfields.Nested(TenantAddress, missing=dict, default=dict, allow_none=False) @post_dump def add_empty_address(self, data): data['address'] = data['address'] or TenantAddress().dump( data['address']).data return data
class ListSchema(BaseSchema): direction = fields.String(validate=validate.OneOf(['asc', 'desc']), missing='asc') order = fields.String(validate=validate.Length(min=1), missing=default_sort_column) limit = fields.Integer(validate=validate.Range(min=0), missing=None) offset = fields.Integer(validate=validate.Range(min=0), missing=0) search = fields.String(missing=None) recurse = fields.Boolean(missing=False) @post_load(pass_original=True) def add_arbitrary_fields(self, data, original_data): for key, value in original_data.items(): data.setdefault(key, value) return data
class TenantAddress(BaseSchema): line_1 = xfields.String(validate=validate.Length(min=1, max=256), missing=None, default=None) line_2 = xfields.String(validate=validate.Length(min=1, max=256), missing=None, default=None) city = xfields.String(validate=validate.Length(min=1, max=128), missing=None, default=None) state = xfields.String(validate=validate.Length(min=1, max=128), missing=None, default=None) country = xfields.String(validate=validate.Length(min=1, max=128), missing=None, default=None) zip_code = xfields.String(validate=validate.Length(min=1, max=16), missing=None, default=None)
class GroupRequestSchema(BaseSchema): name = xfields.String(validate=validate.Length(min=1, max=128), required=True)
class SetupSchema(Schema): engine_language = fields.String(required=True, validate=validate.OneOf(['en_US', 'fr_FR'])) engine_password = fields.String(required=True) engine_license = fields.Boolean(required=True, validate=validate.Equal(True)) engine_internal_address = fields.String() engine_instance_uuid = fields.UUID(missing=None) engine_rtp_icesupport = fields.Boolean(required=False, missing=False) engine_rtp_stunaddr = fields.String(validate=validate.Length(min=1, max=1024), missing=None) nestbox_host = fields.String() nestbox_port = fields.Integer( validate=validate.Range(min=0, max=65535, error='Not a valid TCP/IP port number.'), missing=443, ) nestbox_verify_certificate = fields.Boolean(missing=True) nestbox_service_id = fields.String() nestbox_service_key = fields.String() nestbox_instance_name = fields.String() nestbox_engine_host = fields.String() nestbox_engine_port = fields.Integer( validate=validate.Range(min=0, max=65535, error='Not a valid TCP/IP port number.'), missing=443, ) @validates_schema def nestbox_all_or_nothing(self, data): if not data.get('nestbox_host'): return if 'nestbox_service_id' not in data: raise ValidationError( 'Missing keys for Nestbox configuration: nestbox_service_id') if 'nestbox_service_key' not in data: raise ValidationError( 'Missing keys for Nestbox configuration: nestbox_service_key') if 'nestbox_instance_name' not in data: raise ValidationError( 'Missing keys for Nestbox configuration: nestbox_instance_name' ) if 'nestbox_engine_host' not in data: raise ValidationError( 'Missing keys for Nestbox configuration: nestbox_engine_host') if 'engine_internal_address' not in data: raise ValidationError( 'Missing keys for Nestbox configuration: engine_internal_address' ) @validates_schema def check_rtp_fields(self, data): if not data.get('engine_rtp_icesupport'): return required_field = 'engine_rtp_stunaddr' if not data.get(required_field): raise ValidationError( 'Missing keys for rtp configuration: {}'.format( required_field), field_name=required_field, )
class PasswordResetPostParameters(BaseSchema): password = fields.String( validate=validate.Length(min=1), required=True, allow_none=True )
class UserPostSchema(_BaseUserSchema): uuid = fields.UUID() password = fields.String(validate=validate.Length(min=1), allow_none=True) email_address = fields.Email(allow_none=True)
class PauseSchema(Schema): reason = fields.String( validate=validate.Length(min=1, max=80), missing=None, default=None )
class ChangePasswordSchema(BaseSchema): old_password = fields.String(validate=validate.Length(min=1), required=True) new_password = fields.String(validate=validate.Length(min=1), required=True)
class PolicySchema(BaseSchema): name = fields.String(validate=validate.Length(min=1, max=80), required=True) description = fields.String(allow_none=True, missing=None) acl_templates = fields.List(fields.String(), missing=[])