예제 #1
0
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')
예제 #2
0
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'])
    )
예제 #3
0
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)
예제 #4
0
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'])
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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
예제 #8
0
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)
예제 #9
0
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
예제 #10
0
    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
예제 #11
0
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)
예제 #12
0
class GroupRequestSchema(BaseSchema):

    name = xfields.String(validate=validate.Length(min=1, max=128),
                          required=True)
예제 #13
0
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,
            )
예제 #14
0
class PasswordResetPostParameters(BaseSchema):

    password = fields.String(
        validate=validate.Length(min=1), required=True, allow_none=True
    )
예제 #15
0
class UserPostSchema(_BaseUserSchema):

    uuid = fields.UUID()
    password = fields.String(validate=validate.Length(min=1), allow_none=True)
    email_address = fields.Email(allow_none=True)
예제 #16
0
class PauseSchema(Schema):
    reason = fields.String(
        validate=validate.Length(min=1, max=80), missing=None, default=None
    )
예제 #17
0
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)
예제 #18
0
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=[])