def handle_post(self, request, user, *args, **kwargs): '''Handles POST requests to valid Real server. URL: vip/real/valid/ ''' self.log.info('Valid Real Server') 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: return self.response_error( 3, u'There is no value to the networkapi tag of XML request.' ) real_map = networkapi_map.get('real') if real_map is None: return self.response_error( 3, u'There is no value to the vip tag of XML request.') # Get XML data ip = real_map.get('ip') name = real_map.get('name_equipment') id_evip = real_map.get('id_environment_vip') valid = real_map.get('valid') # 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.') 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) # Valid Name Equipment if not is_valid_string_minsize( name, 3) or not is_valid_string_maxsize( name, 80) or not is_valid_regex(name, "^[A-Z0-9-_]+$"): self.log.error( u'Parameter name_equipment is invalid. Value: %s', name) raise InvalidValueError(None, 'name_equipment', name) # Valid Environment Vip if not is_valid_int_greater_zero_param(id_evip): self.log.error( u'Parameter id_environment_vip is invalid. Value: %s.', id_evip) raise InvalidValueError(None, 'id_environment_vip', id_evip) # Valid Equipment equip = Equipamento.get_by_name(name) # Valid EnvironmentVip evip = EnvironmentVip.get_by_pk(id_evip) version = "" if is_valid_ipv4(ip): version = IP_VERSION.IPv4[1] elif is_valid_ipv6(ip): version = IP_VERSION.IPv6[1] ip, equip, evip = RequisicaoVips.valid_real_server( ip, equip, evip, valid) real_dict = {} ip_dict = model_to_dict(ip) ip_dict["version"] = version real_dict["ip"] = ip_dict real_dict["equipment"] = model_to_dict(equip) real_dict["environmentvip"] = model_to_dict(evip) return self.response(dumps_networkapi({'real': real_dict})) 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 valid Real server. URL: vip/real/valid/ """ self.log.info('Valid Real Server') 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: return self.response_error(3, u'There is no value to the networkapi tag of XML request.') real_map = networkapi_map.get('real') if real_map is None: return self.response_error(3, u'There is no value to the vip tag of XML request.') # Get XML data ip = real_map.get('ip') name = real_map.get('name_equipment') id_evip = real_map.get('id_environment_vip') valid = real_map.get('valid') # 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.') 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) # Valid Name Equipment if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 80) or not is_valid_regex(name, '^[A-Z0-9-_]+$'): self.log.error( u'Parameter name_equipment is invalid. Value: %s', name) raise InvalidValueError(None, 'name_equipment', name) # Valid Environment Vip if not is_valid_int_greater_zero_param(id_evip): self.log.error( u'Parameter id_environment_vip is invalid. Value: %s.', id_evip) raise InvalidValueError(None, 'id_environment_vip', id_evip) # Valid Equipment equip = Equipamento.get_by_name(name) # Valid EnvironmentVip evip = EnvironmentVip.get_by_pk(id_evip) version = '' if is_valid_ipv4(ip): version = IP_VERSION.IPv4[1] elif is_valid_ipv6(ip): version = IP_VERSION.IPv6[1] ip, equip, evip = RequisicaoVips.valid_real_server( ip, equip, evip, valid) real_dict = {} ip_dict = model_to_dict(ip) ip_dict['version'] = version real_dict['ip'] = ip_dict real_dict['equipment'] = model_to_dict(equip) real_dict['environmentvip'] = model_to_dict(evip) return self.response(dumps_networkapi({'real': real_dict})) 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 check an IPv4 or Ipv6 for vip request. URL: ip/checkvipip/ """ self.log.info('Check a Ipv4 or Ipv6 for Vip') from networkapi.equipamento.models import TipoEquipamento 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') id_evip = ip_map.get('id_evip') # 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 id if ip is None: self.log.error(u'Parameter ip is invalid. Value: %s.', ip) raise InvalidValueError(None, 'ip', ip) # Valid evip id if not is_valid_int_greater_zero_param(id_evip): raise InvalidValueError(None, 'id_evip', id_evip) # Business Rules evip = EnvironmentVip.get_by_pk(id_evip) ip_list = ip.split('.') if len(ip_list) == 1: if not is_valid_ipv6(ip): self.log.error(u'Parameter ip is invalid. Value: %s.', ip) raise InvalidValueError(None, 'ip', ip) if len(evip.networkipv6_set.all()) <= 0: raise NetworkNotInEvip( 'IPv6', 'Não há rede no ambiente vip fornecido') ip_list = ip.split(':') ip_checked = Ipv6.get_by_octs_and_environment_vip( ip_list[0], ip_list[1], ip_list[2], ip_list[3], ip_list[4], ip_list[5], ip_list[6], ip_list[7], id_evip) ip_ok = False for ip_equip in ip_checked.ipv6equipament_set.all(): if ip_equip.equipamento.tipo_equipamento == TipoEquipamento.get_tipo_balanceador( ): ip_ok = True break if not ip_ok: raise IpNotAvailableError( None, 'Ipv6 indisponível para o Ambiente Vip: %s, pois não existe equipamento do Tipo Balanceador relacionado a este Ip.' % evip.show_environment_vip()) else: if not is_valid_ipv4(ip): self.log.error(u'Parameter ip is invalid. Value: %s.', ip) raise InvalidValueError(None, 'ip', ip) if len(evip.networkipv4_set.all()) <= 0: raise NetworkNotInEvip( 'IPv4', 'Não há rede no ambiente vip fornecido') ip_checked = Ip.get_by_octs_and_environment_vip( ip_list[0], ip_list[1], ip_list[2], ip_list[3], id_evip) ip_ok = False for ip_equip in ip_checked.ipequipamento_set.all(): if ip_equip.equipamento.tipo_equipamento == TipoEquipamento.get_tipo_balanceador( ): ip_ok = True break if not ip_ok: raise IpNotAvailableError( None, 'Ipv4 indisponível para o Ambiente Vip: %s, pois não existe equipamento do Tipo Balanceador relacionado a este Ip.' % evip.show_environment_vip()) ip_dict = model_to_dict(ip_checked) return self.response(dumps_networkapi({'ip': ip_dict})) except NetworkNotInEvip, e: return self.response_error(321, e.cause)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to verify that the IPv6 belongs to environment. URL: /ipv6/environment/ """ self.log.info('Verify that the IPv6 belongs to environment') try: # 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.') raise UserNotAuthorizedError(None) # 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.') ipv6_map = networkapi_map.get('ipv6_map') if ipv6_map is None: return self.response_error(3, u'There is no value to the ipv6_map tag of XML request.') # Get XML data environment_id = ipv6_map.get('id_environment') ipv6 = ipv6_map.get('ipv6') # Valid Environment ID if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'The id_environment parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'id_environment', environment_id) # Valid IPv6 ID if not is_valid_ipv6(ipv6): self.log.error( u'The ipv6 parameter is not a valid value: %s.', ipv6) raise InvalidValueError(None, 'ipv6', ipv6) blocks = str(IPv6Address(ipv6).exploded).split(':') # Find Environment by ID to check if it exist environment = Ambiente.get_by_pk(environment_id) # Find Ipv6 by blocks to check if it exist IPv6 = Ipv6.get_by_octs_and_environment(blocks[0], blocks[1], blocks[2], blocks[ 3], blocks[4], blocks[5], blocks[6], blocks[7], environment_id) # Generate return map ipv6_map = dict() ipv6_map['id'] = IPv6.id ipv6_map['id_vlan'] = IPv6.networkipv6.vlan.id ipv6_map['bloco1'] = IPv6.block1 ipv6_map['bloco2'] = IPv6.block2 ipv6_map['bloco3'] = IPv6.block3 ipv6_map['bloco4'] = IPv6.block4 ipv6_map['bloco5'] = IPv6.block5 ipv6_map['bloco6'] = IPv6.block6 ipv6_map['bloco7'] = IPv6.block7 ipv6_map['bloco8'] = IPv6.block8 ipv6_map['descricao'] = IPv6.description return self.response(dumps_networkapi({'ipv6': ipv6_map})) except UserNotAuthorizedError: return self.not_authorized() except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to verify that the IPv6 belongs to environment. URL: /ipv6/environment/ """ self.log.info('Verify that the IPv6 belongs to environment') try: # 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.') raise UserNotAuthorizedError(None) # 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.' ) ipv6_map = networkapi_map.get('ipv6_map') if ipv6_map is None: return self.response_error( 3, u'There is no value to the ipv6_map tag of XML request.') # Get XML data environment_id = ipv6_map.get('id_environment') ipv6 = ipv6_map.get('ipv6') # Valid Environment ID if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'The id_environment parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'id_environment', environment_id) # Valid IPv6 ID if not is_valid_ipv6(ipv6): self.log.error(u'The ipv6 parameter is not a valid value: %s.', ipv6) raise InvalidValueError(None, 'ipv6', ipv6) blocks = str(IPv6Address(ipv6).exploded).split(':') # Find Environment by ID to check if it exist environment = Ambiente.get_by_pk(environment_id) # Find Ipv6 by blocks to check if it exist IPv6 = Ipv6.get_by_octs_and_environment(blocks[0], blocks[1], blocks[2], blocks[3], blocks[4], blocks[5], blocks[6], blocks[7], environment_id) # Generate return map ipv6_map = dict() ipv6_map['id'] = IPv6.id ipv6_map['id_vlan'] = IPv6.networkipv6.vlan.id ipv6_map['bloco1'] = IPv6.block1 ipv6_map['bloco2'] = IPv6.block2 ipv6_map['bloco3'] = IPv6.block3 ipv6_map['bloco4'] = IPv6.block4 ipv6_map['bloco5'] = IPv6.block5 ipv6_map['bloco6'] = IPv6.block6 ipv6_map['bloco7'] = IPv6.block7 ipv6_map['bloco8'] = IPv6.block8 ipv6_map['descricao'] = IPv6.description return self.response(dumps_networkapi({'ipv6': ipv6_map})) except UserNotAuthorizedError: return self.not_authorized() except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): '''Handles POST requests to check an IPv4 or Ipv6 for vip request. URL: ip/checkvipip/ ''' self.log.info('Check a Ipv4 or Ipv6 for Vip') 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') id_evip = ip_map.get('id_evip') # 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 id if ip is None: self.log.error(u'Parameter ip is invalid. Value: %s.', ip) raise InvalidValueError(None, 'ip', ip) # Valid evip id if not is_valid_int_greater_zero_param(id_evip): raise InvalidValueError(None, 'id_evip', id_evip) # Business Rules evip = EnvironmentVip.get_by_pk(id_evip) ip_list = ip.split(".") if len(ip_list) == 1: if not is_valid_ipv6(ip): self.log.error(u'Parameter ip is invalid. Value: %s.', ip) raise InvalidValueError(None, 'ip', ip) if len(evip.networkipv6_set.all()) <= 0: raise NetworkNotInEvip( 'IPv6', 'Não há rede no ambiente vip fornecido') ip_list = ip.split(":") ip_checked = Ipv6.get_by_octs_and_environment_vip(ip_list[0], ip_list[1], ip_list[ 2], ip_list[3], ip_list[4], ip_list[5], ip_list[6], ip_list[7], id_evip) ip_ok = False for ip_equip in ip_checked.ipv6equipament_set.all(): if ip_equip.equipamento.tipo_equipamento == TipoEquipamento.get_tipo_balanceador(): ip_ok = True break if not ip_ok: raise IpNotAvailableError( None, "Ipv6 indisponível para o Ambiente Vip: %s, pois não existe equipamento do Tipo Balanceador relacionado a este Ip." % evip.show_environment_vip()) else: if not is_valid_ipv4(ip): self.log.error(u'Parameter ip is invalid. Value: %s.', ip) raise InvalidValueError(None, 'ip', ip) if len(evip.networkipv4_set.all()) <= 0: raise NetworkNotInEvip( 'IPv4', 'Não há rede no ambiente vip fornecido') ip_checked = Ip.get_by_octs_and_environment_vip( ip_list[0], ip_list[1], ip_list[2], ip_list[3], id_evip) ip_ok = False for ip_equip in ip_checked.ipequipamento_set.all(): if ip_equip.equipamento.tipo_equipamento == TipoEquipamento.get_tipo_balanceador(): ip_ok = True break if not ip_ok: raise IpNotAvailableError( None, "Ipv4 indisponível para o Ambiente Vip: %s, pois não existe equipamento do Tipo Balanceador relacionado a este Ip." % evip.show_environment_vip()) ip_dict = model_to_dict(ip_checked) return self.response(dumps_networkapi({'ip': ip_dict})) except NetworkNotInEvip, e: return self.response_error(321, e.cause)
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)
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)