def handle_post(self, request, user, *args, **kwargs):
        """
        Handles POST requests to list all the VIPs related to IPv6.

        URL: vip/ipv6/all/
        """

        self.log.info('Get all the VIPs related to IPv6')

        try:

            # Commons Validations

            # User permission
            if not has_perm(user, AdminPermission.VIPS_REQUEST, AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Business Validations

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(3, u'There is no value to the networkapi tag of XML request.')

            vip_map = networkapi_map.get('vip')
            if vip_map is None:
                return self.response_error(3, u'There is no value to the vip tag of XML request.')

            # Get XML data
            ip_str = str(vip_map['ipv6'])
            all_prop = str(vip_map['all_prop'])

            # Valid IPv6
            if not is_valid_ipv6(ip_str):
                self.log.error(
                    u'Parameter ipv6 is invalid. Value: %s.', ip_str)
                raise InvalidValueError(None, 'ipv6', ip_str)

            # Valid all_prop
            if not is_valid_int_param(all_prop):
                self.log.error(
                    u'Parameter all_prop is invalid. Value: %s.', all_prop)
                raise InvalidValueError(None, 'all_prop', all_prop)
            all_prop = int(all_prop)
            if all_prop not in (0, 1):
                self.log.error(
                    u'Parameter all_prop is invalid. Value: %s.', all_prop)
                raise InvalidValueError(None, 'all_prop', all_prop)

            blocks = str(IPv6Address(ip_str).exploded).split(':')

            # Find Ipv6 by blocks to check if it exist
            ipv6 = Ipv6.get_by_blocks(blocks[0], blocks[1], blocks[2], blocks[
                                      3], blocks[4], blocks[5], blocks[6], blocks[7])

            # Business Rules
            list_ips = []
            for ip in ipv6:

                ips_map = dict()
                ips_map = model_to_dict(ip)

                # Find all VIPs related to ipv6
                if all_prop == 1:
                    ips_map['vips'] = ip.requisicaovips_set.all().values()
                else:
                    vips = ip.requisicaovips_set.all().values_list(
                        'id', flat=True)
                    ips_map['vips'] = [int(item) for item in vips]

                list_ips.append(ips_map)

            # Return XML
            vips_map = dict()
            vips_map['ips'] = list_ips

            return self.response(dumps_networkapi(vips_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
Пример #2
0
    def handle_post(self, request, user, *args, **kwargs):
        """Handles POST requests to get an IPv4 or Ipv6 by oct or blocks .

        URL: ip/getbyoctblock/
        """

        self.log.info("Get a Ipv4's or Ipv6's")

        try:

            # Business Validations

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                msg = u'There is no value to the networkapi tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)
            ip_map = networkapi_map.get('ip_map')
            if ip_map is None:
                msg = u'There is no value to the ip tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)

            # Get XML data
            ip = ip_map.get('ip')

            # User permission
            if not has_perm(user, AdminPermission.IPS, AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            # Valid ip
            if not is_valid_ip_ipaddr(ip):
                self.log.error(u'Parameter ip is invalid. Value: %s.', ip)
                raise InvalidValueError(None, 'ip', ip)

            # Business Rules
            version = ''
            ip_list = ip.split('.')

            if len(ip_list) == 1:

                ip_list = ip.split(':')
                ips = Ipv6.get_by_blocks(ip_list[0], ip_list[1], ip_list[2], ip_list[
                                         3], ip_list[4], ip_list[5], ip_list[6], ip_list[7])
                version = IP_VERSION.IPv6[1]

            else:

                ips = Ip.get_by_octs(
                    ip_list[0], ip_list[1], ip_list[2], ip_list[3])
                version = IP_VERSION.IPv4[1]

            ips_list = []
            for ip in ips:
                ip_dict = model_to_dict(ip)
                ip_dict['version'] = version
                ips_list.append(ip_dict)

            return self.response(dumps_networkapi({'ips': ips_list}))

        except XMLError, x:
            self.log.error(u'Error reading the XML request.')
            return self.response_error(3, x)
    def handle_post(self, request, user, *args, **kwargs):
        """
        Handles POST requests to list all the VIPs related to IPv6.

        URL: vip/ipv6/all/
        """

        self.log.info("Get all the VIPs related to IPv6")

        try:

            # Commons Validations

            # User permission
            if not has_perm(user, AdminPermission.VIPS_REQUEST,
                            AdminPermission.READ_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                raise UserNotAuthorizedError(None)

            # Business Validations

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                return self.response_error(
                    3,
                    u'There is no value to the networkapi tag of XML request.')

            vip_map = networkapi_map.get('vip')
            if vip_map is None:
                return self.response_error(
                    3, u'There is no value to the vip tag of XML request.')

            # Get XML data
            ip_str = str(vip_map['ipv6'])
            all_prop = str(vip_map['all_prop'])

            # Valid IPv6
            if not is_valid_ipv6(ip_str):
                self.log.error(u'Parameter ipv6 is invalid. Value: %s.',
                               ip_str)
                raise InvalidValueError(None, 'ipv6', ip_str)

            # Valid all_prop
            if not is_valid_int_param(all_prop):
                self.log.error(u'Parameter all_prop is invalid. Value: %s.',
                               all_prop)
                raise InvalidValueError(None, 'all_prop', all_prop)
            all_prop = int(all_prop)
            if all_prop not in (0, 1):
                self.log.error(u'Parameter all_prop is invalid. Value: %s.',
                               all_prop)
                raise InvalidValueError(None, 'all_prop', all_prop)

            blocks = str(IPv6Address(ip_str).exploded).split(':')

            # Find Ipv6 by blocks to check if it exist
            ipv6 = Ipv6.get_by_blocks(blocks[0], blocks[1], blocks[2],
                                      blocks[3], blocks[4], blocks[5],
                                      blocks[6], blocks[7])

            # Business Rules
            list_ips = []
            for ip in ipv6:

                ips_map = dict()
                ips_map = model_to_dict(ip)

                # Find all VIPs related to ipv6
                if all_prop == 1:
                    ips_map["vips"] = ip.requisicaovips_set.all().values()
                else:
                    vips = ip.requisicaovips_set.all().values_list('id',
                                                                   flat=True)
                    ips_map["vips"] = [int(item) for item in vips]

                list_ips.append(ips_map)

            # Return XML
            vips_map = dict()
            vips_map['ips'] = list_ips

            return self.response(dumps_networkapi(vips_map))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)