def validate_filter(self, filter_map): '''Validates filter fields before add @param filter_map: Map with the data of the request. @raise InvalidValueError: Represents an error occurred validating a value. ''' # Get XML data name = filter_map['name'] description = filter_map['description'] # name can NOT be greater than 100 if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100) or not is_valid_text(name): self.log.error(u'Parameter name is invalid. Value: %s.', name) raise InvalidValueError(None, 'name', name) # description can NOT be greater than 200 if not is_valid_string_minsize(description, 3, False) or not is_valid_string_maxsize(description, 200, False) or not is_valid_text(description, True): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # Verify existence if len(Filter.objects.filter(name=name).exclude(id=self.id)) > 0: raise FilterDuplicateError( None, u'Já existe um filtro com o nome %s no banco de dados.' % name) # set variables self.name = name self.description = description
def handle_put(self, request, user, *args, **kwargs): """Treat PUT requests to edit Access Type. URL: /tipoacesso/<id_tipo_acesso>/ """ try: if not has_perm(user, AdminPermission.ACCESS_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error(u"User does not have permission to perform the operation.") raise UserNotAuthorizedError(None) # Valid Access Type ID tipo_acesso_id = kwargs.get("id_tipo_acesso") if not is_valid_int_greater_zero_param(tipo_acesso_id): self.log.error(u"The tipo_acesso_id parameter is not a valid value: %s.", tipo_acesso_id) raise InvalidValueError(None, "tipo_acesso_id", tipo_acesso_id) xml_map, attrs_map = loads(request.raw_post_data) networkapi_map = xml_map.get("networkapi") if networkapi_map is None: return self.response_error(3, u"There is no networkapi tag in request XML.") tipo_acesso_map = networkapi_map.get("tipo_acesso") if tipo_acesso_map is None: return self.response_error(3, u"There is no tipo_acesso tag in request XML.") # Valid protocol protocol = tipo_acesso_map.get("protocolo") if ( not is_valid_string_minsize(protocol, 3) or not is_valid_string_maxsize(protocol, 45) or not is_valid_regex(protocol, r"^[- a-zA-Z0-9]+$") ): self.log.error(u"Parameter protocol is invalid. Value: %s", protocol) raise InvalidValueError(None, "protocol", protocol) # Verify existence tpa = TipoAcesso.get_by_pk(tipo_acesso_id) tpa.protocolo = protocol try: if len(TipoAcesso.objects.filter(protocolo__iexact=protocol).exclude(id=tpa.id)) > 0: raise DuplicateProtocolError(None, u"Access Type with protocol %s already exists" % protocol) except TipoAcesso.DoesNotExist: pass with distributedlock(LOCK_TYPE_ACCESS % tipo_acesso_id): try: # save access type tpa.save(user) except Exception, e: self.log.error(u"Failed to update TipoAcesso.") raise TipoAcessoError(e, u"Failed to update TipoAcesso.") return self.response(dumps_networkapi({}))
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Brand. URL: brand/ """ try: self.log.info("Add Brand") # User permission if not has_perm(user, AdminPermission.BRAND_MANAGEMENT, AdminPermission.WRITE_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.') brand_map = networkapi_map.get('brand') if brand_map is None: return self.response_error(3, u'There is no value to the brand tag of XML request.') # Get XML data name = brand_map.get('name') # Valid name if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) try: Marca.get_by_name(name) raise MarcaNameDuplicatedError( None, u'Marca com o nome %s já cadastrada.' % name) except MarcaNotFoundError: pass brand = Marca() # set variables brand.nome = name try: # save Brand brand.save(user) except Exception, e: self.log.error(u'Failed to save the Brand.') raise EquipamentoError(e, u'Failed to save the Brand.') brand_map = dict() brand_map['brand'] = model_to_dict(brand, exclude=["nome"]) return self.response(dumps_networkapi(brand_map))
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to add new network types. URL: /net_type/ """ try: # Check permission if not has_perm(user, AdminPermission.NETWORK_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Get request XML data xml_map, attrs_map = loads(request.raw_post_data) # Get networkapi tag map networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'There is no networkapi tag from request XML.') # Get net_type tag map net_type_map = networkapi_map.get('net_type') if net_type_map is None: return self.response_error(3, u'There is no tipo_rede tag from request XML.') # Valid name attribute name = net_type_map.get('name') if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100): self.log.error( u'Parameter %s is invalid. Value: %s.', 'name', name) raise InvalidValueError(None, 'name', name) net_type = TipoRede(tipo_rede=name) if not is_valid_vlan_name(name): self.log.error( u'Parameter %s is invalid because is using special characters and/or breaklines.', name) raise InvalidValueError(None, 'name', name) try: TipoRede.get_by_name(net_type.tipo_rede) raise NetworkTypeNameDuplicatedError( None, u'Network type with name %s already exist' % net_type.tipo_rede) except NetworkTypeNotFoundError: pass try: net_type.save() except Exception, e: self.log.error(u'Failed to insert network type.') raise VlanError(e, u'Failed to insert network type.') net_type_map = dict() net_type_map['id'] = net_type.id return self.response(dumps_networkapi({'net_type': net_type_map}))
def handle_post(self, request, user, *args, **kwargs): """Trata as requisições de POST para alterar a senha de um Usuario. URL: user-change-pass/ """ try: xml_map, attrs_map = loads(request.raw_post_data) self.log.info('Change user password') # User permission if not has_perm(user, AdminPermission.AUTHENTICATE, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'Não existe valor para a tag networkapi do XML de requisição.') user_map = networkapi_map.get('user') if user_map is None: return self.response_error(3, u'Não existe valor para a tag usuario do XML de requisição.') # Get XML data id_user = user_map.get('user_id') password = user_map.get('password') # Valid ID User if not is_valid_int_greater_zero_param(id_user): self.log.error( u'The id_user parameter is not a valid value: %s.', id_user) raise InvalidValueError(None, 'id_user', id_user) # Valid pwd if not is_valid_string_minsize(password, 3) or not is_valid_string_maxsize(password, 45): self.log.error(u'Parameter password is invalid. Value: ****') raise InvalidValueError(None, 'password', '****') # Find User by ID to check if it exist usr = Usuario.get_by_pk(id_user) with distributedlock(LOCK_USER % id_user): # set variable usr.pwd = hashlib.md5(password).hexdigest() try: # update User usr.save(user) except Exception, e: self.log.error(u'Failed to update the user.') raise UsuarioError(e, u'Failed to update the user.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to add new Access Type. URL: /tipoacesso/ """ try: if not has_perm(user, AdminPermission.ACCESS_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) xml_map, attrs_map = loads(request.raw_post_data) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'There is no networkapi tag in request XML.') tipo_acesso_map = networkapi_map.get('tipo_acesso') if tipo_acesso_map is None: return self.response_error( 3, u'There is no tipo_acesso tag in request XML.') # Valid protocol protocol = tipo_acesso_map.get('protocolo') if not is_valid_string_minsize( protocol, 3) or not is_valid_string_maxsize( protocol, 45) or not is_valid_regex( protocol, r'^[- a-zA-Z0-9]+$'): self.log.error(u'Parameter protocol is invalid. Value: %s', protocol) raise InvalidValueError(None, 'protocol', protocol) access_type = TipoAcesso() access_type.protocolo = protocol try: TipoAcesso.objects.get(protocolo__iexact=access_type.protocolo) raise DuplicateProtocolError( None, u'Access Type with protocol %s already exists' % protocol) except TipoAcesso.DoesNotExist: pass try: # save access type access_type.save() except Exception, e: self.log.error(u'Failed to save TipoAcesso.') raise TipoAcessoError(e, u'Failed to save TipoAcesso.') return self.response( dumps_networkapi({'tipo_acesso': { 'id': access_type.id }}))
def valid_environment_vip(self, environmentvip_map): '''Validate the values of environment vip @param environmentvip_map: Map with the data of the request. @raise InvalidValueError: Represents an error occurred validating a value. ''' # Get XML data finalidade_txt = environmentvip_map.get('finalidade_txt') cliente_txt = environmentvip_map.get('cliente_txt') ambiente_p44_txt = environmentvip_map.get('ambiente_p44_txt') description = environmentvip_map.get('description') # finalidade_txt can NOT be greater than 50 or lesser than 3 if not is_valid_string_maxsize(finalidade_txt, 50, True) or not is_valid_string_minsize(finalidade_txt, 3, True) or not is_valid_text(finalidade_txt): self.log.error( u'Parameter finalidade_txt is invalid. Value: %s.', finalidade_txt) raise InvalidValueError(None, 'finalidade_txt', finalidade_txt) # cliente_txt can NOT be greater than 50 or lesser than 3 if not is_valid_string_maxsize(cliente_txt, 50, True) or not is_valid_string_minsize(cliente_txt, 3, True) or not is_valid_text(cliente_txt): self.log.error( u'Parameter cliente_txt is invalid. Value: %s.', cliente_txt) raise InvalidValueError(None, 'cliente_txt', cliente_txt) # ambiente_p44_txt can NOT be greater than 50 or lesser than 3 if not is_valid_string_maxsize(ambiente_p44_txt, 50, True) or not is_valid_string_minsize(ambiente_p44_txt, 3, True) or not is_valid_text(ambiente_p44_txt): self.log.error( u'Parameter ambiente_p44_txt is invalid. Value: %s.', ambiente_p44_txt) raise InvalidValueError(None, 'ambiente_p44_txt', ambiente_p44_txt) if not is_valid_string_maxsize(description, 50, True) or not is_valid_string_minsize(description, 3, True) or not is_valid_text(description): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # set variables self.finalidade_txt = finalidade_txt self.cliente_txt = cliente_txt self.ambiente_p44_txt = ambiente_p44_txt self.description = description
def handle_post(self, request, user, *args, **kwargs): """Treat requests Post to search cliente_txt of Environment VIP by finalidade_txt URL: environmentvip/search/ """ try: self.log.info( 'Search cliente_txt Environment VIP by finalidade_txt') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_VIP, 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.') environmentvip_map = networkapi_map.get('vip') if environmentvip_map is None: return self.response_error(3, u'There is no value to the vip tag of XML request.') # Get XML data finalidade = environmentvip_map.get('finalidade_txt') if not is_valid_string_maxsize(finalidade, 50) or not is_valid_string_minsize(finalidade, 3) or not is_valid_text(finalidade): self.log.error( u'The finalidade_txt parameter is not a valid value: %s.', finalidade) raise InvalidValueError(None, 'finalidade_txt', finalidade) environmentVip = EnvironmentVip() evip_values = environmentVip.list_all_clientes_by_finalitys( finalidade) evips = dict() evips_list = [] for evip in evip_values: evips['finalidade_txt'] = finalidade evips['cliente_txt'] = evip.get('cliente_txt') evips_list.append(evips) evips = dict() return self.response(dumps_networkapi({'cliente_txt': evips_list})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests Post to search cliente_txt of Environment VIP by finalidade_txt URL: environmentvip/search/ """ try: self.log.info( "Search cliente_txt Environment VIP by finalidade_txt") # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_VIP, 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.') environmentvip_map = networkapi_map.get('vip') if environmentvip_map is None: return self.response_error(3, u'There is no value to the vip tag of XML request.') # Get XML data finalidade = environmentvip_map.get('finalidade_txt') if not is_valid_string_maxsize(finalidade, 50) or not is_valid_string_minsize(finalidade, 3) or not is_valid_text(finalidade): self.log.error( u'The finalidade_txt parameter is not a valid value: %s.', finalidade) raise InvalidValueError(None, 'finalidade_txt', finalidade) environmentVip = EnvironmentVip() evip_values = environmentVip.list_all_clientes_by_finalitys( finalidade) evips = dict() evips_list = [] for evip in evip_values: evips['finalidade_txt'] = finalidade evips['cliente_txt'] = evip.get('cliente_txt') evips_list.append(evips) evips = dict() return self.response(dumps_networkapi({'cliente_txt': evips_list})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to insert a Equipment Type. URL: equipmenttype/ """ try: self.log.info("Add Equipment Script") # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # 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) equipment_type_map = networkapi_map.get('equipment_type') if equipment_type_map is None: msg = u'There is no value to the equipment_type tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data name = equipment_type_map.get('name') # Valid Name if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100) or not is_valid_regex(name, "^[A-Za-z0-9 -]+$"): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Business Rules equipment_type = TipoEquipamento() # save Equipment Type equipment_type.insert_new(user, name) etype_dict = dict() etype_dict['id'] = equipment_type.id return self.response(dumps_networkapi({'equipment_type': etype_dict})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to add new network types. URL: /net_type/ """ try: # Check permission if not has_perm(user, AdminPermission.NETWORK_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Get request XML data xml_map, attrs_map = loads(request.raw_post_data) # Get networkapi tag map networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'There is no networkapi tag from request XML.') # Get net_type tag map net_type_map = networkapi_map.get('net_type') if net_type_map is None: return self.response_error(3, u'There is no tipo_rede tag from request XML.') # Valid name attribute name = net_type_map.get('name') if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100): self.log.error( u'Parameter %s is invalid. Value: %s.', 'name', name) raise InvalidValueError(None, 'name', name) net_type = TipoRede(tipo_rede=name) try: TipoRede.get_by_name(net_type.tipo_rede) raise NetworkTypeNameDuplicatedError( None, u'Network type with name %s already exist' % net_type.tipo_rede) except NetworkTypeNotFoundError: pass try: net_type.save(user) except Exception, e: self.log.error(u'Failed to insert network type.') raise VlanError(e, u'Failed to insert network type.') net_type_map = dict() net_type_map['id'] = net_type.id return self.response(dumps_networkapi({'net_type': net_type_map}))
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to insert a Equipment Type. URL: equipmenttype/ """ try: self.log.info("Add Equipment Script") # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # 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) equipment_type_map = networkapi_map.get('equipment_type') if equipment_type_map is None: msg = u'There is no value to the equipment_type tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data name = equipment_type_map.get('name') # Valid Name if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100) or not is_valid_regex(name, "^[A-Za-z0-9 -]+$"): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Business Rules equipment_type = TipoEquipamento() # save Equipment Type equipment_type.insert_new(user, name) etype_dict = dict() etype_dict['id'] = equipment_type.id return self.response(dumps_networkapi({'equipment_type': etype_dict})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_get(self, request, user, *args, **kwargs): """Método responsável por tratar as requisições GET para consultar as interfaces. URL: /interface/<nome_interface>/equipamento/<id_equipamento> URL: /interface/equipamento/<id_equipamento> """ # Get url parameters equipment_id = kwargs.get('id_equipamento') interface_name = kwargs.get('nome_interface') # Temporário, remover. Fazer de outra forma. if isinstance(interface_name, basestring): interface_name = interface_name.replace('s2it_replace', '/') is_new = kwargs.get('new') try: # Valid id_equipamento value if not is_valid_int_greater_zero_param(equipment_id): self.log.error(u'Parameter equipment_id is invalid. Value: %s', equipment_id) raise InvalidValueError(None, 'equipment_id', equipment_id) # Valid interface_name value if not is_valid_string_minsize( interface_name, 1, required=False) or not is_valid_string_maxsize( interface_name, 20, required=False): self.log.error( u'Parameter interface_name is invalid. Value: %s', interface_name) raise InvalidValueError(None, 'interface_name', interface_name) # Check permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION, None, equipment_id, AdminPermission.EQUIP_READ_OPERATION): return self.not_authorized() # Check interface and call search method if interface_name is None: return self.search_interface_of_equipment(equipment_id, is_new) else: return self.search_interface_by_name_and_equipment( equipment_id, interface_name, is_new) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to add new Access Type. URL: /tipoacesso/ """ try: if not has_perm(user, AdminPermission.ACCESS_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error(u"User does not have permission to perform the operation.") raise UserNotAuthorizedError(None) xml_map, attrs_map = loads(request.raw_post_data) networkapi_map = xml_map.get("networkapi") if networkapi_map is None: return self.response_error(3, u"There is no networkapi tag in request XML.") tipo_acesso_map = networkapi_map.get("tipo_acesso") if tipo_acesso_map is None: return self.response_error(3, u"There is no tipo_acesso tag in request XML.") # Valid protocol protocol = tipo_acesso_map.get("protocolo") if ( not is_valid_string_minsize(protocol, 3) or not is_valid_string_maxsize(protocol, 45) or not is_valid_regex(protocol, r"^[- a-zA-Z0-9]+$") ): self.log.error(u"Parameter protocol is invalid. Value: %s", protocol) raise InvalidValueError(None, "protocol", protocol) access_type = TipoAcesso() access_type.protocolo = protocol try: TipoAcesso.objects.get(protocolo__iexact=access_type.protocolo) raise DuplicateProtocolError(None, u"Access Type with protocol %s already exists" % protocol) except TipoAcesso.DoesNotExist: pass try: # save access type access_type.save(user) except Exception, e: self.log.error(u"Failed to save TipoAcesso.") raise TipoAcessoError(e, u"Failed to save TipoAcesso.") return self.response(dumps_networkapi({"tipo_acesso": {"id": access_type.id}}))
def handle_get(self, request, user, *args, **kwargs): """Método responsável por tratar as requisições GET para consultar as interfaces. URL: /interface/<nome_interface>/equipamento/<id_equipamento> URL: /interface/equipamento/<id_equipamento> """ # Get url parameters equipment_id = kwargs.get("id_equipamento") interface_name = kwargs.get("nome_interface") # Temporário, remover. Fazer de outra forma. if isinstance(interface_name, basestring): interface_name = interface_name.replace("s2it_replace", "/") is_new = kwargs.get("new") try: # Valid id_equipamento value if not is_valid_int_greater_zero_param(equipment_id): self.log.error(u"Parameter equipment_id is invalid. Value: %s", equipment_id) raise InvalidValueError(None, "equipment_id", equipment_id) # Valid interface_name value if not is_valid_string_minsize(interface_name, 1, required=False) or not is_valid_string_maxsize( interface_name, 20, required=False ): self.log.error(u"Parameter interface_name is invalid. Value: %s", interface_name) raise InvalidValueError(None, "interface_name", interface_name) # Check permission if not has_perm( user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION, None, equipment_id, AdminPermission.EQUIP_READ_OPERATION, ): return self.not_authorized() # Check interface and call search method if interface_name is None: return self.search_interface_of_equipment(equipment_id, is_new) else: return self.search_interface_by_name_and_equipment(equipment_id, interface_name, is_new) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def validate_filter(self, filter_map): """Validates filter fields before add @param filter_map: Map with the data of the request. @raise InvalidValueError: Represents an error occurred validating a value. """ # Get XML data name = filter_map['name'] description = filter_map['description'] # name can NOT be greater than 100 if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize( name, 100) or not is_valid_text(name): self.log.error(u'Parameter name is invalid. Value: %s.', name) raise InvalidValueError(None, 'name', name) # description can NOT be greater than 200 if not is_valid_string_minsize( description, 3, False) or not is_valid_string_maxsize( description, 200, False) or not is_valid_text( description, True): self.log.error(u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # Verify existence if len(Filter.objects.filter(name=name).exclude(id=self.id)) > 0: raise FilterDuplicateError( None, u'Já existe um filtro com o nome %s no banco de dados.' % name) # set variables self.name = name self.description = description
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to create new VLAN without add NetworkIPv4. URLs: /vlan/no-network/ """ self.log.info('Create new VLAN without add NetworkIPv4') try: # Commons Validations # User permission if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # 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) vlan_map = networkapi_map.get('vlan') if vlan_map is None: msg = u'There is no value to the vlan tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data environment = vlan_map.get('environment_id') name = vlan_map.get('name') description = vlan_map.get('description') vrf = vlan_map.get('vrf') # Name must NOT be none and 50 is the maxsize if not is_valid_string_minsize( name, 3) or not is_valid_string_maxsize(name, 50): self.log.error(u'Parameter name is invalid. Value: %s.', name) raise InvalidValueError(None, 'name', name) # Description can NOT be greater than 200 if not is_valid_string_minsize( description, 3, False) or not is_valid_string_maxsize( description, 200, False): self.log.error(u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # vrf can NOT be greater than 100 if not is_valid_string_maxsize(vrf, 100, False): self.log.error(u'Parameter vrf is invalid. Value: %s.', vrf) raise InvalidValueError(None, 'vrf', vrf) # Environment try: # Valid environment ID if not is_valid_int_greater_zero_param(environment): self.log.error( u'Parameter environment_id is invalid. Value: %s.', environment) raise InvalidValueError(None, 'environment_id', environment) # Find environment by ID to check if it exist env = Ambiente.get_by_pk(environment) except AmbienteNotFoundError, e: self.log.error(u'The environment parameter does not exist.') return self.response_error(112) # Business Rules # New Vlan vlan = Vlan() vlan.nome = name vlan.descricao = description vlan.ambiente = env # Check if environment has min/max num_vlan value or use the value # thas was configured in settings if (vlan.ambiente.min_num_vlan_1 and vlan.ambiente.max_num_vlan_1 ) or (vlan.ambiente.min_num_vlan_2 and vlan.ambiente.max_num_vlan_2): min_num_01 = vlan.ambiente.min_num_vlan_1 if vlan.ambiente.min_num_vlan_1 and vlan.ambiente.max_num_vlan_1 else vlan.ambiente.min_num_vlan_2 max_num_01 = vlan.ambiente.max_num_vlan_1 if vlan.ambiente.min_num_vlan_1 and vlan.ambiente.max_num_vlan_1 else vlan.ambiente.max_num_vlan_2 min_num_02 = vlan.ambiente.min_num_vlan_2 if vlan.ambiente.min_num_vlan_2 and vlan.ambiente.max_num_vlan_2 else vlan.ambiente.min_num_vlan_1 max_num_02 = vlan.ambiente.max_num_vlan_2 if vlan.ambiente.min_num_vlan_2 and vlan.ambiente.max_num_vlan_2 else vlan.ambiente.max_num_vlan_1 else: min_num_01 = settings.MIN_VLAN_NUMBER_01 max_num_01 = settings.MAX_VLAN_NUMBER_01 min_num_02 = settings.MIN_VLAN_NUMBER_02 max_num_02 = settings.MAX_VLAN_NUMBER_02 #To avoid allocation same vlan number twice for different environments in same equipments #Lock all environments related to this environment when allocating vlan number #select all equipments from this environment that are not part of a filter # and them selects all environments from all these equipments and lock them out filtered_equipment_type_ids = list() env_filter = None try: env_filter = env.filter.id except: pass for fet in FilterEquipType.objects.filter(filter=env_filter): filtered_equipment_type_ids.append(fet.equiptype.id) filtered_environment_equips = Equipamento.objects.filter( equipamentoambiente__ambiente=env).exclude( tipo_equipamento__in=filtered_equipment_type_ids) #select all environments from the equips that were not filtered locks_list = list() environments_list = Ambiente.objects.filter( equipamentoambiente__equipamento__in=filtered_environment_equips ).distinct().order_by('id') for environment in environments_list: lock = distributedlock(LOCK_ENVIRONMENT % environment.id) lock.__enter__() locks_list.append(lock) # Persist try: vlan.create_new(user, min_num_01, max_num_01, min_num_02, max_num_02) except Exception, e: #release all the locks if failed for lock in locks_list: lock.__exit__('', '', '') raise e
def handle_post(self, request, user, *args, **kwargs): '''Handles POST requests to edit an IP6. URL: ipv6/edit/ ''' self.log.info('Edit an IP6 and associate it to an equipment') try: # 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 id_ip = ip_map.get('id_ip') description = ip_map.get('descricao') ip6 = ip_map.get('ip6') # Valid equip_id if not is_valid_int_greater_zero_param(id_ip): self.log.error(u'Parameter id_ip is invalid. Value: %s.', id_ip) raise InvalidValueError(None, 'id_ip', id_ip) # Description can NOT be greater than 100 if not is_valid_string_maxsize(ip6, 39): self.log.error(u'Parameter descricao is invalid. Value: %s.', ip6) raise InvalidValueError(None, 'ip6', ip6) if description is not None: if not is_valid_string_maxsize( description, 100) or not is_valid_string_minsize( description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # Business Rules # New IP ipv6 = Ipv6() ipv6 = ipv6.get_by_pk(id_ip) with distributedlock(LOCK_IPV6 % id_ip): ip_error = ip6 ip6 = ip6.split(":") # Ip informado de maneira incorreta if len(ip6) is not 8: raise InvalidValueError(None, 'ip6', ip_error) ipv6.description = description ipv6.block1 = ip6[0] ipv6.block2 = ip6[1] ipv6.block3 = ip6[2] ipv6.block4 = ip6[3] ipv6.block5 = ip6[4] ipv6.block6 = ip6[5] ipv6.block7 = ip6[6] ipv6.block8 = ip6[7] # Persist ipv6.edit_ipv6(user) return self.response(dumps_networkapi({})) except IpNotFoundError, e: return self.response_error(150, e.message)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to authenticate to user. URL: authenticate/ """ try: self.log.info("Authenticate user") # User permission if not has_perm(user, AdminPermission.AUTHENTICATE, AdminPermission.WRITE_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.') user_map = networkapi_map.get('user') if user_map is None: return self.response_error(3, u'There is no value to the user tag of XML request.') # Get XML data username = user_map.get('username') password = user_map.get('password') is_ldap_user = user_map.get('is_ldap_user') # Username can NOT be less 3 and greater than 45 if not is_valid_string_minsize(username, 3) or not is_valid_string_maxsize(username, 45): self.log.error( u'Parameter username is invalid. Value: %s.', username) raise InvalidValueError(None, 'username', username) if not is_valid_boolean_param(is_ldap_user): self.log.error( u'Parameter is_ldap_user is invalid. Value: %s.', is_ldap_user) raise InvalidValueError(None, 'is_ldap_user', is_ldap_user) else: is_ldap_user = convert_string_or_int_to_boolean(is_ldap_user) if is_ldap_user: user = Usuario().get_by_ldap_user(username, True) password = user.pwd else: # Password can NOT be less 3 and greater than 45 if not is_valid_string_minsize(password, 3) or not is_valid_string_maxsize(password, 45): self.log.error( u'Parameter password is invalid. Value: %s.', '****') raise InvalidValueError(None, 'password', '****') # Find user by username, password to check if it exist user = Usuario().get_enabled_user(username.upper(), password) # Valid user if user is None: return self.response(dumps_networkapi({})) perms = {} for ugroup in user.grupos.all(): for perm in ugroup.permissaoadministrativa_set.all(): function = perm.permission.function if perms.has_key(function): write = False read = False if perms.get(function).get('write') == True or perm.escrita == True: write = True if perms.get(function).get('read') == True or perm.leitura == True: read = True perms[function] = {'write': write, 'read': read} else: perms[function] = { 'write': perm.escrita, 'read': perm.leitura} user_map = {} user_dict = model_to_dict( user, fields=['id', 'user', 'nome', 'email', 'ativo', 'user_ldap']) user_dict['pwd'] = password user_dict['permission'] = perms user_map['user'] = user_dict return self.response(dumps_networkapi(user_map)) except UsuarioNotFoundError: return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to find all Equipments by search parameters. URLs: /equipment/find/ """ self.log.info('Find all Equipments') try: # Commons Validations # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Load XML data xml_map, attrs_map = loads( request.raw_post_data, ["searchable_columns", "asorting_cols"]) # 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) equipment_map = networkapi_map.get('equipamento') if equipment_map is None: msg = u'There is no value to the equipment tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data start_record = equipment_map.get("start_record") end_record = equipment_map.get("end_record") asorting_cols = equipment_map.get("asorting_cols") searchable_columns = equipment_map.get("searchable_columns") custom_search = equipment_map.get("custom_search") name = equipment_map.get("nome") iexact = equipment_map.get("exato") environment = equipment_map.get("ambiente") equip_type = equipment_map.get("tipo_equipamento") group = equipment_map.get("grupo") ip = equipment_map.get("ip") # Business Rules # Start with alls equip = Equipamento.objects.select_related().all() if name is not None: # If name is valid, add to filter if not is_valid_string_minsize(name, 3, False): raise InvalidValueError(None, 'nome', name) else: # Iexact must be valid to add name to filter if not is_valid_boolean_param(iexact, False): raise InvalidValueError(None, 'exato', iexact) else: if (iexact is None) or (iexact == "False") or (iexact == "0"): iexact = False if iexact: equip = equip.filter(nome=name) else: equip = equip.filter(nome__icontains=name) # If environment is valid, add to filter if environment is not None: if not is_valid_int_greater_zero_param(environment, False): raise InvalidValueError(None, 'ambiente', environment) else: equip = equip.filter( equipamentoambiente__ambiente__pk=environment) if equip_type is not None: # If equip_type is valid, add to filter if not is_valid_int_greater_zero_param(equip_type, False): raise InvalidValueError( None, 'tipo_equipamento', equip_type) else: equip = equip.filter(tipo_equipamento__pk=equip_type) if group is not None: # If equip_type is valid, add to filter if not is_valid_int_greater_zero_param(group, False): raise InvalidValueError(None, 'grupo', group) else: equip = equip.filter(grupos__pk=group) if ip is not None: # If ip is valid if not is_valid_string_minsize(ip, 1, False): raise InvalidValueError(None, 'ip', ip) else: blocks, ip, version = break_ip(ip) try: IPAddress(ip) except ValueError, e: raise InvalidValueError(None, 'ip', ip) # Filter octs if version == IP_VERSION.IPv4[0]: # IP v4 oct1 = oct2 = oct3 = oct4 = Q() if len(blocks[0]) != 0: oct1 = Q(ipequipamento__ip__oct1=blocks[0]) if len(blocks[1]) != 0: oct2 = Q(ipequipamento__ip__oct2=blocks[1]) if len(blocks[2]) != 0: oct3 = Q(ipequipamento__ip__oct3=blocks[2]) if len(blocks[3]) != 0: oct4 = Q(ipequipamento__ip__oct4=blocks[3]) equip = equip.filter(oct1 & oct2 & oct3 & oct4) else: # IP v6 oct1 = oct2 = oct3 = oct4 = oct5 = oct6 = oct7 = oct8 = Q() if len(blocks[0]) != 0: oct1 = Q( ipv6equipament__ip__block1__iexact=blocks[0]) if len(blocks[1]) != 0: oct2 = Q( ipv6equipament__ip__block2__iexact=blocks[1]) if len(blocks[2]) != 0: oct3 = Q( ipv6equipament__ip__block3__iexact=blocks[2]) if len(blocks[3]) != 0: oct4 = Q( ipv6equipament__ip__block4__iexact=blocks[3]) if len(blocks[4]) != 0: oct5 = Q( ipv6equipament__ip__block5__iexact=blocks[4]) if len(blocks[5]) != 0: oct6 = Q( ipv6equipament__ip__block6__iexact=blocks[5]) if len(blocks[6]) != 0: oct7 = Q( ipv6equipament__ip__block7__iexact=blocks[6]) if len(blocks[7]) != 0: oct8 = Q( ipv6equipament__ip__block8__iexact=blocks[7]) equip = equip.filter( oct1 & oct2 & oct3 & oct4 & oct5 & oct6 & oct7 & oct8) equip = equip.distinct() # Datatable paginator equip, total = build_query_to_datatable( equip, asorting_cols, custom_search, searchable_columns, start_record, end_record) itens = get_equips(equip) equipment_map = dict() equipment_map["equipamento"] = itens equipment_map["total"] = total return self.response(dumps_networkapi(equipment_map))
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to find all VLANs by search parameters. URLs: /vlan/find/ """ self.log.info('Find all VLANs') try: # Commons Validations # User permission if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Load XML data xml_map, attrs_map = loads( request.raw_post_data, ['searchable_columns', 'asorting_cols']) # 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) vlan_map = networkapi_map.get('vlan') if vlan_map is None: msg = u'There is no value to the vlan tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data start_record = vlan_map.get('start_record') end_record = vlan_map.get('end_record') asorting_cols = vlan_map.get('asorting_cols') searchable_columns = vlan_map.get('searchable_columns') custom_search = vlan_map.get('custom_search') number = vlan_map.get('numero') name = vlan_map.get('nome') iexact = vlan_map.get('exato') environment = vlan_map.get('ambiente') net_type = vlan_map.get('tipo_rede') network = vlan_map.get('rede') ip_version = vlan_map.get('versao') subnet = vlan_map.get('subrede') acl = vlan_map.get('acl') # Business Rules # Start with alls vlans = Vlan.objects.all().prefetch_related( 'networkipv4_set', 'networkipv6_set') if number is not None: # If number is valid, add to filter if not is_valid_int_greater_zero_param(number, False): raise InvalidValueError(None, 'numero', number) else: vlans = vlans.filter(num_vlan=number) if name is not None: # If name is valid, add to filter if not is_valid_string_minsize(name, 3, False): raise InvalidValueError(None, 'nome', name) else: # Iexact must be valid to add name to filter if not is_valid_boolean_param(iexact, False): raise InvalidValueError(None, 'exato', iexact) else: if (iexact is None) or (iexact == 'False') or (iexact == '0'): iexact = False if iexact: vlans = vlans.filter(nome=name) else: vlans = vlans.filter(nome__icontains=name) # If environment is valid, add to filter if environment is not None: if not is_valid_int_greater_zero_param(environment, False): raise InvalidValueError(None, 'ambiente', environment) else: vlans = vlans.filter(ambiente__pk=environment) if net_type is not None: # If net_type is valid, add to filter if not is_valid_int_greater_zero_param(net_type, False): raise InvalidValueError(None, 'tipo_rede', net_type) else: q1 = Q(networkipv4__network_type__id=net_type) q2 = Q(networkipv6__network_type__id=net_type) vlans = vlans.filter(q1 | q2) if acl is not None: # If acl is valid, add to filter if not is_valid_boolean_param(acl, False): raise InvalidValueError(None, 'acl', acl) else: if (acl is None) or (acl == 'False') or (acl == '0'): acl = False # If acl is true, only show vlans with false acl_valida if acl: vlans = vlans.filter(acl_valida=False) # If ip_version is valid if not is_valid_int_greater_equal_zero_param(ip_version): raise InvalidValueError(None, 'versao', ip_version) else: if ip_version == '0': vlans = vlans.filter( Q(networkipv6__isnull=True) | Q(networkipv4__isnull=False)) elif ip_version == '1': vlans = vlans.filter( Q(networkipv4__isnull=True) | Q(networkipv6__isnull=False)) if network is not None: # If network is valid if not is_valid_string_minsize(network, 1, False): raise InvalidValueError(None, 'rede', network) else: blocks, network, version = break_network(network) try: network_ip = IPNetwork(network) except ValueError, e: raise InvalidValueError(None, 'rede', network) # If subnet is valid, add to filter if not (subnet == '0' or subnet == '1'): raise InvalidValueError(None, 'subrede', subnet) else: # If subnet is 0, only filter network octs if subnet == '0': # Filter octs if version == IP_VERSION.IPv4[0]: # Network IP v4 oct1 = Q() oct2 = Q() oct3 = Q() oct4 = Q() blk = Q() if len(blocks[0]) != 0: oct1 = Q(networkipv4__oct1=blocks[0]) if len(blocks[1]) != 0: oct2 = Q(networkipv4__oct2=blocks[1]) if len(blocks[2]) != 0: oct3 = Q(networkipv4__oct3=blocks[2]) if len(blocks[3]) != 0: oct4 = Q(networkipv4__oct4=blocks[3]) if len(blocks[4]) != 0: blk = Q(networkipv4__block=blocks[4]) vlans = vlans.filter( oct1 & oct2 & oct3 & oct4 & blk) else: # Network IP v6 oct1 = Q() oct2 = Q() oct3 = Q() oct4 = Q() oct5 = Q() oct6 = Q() oct7 = Q() oct8 = Q() blk = Q() if len(blocks[0]) != 0: oct1 = Q(networkipv6__block1__iexact=blocks[0]) if len(blocks[1]) != 0: oct2 = Q(networkipv6__block2__iexact=blocks[1]) if len(blocks[2]) != 0: oct3 = Q(networkipv6__block3__iexact=blocks[2]) if len(blocks[3]) != 0: oct4 = Q(networkipv6__block4__iexact=blocks[3]) if len(blocks[4]) != 0: oct5 = Q(networkipv6__block5__iexact=blocks[4]) if len(blocks[5]) != 0: oct6 = Q(networkipv6__block6__iexact=blocks[5]) if len(blocks[6]) != 0: oct7 = Q(networkipv6__block7__iexact=blocks[6]) if len(blocks[7]) != 0: oct8 = Q(networkipv6__block8__iexact=blocks[7]) if len(blocks[8]) != 0: blk = Q(networkipv6__block=blocks[8]) vlans = vlans.filter( oct1 & oct2 & oct3 & oct4 & oct5 & oct6 & oct7 & oct8 & blk) # If subnet is 1 else: if version == IP_VERSION.IPv4[0]: expl = split(network_ip.network.exploded, '.') else: expl = split(network_ip.network.exploded, ':') expl.append(str(network_ip.prefixlen)) if blocks != expl: raise InvalidValueError(None, 'rede', network) # First, get all vlans filtered until now itens = get_networks_simple(vlans) ids_exclude = [] # Then iterate over it to verify each vlan for vlan in itens: is_subnet = verify_subnet( vlan, network_ip, version) if not is_subnet: ids_exclude.append(vlan['id']) vlans = vlans.exclude(id__in=ids_exclude) # Custom order if asorting_cols: if 'ambiente' in asorting_cols: vlans = vlans.order_by( 'ambiente__divisao_dc__nome', 'ambiente__ambiente_logico__nome', 'ambiente__grupo_l3__nome') asorting_cols.remove('ambiente') if '-ambiente' in asorting_cols: vlans = vlans.order_by( '-ambiente__divisao_dc__nome', '-ambiente__ambiente_logico__nome', '-ambiente__grupo_l3__nome') asorting_cols.remove('-ambiente') if 'tipo_rede' in asorting_cols: vlans = vlans.order_by( 'networkipv4__network_type__tipo_rede', 'networkipv6__network_type__tipo_rede') asorting_cols.remove('tipo_rede') if '-tipo_rede' in asorting_cols: vlans = vlans.order_by( '-networkipv4__network_type__tipo_rede', '-networkipv6__network_type__tipo_rede') asorting_cols.remove('-tipo_rede') if 'network' in asorting_cols: vlans = vlans.order_by('networkipv4__oct1', 'networkipv4__oct2', 'networkipv4__oct3', 'networkipv4__oct4', 'networkipv4__block', 'networkipv6__block1', 'networkipv6__block2', 'networkipv6__block3', 'networkipv6__block4', 'networkipv6__block5', 'networkipv6__block6', 'networkipv6__block7', 'networkipv6__block8', 'networkipv6__block') asorting_cols.remove('network') if '-network' in asorting_cols: vlans = vlans.order_by('-networkipv4__oct1', '-networkipv4__oct2', '-networkipv4__oct3', '-networkipv4__oct4', '-networkipv4__block', '-networkipv6__block1', '-networkipv6__block2', '-networkipv6__block3', '-networkipv6__block4', '-networkipv6__block5', '-networkipv6__block6', '-networkipv6__block7', '-networkipv6__block8', '-networkipv6__block') asorting_cols.remove('-network') vlans = vlans.distinct() # Datatable paginator vlans, total = build_query_to_datatable( vlans, asorting_cols, custom_search, searchable_columns, start_record, end_record) vlans = vlans.prefetch_related('ambiente', 'networkipv4_set__network_type', 'networkipv4_set__ip_set__ipequipamento_set__equipamento__equipamentoambiente_set__ambiente', 'networkipv6_set__network_type', 'networkipv6_set__ipv6_set__ipv6equipament_set__equipamento__equipamentoambiente_set__ambiente') itens = get_networks(vlans, False) vlan_map = dict() vlan_map['vlan'] = itens vlan_map['total'] = total return self.response(dumps_networkapi(vlan_map))
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 add an IP6 and associate it to an equipment. URL: ipv6/save/ ''' self.log.info('Add an IP6 and associate it to an equipment') try: # 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 equip_id = ip_map.get('id_equip') network_ipv6_id = ip_map.get('id_net') description = ip_map.get('descricao') ip6 = ip_map.get('ip6') # Valid equip_id if not is_valid_int_greater_zero_param(equip_id): self.log.error( u'Parameter equip_id is invalid. Value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) # Valid network_ipv4_id if not is_valid_int_greater_zero_param(network_ipv6_id): self.log.error( u'Parameter network_ipv6_id is invalid. Value: %s.', network_ipv6_id) raise InvalidValueError( None, 'network_ipv6_id', network_ipv6_id) # Description can NOT be greater than 100 if not is_valid_string_maxsize(ip6, 39): self.log.error(u'Parameter ip6 is invalid. Value: %s.', ip6) raise InvalidValueError(None, 'ip6', ip6) if description is not None: if not is_valid_string_maxsize(description, 100) or not is_valid_string_minsize(description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # Business Rules # New IP ipv6 = Ipv6() net = NetworkIPv6.get_by_pk(network_ipv6_id) with distributedlock(LOCK_NETWORK_IPV6 % network_ipv6_id): # Caso haja erro para retornar o ip corretamente ip_error = ip6 ip6 = ip6.split(":") # Ip informado de maneira incorreta if len(ip6) is not 8: raise InvalidValueError(None, 'ip6', ip_error) ipv6.description = description ipv6.block1 = ip6[0] ipv6.block2 = ip6[1] ipv6.block3 = ip6[2] ipv6.block4 = ip6[3] ipv6.block5 = ip6[4] ipv6.block6 = ip6[5] ipv6.block7 = ip6[6] ipv6.block8 = ip6[7] # Persist equip = Equipamento.get_by_pk(equip_id) listaVlansDoEquip = [] for ipequip in equip.ipv6equipament_set.all(): vlan = ipequip.ip.networkipv6.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) for ipequip in equip.ipequipamento_set.all(): vlan = ipequip.ip.networkipv4.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) vlan_atual = net.vlan ambiente_aux = None vlan_aux = None for vlan in listaVlansDoEquip: if vlan.num_vlan == vlan_atual.num_vlan: if vlan.id != vlan_atual.id: # Filter case 3 - Vlans with same number cannot # share equipments ## flag_vlan_error = False # Filter testing if vlan.ambiente.filter is None or vlan_atual.ambiente.filter is None: flag_vlan_error = True else: # Test both environment's filters tp_equip_list_one = list() for fet in FilterEquipType.objects.filter(filter=vlan_atual.ambiente.filter.id): tp_equip_list_one.append(fet.equiptype) tp_equip_list_two = list() for fet in FilterEquipType.objects.filter(filter=vlan.ambiente.filter.id): tp_equip_list_two.append(fet.equiptype) if equip.tipo_equipamento not in tp_equip_list_one or equip.tipo_equipamento not in tp_equip_list_two: flag_vlan_error = True ## Filter case 3 - end ## if flag_vlan_error: vlan_aux = vlan ambiente_aux = vlan.ambiente nome_ambiente = "%s - %s - %s" % ( vlan.ambiente.divisao_dc.nome, vlan.ambiente.ambiente_logico.nome, vlan.ambiente.grupo_l3.nome) raise VlanNumberNotAvailableError(None, '''O ip informado não pode ser cadastrado, pois o equipamento %s, faz parte do ambiente %s (id %s), que possui a Vlan de id %s, que também possui o número %s, e não é permitido que vlans que compartilhem o mesmo ambiente, por meio de equipamentos, possuam o mesmo número, edite o número de uma das Vlans ou adicione um filtro no ambiente para efetuar o cadastro desse IP no Equipamento Informado. ''' % (equip.nome, nome_ambiente, ambiente_aux.id, vlan_aux.id, vlan_atual.num_vlan)) ipv6.save_ipv6(equip_id, user, net) list_ip = [] lequips = list() if ipv6.id is None: ipv6 = Ipv6.get_by_blocks_and_net( ipv6.block1, ipv6.block2, ipv6.block3, ipv6.block4, ipv6.block5, ipv6.block6, ipv6.block7, ipv6.block8, net.id) equips = Ipv6Equipament.list_by_ip6(ipv6.id) ip_maps = dict() ip_maps['id'] = ipv6.id ip_maps['block1'] = ipv6.block1 ip_maps['block2'] = ipv6.block2 ip_maps['block3'] = ipv6.block3 ip_maps['block4'] = ipv6.block4 ip_maps['block5'] = ipv6.block5 ip_maps['block6'] = ipv6.block6 ip_maps['block7'] = ipv6.block7 ip_maps['block8'] = ipv6.block8 ip_maps['descricao'] = ipv6.description list_id_equip = [] for equip in equips: list_id_equip.append(equip.equipamento.id) equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ip.append(ip_maps) network_map = dict() network_map['ipv6'] = list_ip # Delete vlan's cache destroy_cache_function([net.vlan_id]) # Delete equipment's cache destroy_cache_function(list_id_equip, True) return self.response(dumps_networkapi(network_map)) except IpRangeAlreadyAssociation, e: return self.response_error(347)
def handle_post(self, request, user, *args, **kwargs): """Treat POST request to add new user group. URL: ugroup/ """ try: if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) xml_map, attrs_map = loads(request.raw_post_data) self.log.debug('XML_MAP: %s', xml_map) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'There is no networkapi tag in request XML.') ugroup_map = networkapi_map.get('user_group') if ugroup_map is None: return self.response_error(3, u'There is no user_group tag in request XML.') # Valid name name = ugroup_map.get('nome') if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100) or not is_valid_text(name): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) read = ugroup_map.get('leitura') if not is_valid_yes_no_choice(read): self.log.error(u'Parameter read is invalid. Value: %s', read) raise InvalidValueError(None, 'read', read) write = ugroup_map.get('escrita') if not is_valid_yes_no_choice(write): self.log.error(u'Parameter write is invalid. Value: %s', write) raise InvalidValueError(None, 'write', write) edit = ugroup_map.get('edicao') if not is_valid_yes_no_choice(edit): self.log.error(u'Parameter edit is invalid. Value: %s', edit) raise InvalidValueError(None, 'edit', edit) remove = ugroup_map.get('exclusao') if not is_valid_yes_no_choice(remove): self.log.error( u'Parameter remove is invalid. Value: %s', remove) raise InvalidValueError(None, 'remove', remove) ugroup = UGrupo() ugroup.nome = name ugroup.leitura = read ugroup.escrita = write ugroup.edicao = edit ugroup.exclusao = remove try: UGrupo.objects.get(nome__iexact=ugroup.nome) raise UGrupoNameDuplicatedError( None, u'User group with name %s already exists' % name) except UGrupo.DoesNotExist: pass try: # save user group ugroup.save() adm_perm = PermissaoAdministrativa() if ASSOCIATE_PERMISSION_AUTOMATICALLY: # Automatically associate 'authenticate' permission for # this group adm_perm.permission = Permission.get_by_pk( ID_AUTHENTICATE_PERMISSION) adm_perm.ugrupo = ugroup adm_perm.leitura = False adm_perm.escrita = True adm_perm.save() except Exception, e: self.log.error(u'Failed to save the GroupUser.') raise GrupoError(e, u'Failed to save the GroupUser.') return self.response(dumps_networkapi({'user_group': {'id': ugroup.id}}))
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Division Dc. URL: divisiondc/<id_divisiondc>/ """ try: self.log.info('Edit Division Dc') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_divisiondc = kwargs.get('id_divisiondc') # 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.' ) division_dc_map = networkapi_map.get('division_dc') if division_dc_map is None: return self.response_error( 3, u'There is no value to the division_dc tag of XML request.' ) # Get XML data name = division_dc_map.get('name') # Valid ID Division Dc if not is_valid_int_greater_zero_param(id_divisiondc): self.log.error( u'The id_divisiondc parameter is not a valid value: %s.', id_divisiondc) raise InvalidValueError(None, 'id_divisiondc', id_divisiondc) # Valid name if not is_valid_string_minsize( name, 2) or not is_valid_string_maxsize(name, 80): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Find Division Dc by ID to check if it exist division_dc = DivisaoDc.get_by_pk(id_divisiondc) with distributedlock(LOCK_DC_DIVISION % id_divisiondc): try: if division_dc.nome.lower() != name.lower(): DivisaoDc.get_by_name(name) raise DivisaoDcNameDuplicatedError( None, u'Já existe um Divisão Dc com o valor name %s.' % name) except DivisaoDcNotFoundError: pass # set variables division_dc.nome = name try: # update Division Dc division_dc.save() except Exception, e: self.log.error(u'Failed to update the Division Dc.') raise AmbienteError(e, u'Failed to update the Division Dc.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def insert_ip(ip_map, user): '''Insere um IP e o relacionamento entre o IP e o equipamento. @param ip_map: Map com as chaves: id_equipamento, id_vlan e descricao @param user: Usuário autenticado na API. @return Em caso de erro retorna a tupla: (código da mensagem de erro, argumento01, argumento02, ...) Em caso de sucesso retorna a tupla: (0, <mapa com os dados do IP>) @raise VlanNotFoundError: VLAN não cadastrada. @raise VlanError: Falha ao pesquisar a VLAN. @raise EquipamentoNotFoundError: Equipamento não cadastrado. @raise EquipamentoError: Falha ao pesquisar o Equipamento. @raise IpNotAvailableError: Não existe um IP disponível para a VLAN. @raise IpError: Falha ao inserir no banco de dados. @raise UserNotAuthorizedError: Usuário sem autorização para executar a operação. ''' log = logging.getLogger('insert_ip') equip_id = ip_map.get('id_equipamento') if not is_valid_int_greater_zero_param(equip_id): log.error(u'The equip_id parameter is not a valid value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) else: equip_id = int(equip_id) if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'Usuário não tem permissão para executar a operação.') vlan_id = ip_map.get('id_vlan') if not is_valid_int_greater_zero_param(vlan_id): log.error(u'The vlan_id parameter is not a valid value: %s.', vlan_id) raise InvalidValueError(None, 'vlan_id', vlan_id) else: vlan_id = int(vlan_id) desc_ip = ip_map.get('descricao') if desc_ip is not None: if not is_valid_string_maxsize( desc_ip, 100) or not is_valid_string_minsize(desc_ip, 3): log.error(u'Parameter desc_ip is invalid. Value: %s.', desc_ip) raise InvalidValueError(None, 'desc_ip', desc_ip) ip = Ip() ip.descricao = desc_ip ip.create(user, equip_id, vlan_id, False) ip_map = dict() ip_map['id'] = ip.id ip_map['id_redeipv4'] = ip.networkipv4.id ip_map['oct4'] = ip.oct4 ip_map['oct3'] = ip.oct3 ip_map['oct2'] = ip.oct2 ip_map['oct1'] = ip.oct1 ip_map['descricao'] = ip.descricao return 0, ip_map
def handle_post(self, request, user, *args, **kwargs): '''Handles POST requests to add an IP and associate it to an equipment. URL: ipv4/save/ ''' self.log.info('Add an IP and associate it to an equipment') try: # 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 equip_id = ip_map.get('id_equip') network_ipv4_id = ip_map.get('id_net') description = ip_map.get('descricao') ip4 = ip_map.get('ip4') # Valid equip_id if not is_valid_int_greater_zero_param(equip_id): self.log.error(u'Parameter equip_id is invalid. Value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) # Valid network_ipv4_id if not is_valid_int_greater_zero_param(network_ipv4_id): self.log.error( u'Parameter network_ipv4_id is invalid. Value: %s.', network_ipv4_id) raise InvalidValueError(None, 'network_ipv4_id', network_ipv4_id) # Valid ip size if not is_valid_string_maxsize(ip4, 15): self.log.error(u'Parameter ip4 is invalid. Value: %s.', ip4) raise InvalidValueError(None, 'ip4', ip4) # Description can NOT be greater than 100 if description is not None: if not is_valid_string_maxsize( description, 100) or not is_valid_string_minsize( description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # Business Rules # New IP ip = Ip() net = NetworkIPv4.get_by_pk(network_ipv4_id) with distributedlock(LOCK_NETWORK_IPV4 % network_ipv4_id): # se Houver erro no ip informado para retorna-lo na mensagem ip_error = ip4 # verificação se foi passado algo errado no ip ip4 = ip4.split(".") for oct in ip4: if not is_valid_int_param(oct): raise InvalidValueError(None, 'ip4', ip_error) #raise IndexError # Ip passado de forma invalida if len(ip4) is not 4: raise IndexError ip.descricao = description ip.oct1 = ip4[0] ip.oct2 = ip4[1] ip.oct3 = ip4[2] ip.oct4 = ip4[3] equip = Equipamento.get_by_pk(equip_id) listaVlansDoEquip = [] for ipequip in equip.ipequipamento_set.all(): vlan = ipequip.ip.networkipv4.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) for ipequip in equip.ipv6equipament_set.all(): vlan = ipequip.ip.networkipv6.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) vlan_atual = net.vlan vlan_aux = None ambiente_aux = None for vlan in listaVlansDoEquip: if vlan.num_vlan == vlan_atual.num_vlan: if vlan.id != vlan_atual.id: # Filter case 3 - Vlans with same number cannot # share equipments ## flag_vlan_error = False # Filter testing if vlan.ambiente.filter is None or vlan_atual.ambiente.filter is None: flag_vlan_error = True else: # Test both environment's filters tp_equip_list_one = list() for fet in FilterEquipType.objects.filter( filter=vlan_atual.ambiente.filter.id): tp_equip_list_one.append(fet.equiptype) tp_equip_list_two = list() for fet in FilterEquipType.objects.filter( filter=vlan.ambiente.filter.id): tp_equip_list_two.append(fet.equiptype) if equip.tipo_equipamento not in tp_equip_list_one or equip.tipo_equipamento not in tp_equip_list_two: flag_vlan_error = True ## Filter case 3 - end ## if flag_vlan_error: ambiente_aux = vlan.ambiente vlan_aux = vlan nome_ambiente = "%s - %s - %s" % ( vlan.ambiente.divisao_dc.nome, vlan.ambiente.ambiente_logico.nome, vlan.ambiente.grupo_l3.nome) raise VlanNumberNotAvailableError( None, '''O ip informado não pode ser cadastrado, pois o equipamento %s, faz parte do ambiente %s (id %s), que possui a Vlan de id %s, que também possui o número %s, e não é permitido que vlans que compartilhem o mesmo ambiente por meio de equipamentos, possuam o mesmo número, edite o número de uma das Vlans ou adicione um filtro no ambiente para efetuar o cadastro desse IP no Equipamento Informado. ''' % (equip.nome, nome_ambiente, ambiente_aux.id, vlan_aux.id, vlan_atual.num_vlan)) # Persist ip.save_ipv4(equip_id, user, net) list_ip = [] lequips = [] if ip.id is None: ip = Ip.get_by_octs_and_net(ip.oct1, ip.oct2, ip.oct3, ip.oct4, net.id) equips = IpEquipamento.list_by_ip(ip.id) ip_maps = dict() ip_maps['id'] = ip.id ip_maps['oct1'] = ip.oct1 ip_maps['oct2'] = ip.oct2 ip_maps['oct3'] = ip.oct3 ip_maps['oct4'] = ip.oct4 ip_maps['descricao'] = ip.descricao list_id_equip = [] for equip in equips: list_id_equip.append(equip.equipamento.id) equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ip.append(ip_maps) network_map = dict() network_map['ip'] = list_ip # Delete vlan's cache destroy_cache_function([net.vlan_id]) # Delete equipment's cache destroy_cache_function(list_id_equip, True) return self.response(dumps_networkapi(network_map)) except IpRangeAlreadyAssociation, e: return self.response_error(347)
def handle_put(self, request, user, *args, **kwargs): """Trata uma requisição PUT para alterar informações de uma interface. URL: /interface/<id_interface>/ """ # Get request data and check permission try: # Valid Interface ID id_interface = kwargs.get('id_interface') if not is_valid_int_greater_zero_param(id_interface): self.log.error( u'The id_interface parameter is not a valid value: %s.', id_interface) raise InvalidValueError(None, 'id_interface', id_interface) # Get interface and equipment to check permission interface = Interface.get_by_pk(id_interface) id_equipamento = interface.equipamento_id # Check permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, id_equipamento, AdminPermission.EQUIP_WRITE_OPERATION): return self.not_authorized() # Get XML data xml_map, attrs_map = loads(request.raw_post_data) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'There is no networkapi tag in XML request.') interface_map = networkapi_map.get('interface') if interface_map is None: return self.response_error( 3, u'There is no interface tag in XML request.') # Valid name value nome = interface_map.get('nome') if not is_valid_string_minsize( nome, 1) or not is_valid_string_maxsize(nome, 20): self.log.error(u'Parameter nome is invalid. Value: %s', nome) raise InvalidValueError(None, 'nome', nome) # Valid protegida value protegida = interface_map.get('protegida') if not is_valid_boolean_param(protegida): self.log.error(u'Parameter protegida is invalid. Value: %s', protegida) raise InvalidValueError(None, 'protegida', protegida) else: protegida = convert_string_or_int_to_boolean(protegida) # Valid descricao value descricao = interface_map.get('descricao') if descricao is not None: if not is_valid_string_minsize( descricao, 3) or not is_valid_string_maxsize( descricao, 200): self.log.error( u'Parameter descricao is invalid. Value: %s', descricao) raise InvalidValueError(None, 'descricao', descricao) # Valid "id_ligacao_front" value id_ligacao_front = interface_map.get('id_ligacao_front') if id_ligacao_front is not None: if not is_valid_int_greater_zero_param(id_ligacao_front): self.log.error( u'The id_ligacao_front parameter is not a valid value: %s.', id_ligacao_front) raise InvalidValueError(None, 'id_ligacao_front', id_ligacao_front) else: id_ligacao_front = int(id_ligacao_front) # Valid "id_ligacao_back" value id_ligacao_back = interface_map.get('id_ligacao_back') if id_ligacao_back is not None: if not is_valid_int_greater_zero_param(id_ligacao_back): self.log.error( u'The id_ligacao_back parameter is not a valid value: %s.', id_ligacao_back) raise InvalidValueError(None, 'id_ligacao_back', id_ligacao_back) else: id_ligacao_back = int(id_ligacao_back) tipo = interface_map.get('tipo') if tipo is not None: tipo = TipoInterface.get_by_name(tipo) vlan = interface_map.get('vlan') with distributedlock(LOCK_INTERFACE % id_interface): # Update interface Interface.update(user, id_interface, interface=nome, protegida=protegida, descricao=descricao, ligacao_front_id=id_ligacao_front, ligacao_back_id=id_ligacao_back, tipo=tipo, vlan_nativa=vlan) return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Trata as requisições de POST para criar uma nova interface para o equipamento URL: /interface/ """ # Obtém dados do request e verifica acesso try: # Obtém os dados do xml do request xml_map, attrs_map = loads(request.raw_post_data) # Obtém o mapa correspondente ao root node do mapa do XML # (networkapi) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'Não existe valor para a tag networkapi do XML de requisição.' ) # Verifica a existência do node "interface" interface_map = networkapi_map.get('interface') if interface_map is None: return self.response_error( 3, u'Não existe valor para a tag interface do XML de requisição.' ) # Valid id_equipamento value id_equipamento = interface_map.get('id_equipamento') if not is_valid_int_greater_zero_param(id_equipamento): self.log.error( u'Parameter id_equipamento is invalid. Value: %s', id_equipamento) raise InvalidValueError(None, 'id_equipamento', id_equipamento) else: id_equipamento = int(id_equipamento) # Check existence Equipamento.get_by_pk(id_equipamento) # Verify permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, id_equipamento, AdminPermission.EQUIP_WRITE_OPERATION): return self.not_authorized() # Valid name value nome = interface_map.get('nome') if not is_valid_string_minsize( nome, 1) or not is_valid_string_maxsize(nome, 20): self.log.error(u'Parameter nome is invalid. Value: %s', nome) raise InvalidValueError(None, 'nome', nome) # Valid protegida value protegida = interface_map.get('protegida') if not is_valid_boolean_param(protegida): self.log.error(u'Parameter protegida is invalid. Value: %s', protegida) raise InvalidValueError(None, 'protegida', protegida) else: protegida = convert_string_or_int_to_boolean(protegida) # Valid descricao value descricao = interface_map.get('descricao') if descricao is not None: if not is_valid_string_minsize( descricao, 3) or not is_valid_string_maxsize( descricao, 200): self.log.error( u'Parameter descricao is invalid. Value: %s', descricao) raise InvalidValueError(None, 'descricao', descricao) # Valid "id_ligacao_front" value id_ligacao_front = interface_map.get('id_ligacao_front') if id_ligacao_front is not None: if not is_valid_int_greater_zero_param(id_ligacao_front): self.log.error( u'The id_ligacao_front parameter is not a valid value: %s.', id_ligacao_front) raise InvalidValueError(None, 'id_ligacao_front', id_ligacao_front) else: id_ligacao_front = int(id_ligacao_front) ligacao_front = Interface(id=id_ligacao_front) else: ligacao_front = None # Valid "id_ligacao_back" value id_ligacao_back = interface_map.get('id_ligacao_back') if id_ligacao_back is not None: if not is_valid_int_greater_zero_param(id_ligacao_back): self.log.error( u'The id_ligacao_back parameter is not a valid value: %s.', id_ligacao_back) raise InvalidValueError(None, 'id_ligacao_back', id_ligacao_back) else: id_ligacao_back = int(id_ligacao_back) ligacao_back = Interface(id=id_ligacao_back) else: ligacao_back = None tipo_interface = interface_map.get('tipo') if tipo_interface is None: tipo_interface = 'Access' tipo_interface = TipoInterface.get_by_name(tipo_interface) vlan = interface_map.get('vlan') # Cria a interface conforme dados recebidos no XML interface = Interface(interface=nome, protegida=protegida, descricao=descricao, ligacao_front=ligacao_front, ligacao_back=ligacao_back, equipamento=Equipamento(id=id_equipamento), tipo=tipo_interface, vlan_nativa=vlan) interface.create(user) networkapi_map = dict() interface_map = dict() interface_map['id'] = interface.id networkapi_map['interface'] = interface_map return self.response(dumps_networkapi(networkapi_map)) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add a HeltcheckExpect. URL: healthcheckexpect/add/ """ 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) healthcheck_map = networkapi_map.get('healthcheck') if healthcheck_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 match_list = healthcheck_map.get('match_list') expect_string = healthcheck_map.get('expect_string') environment_id = healthcheck_map.get('id_ambiente') # Valid equip_id if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'Parameter environment_id is invalid. Value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) if expect_string is not None: if not is_valid_string_maxsize( expect_string, 50) or not is_valid_string_minsize( expect_string, 2): self.log.error( u'Parameter expect_string is invalid. Value: %s.', expect_string) raise InvalidValueError(None, 'expect_string', expect_string) else: raise InvalidValueError(None, 'expect_string', expect_string) if match_list is not None: if not is_valid_string_maxsize( match_list, 50) or not is_valid_string_minsize( match_list, 2): self.log.error( u'Parameter match_list is invalid. Value: %s.', match_list) raise InvalidValueError(None, 'match_list', match_list) else: raise InvalidValueError(None, 'expect_string', expect_string) # User permission if not has_perm(user, AdminPermission.HEALTH_CHECK_EXPECT, AdminPermission.WRITE_OPERATION): return self.not_authorized() healthcheck = HealthcheckExpect() ambiente = Ambiente.get_by_pk(environment_id) healthcheck.insert(user, match_list, expect_string, ambiente) healtchcheck_dict = dict() healtchcheck_dict['id'] = healthcheck.id return self.response( dumps_networkapi({'healthcheck_expect': healtchcheck_dict})) except AmbienteNotFoundError, e: return self.response_error(112)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to add an IP6 and associate it to an equipment. URL: ipv6/save/ """ self.log.info('Add an IP6 and associate it to an equipment') try: # 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 equip_id = ip_map.get('id_equip') network_ipv6_id = ip_map.get('id_net') description = ip_map.get('descricao') ip6 = ip_map.get('ip6') # Valid equip_id if not is_valid_int_greater_zero_param(equip_id): self.log.error(u'Parameter equip_id is invalid. Value: %s.', equip_id) raise InvalidValueError(None, 'equip_id', equip_id) # Valid network_ipv4_id if not is_valid_int_greater_zero_param(network_ipv6_id): self.log.error( u'Parameter network_ipv6_id is invalid. Value: %s.', network_ipv6_id) raise InvalidValueError(None, 'network_ipv6_id', network_ipv6_id) # Description can NOT be greater than 100 if not is_valid_string_maxsize(ip6, 39): self.log.error(u'Parameter ip6 is invalid. Value: %s.', ip6) raise InvalidValueError(None, 'ip6', ip6) if description is not None: if not is_valid_string_maxsize( description, 100) or not is_valid_string_minsize( description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION, None, equip_id, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # Business Rules # New IP ipv6 = Ipv6() net = NetworkIPv6.get_by_pk(network_ipv6_id) with distributedlock(LOCK_NETWORK_IPV6 % network_ipv6_id): # Caso haja erro para retornar o ip corretamente ip_error = ip6 ip6 = ip6.split(':') # Ip informado de maneira incorreta if len(ip6) is not 8: raise InvalidValueError(None, 'ip6', ip_error) ipv6.description = description ipv6.block1 = ip6[0] ipv6.block2 = ip6[1] ipv6.block3 = ip6[2] ipv6.block4 = ip6[3] ipv6.block5 = ip6[4] ipv6.block6 = ip6[5] ipv6.block7 = ip6[6] ipv6.block8 = ip6[7] # Persist equip = Equipamento.get_by_pk(equip_id) listaVlansDoEquip = [] for ipequip in equip.ipv6equipament_set.all(): vlan = ipequip.ip.networkipv6.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) for ipequip in equip.ipequipamento_set.all(): vlan = ipequip.ip.networkipv4.vlan if vlan not in listaVlansDoEquip: listaVlansDoEquip.append(vlan) vlan_atual = net.vlan ambiente_aux = None vlan_aux = None for vlan in listaVlansDoEquip: if vlan.num_vlan == vlan_atual.num_vlan: if vlan.id != vlan_atual.id: # Filter case 3 - Vlans with same number cannot # share equipments ## flag_vlan_error = False # Filter testing if vlan.ambiente.filter is None or vlan_atual.ambiente.filter is None: flag_vlan_error = True else: # Test both environment's filters tp_equip_list_one = list() for fet in FilterEquipType.objects.filter( filter=vlan_atual.ambiente.filter.id): tp_equip_list_one.append(fet.equiptype) tp_equip_list_two = list() for fet in FilterEquipType.objects.filter( filter=vlan.ambiente.filter.id): tp_equip_list_two.append(fet.equiptype) if equip.tipo_equipamento not in tp_equip_list_one or equip.tipo_equipamento not in tp_equip_list_two: flag_vlan_error = True ## Filter case 3 - end ## if flag_vlan_error: vlan_aux = vlan ambiente_aux = vlan.ambiente nome_ambiente = '%s - %s - %s' % ( vlan.ambiente.divisao_dc.nome, vlan.ambiente.ambiente_logico.nome, vlan.ambiente.grupo_l3.nome) raise VlanNumberNotAvailableError( None, """O ip informado não pode ser cadastrado, pois o equipamento %s, faz parte do ambiente %s (id %s), que possui a Vlan de id %s, que também possui o número %s, e não é permitido que vlans que compartilhem o mesmo ambiente, por meio de equipamentos, possuam o mesmo número, edite o número de uma das Vlans ou adicione um filtro no ambiente para efetuar o cadastro desse IP no Equipamento Informado. """ % (equip.nome, nome_ambiente, ambiente_aux.id, vlan_aux.id, vlan_atual.num_vlan)) ipv6.save_ipv6(equip_id, user, net) list_ip = [] lequips = list() if ipv6.id is None: ipv6 = Ipv6.get_by_blocks_and_net(ipv6.block1, ipv6.block2, ipv6.block3, ipv6.block4, ipv6.block5, ipv6.block6, ipv6.block7, ipv6.block8, net.id) equips = Ipv6Equipament.list_by_ip6(ipv6.id) ip_maps = dict() ip_maps['id'] = ipv6.id ip_maps['block1'] = ipv6.block1 ip_maps['block2'] = ipv6.block2 ip_maps['block3'] = ipv6.block3 ip_maps['block4'] = ipv6.block4 ip_maps['block5'] = ipv6.block5 ip_maps['block6'] = ipv6.block6 ip_maps['block7'] = ipv6.block7 ip_maps['block8'] = ipv6.block8 ip_maps['descricao'] = ipv6.description list_id_equip = [] for equip in equips: list_id_equip.append(equip.equipamento.id) equip = Equipamento.get_by_pk(equip.equipamento.id) lequips.append(model_to_dict(equip)) ip_maps['equipamento'] = lequips list_ip.append(ip_maps) network_map = dict() network_map['ipv6'] = list_ip # Delete vlan's cache destroy_cache_function([net.vlan_id]) # Delete equipment's cache destroy_cache_function(list_id_equip, True) return self.response(dumps_networkapi(network_map)) except IpRangeAlreadyAssociation, e: return self.response_error(347)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to find all Equipments by search parameters. URLs: /equipment/find/ """ self.log.info('Find all Equipments') try: # Commons Validations # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Load XML data xml_map, attrs_map = loads( request.raw_post_data, ['searchable_columns', 'asorting_cols']) # 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) equipment_map = networkapi_map.get('equipamento') if equipment_map is None: msg = u'There is no value to the equipment tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data start_record = equipment_map.get('start_record') end_record = equipment_map.get('end_record') asorting_cols = equipment_map.get('asorting_cols') searchable_columns = equipment_map.get('searchable_columns') custom_search = equipment_map.get('custom_search') name = equipment_map.get('nome') iexact = equipment_map.get('exato') environment = equipment_map.get('ambiente') equip_type = equipment_map.get('tipo_equipamento') group = equipment_map.get('grupo') ip = equipment_map.get('ip') # Business Rules # Start with alls equip = Equipamento.objects.all() if name is not None: # If name is valid, add to filter if not is_valid_string_minsize(name, 3, False): raise InvalidValueError(None, 'nome', name) else: # Iexact must be valid to add name to filter if not is_valid_boolean_param(iexact, False): raise InvalidValueError(None, 'exato', iexact) else: if (iexact is None) or (iexact == 'False') or (iexact == '0'): iexact = False if iexact: equip = equip.filter(nome=name) else: equip = equip.filter(nome__icontains=name) # If environment is valid, add to filter if environment is not None: if not is_valid_int_greater_zero_param(environment, False): raise InvalidValueError(None, 'ambiente', environment) else: equip = equip.filter( equipamentoambiente__ambiente__pk=environment) if equip_type is not None: # If equip_type is valid, add to filter if not is_valid_int_greater_zero_param(equip_type, False): raise InvalidValueError( None, 'tipo_equipamento', equip_type) else: equip = equip.filter(tipo_equipamento__pk=equip_type) if group is not None: # If equip_type is valid, add to filter if not is_valid_int_greater_zero_param(group, False): raise InvalidValueError(None, 'grupo', group) else: equip = equip.filter(grupos__pk=group) if ip is not None: # If ip is valid if not is_valid_string_minsize(ip, 1, False): raise InvalidValueError(None, 'ip', ip) else: blocks, ip, version = break_ip(ip) try: IPAddress(ip) except ValueError, e: raise InvalidValueError(None, 'ip', ip) # Filter octs if version == IP_VERSION.IPv4[0]: # IP v4 oct1 = oct2 = oct3 = oct4 = Q() if len(blocks[0]) != 0: oct1 = Q(ipequipamento__ip__oct1=blocks[0]) if len(blocks[1]) != 0: oct2 = Q(ipequipamento__ip__oct2=blocks[1]) if len(blocks[2]) != 0: oct3 = Q(ipequipamento__ip__oct3=blocks[2]) if len(blocks[3]) != 0: oct4 = Q(ipequipamento__ip__oct4=blocks[3]) equip = equip.filter(oct1 & oct2 & oct3 & oct4) else: # IP v6 oct1 = oct2 = oct3 = oct4 = oct5 = oct6 = oct7 = oct8 = Q() if len(blocks[0]) != 0: oct1 = Q( ipv6equipament__ip__block1__iexact=blocks[0]) if len(blocks[1]) != 0: oct2 = Q( ipv6equipament__ip__block2__iexact=blocks[1]) if len(blocks[2]) != 0: oct3 = Q( ipv6equipament__ip__block3__iexact=blocks[2]) if len(blocks[3]) != 0: oct4 = Q( ipv6equipament__ip__block4__iexact=blocks[3]) if len(blocks[4]) != 0: oct5 = Q( ipv6equipament__ip__block5__iexact=blocks[4]) if len(blocks[5]) != 0: oct6 = Q( ipv6equipament__ip__block6__iexact=blocks[5]) if len(blocks[6]) != 0: oct7 = Q( ipv6equipament__ip__block7__iexact=blocks[6]) if len(blocks[7]) != 0: oct8 = Q( ipv6equipament__ip__block8__iexact=blocks[7]) equip = equip.filter( oct1 & oct2 & oct3 & oct4 & oct5 & oct6 & oct7 & oct8) equip = equip.distinct() # Datatable paginator equip, total = build_query_to_datatable( equip, asorting_cols, custom_search, searchable_columns, start_record, end_record) itens = get_equips(equip) equipment_map = dict() equipment_map['equipamento'] = itens equipment_map['total'] = total return self.response(dumps_networkapi(equipment_map))
def handle_put(self, request, user, *args, **kwargs): """Trata uma requisição PUT para alterar informações de uma interface. URL: /interface/<id_interface>/ """ # Get request data and check permission try: # Valid Interface ID id_interface = kwargs.get('id_interface') if not is_valid_int_greater_zero_param(id_interface): self.log.error( u'The id_interface parameter is not a valid value: %s.', id_interface) raise InvalidValueError(None, 'id_interface', id_interface) # Get interface and equipment to check permission interface = Interface.get_by_pk(id_interface) id_equipamento = interface.equipamento_id # Check permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, id_equipamento, AdminPermission.EQUIP_WRITE_OPERATION): return self.not_authorized() # Get XML data xml_map, attrs_map = loads(request.raw_post_data) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'There is no networkapi tag in XML request.') interface_map = networkapi_map.get('interface') if interface_map is None: return self.response_error(3, u'There is no interface tag in XML request.') # Valid name value nome = interface_map.get('nome') if not is_valid_string_minsize(nome, 1) or not is_valid_string_maxsize(nome, 20): self.log.error(u'Parameter nome is invalid. Value: %s', nome) raise InvalidValueError(None, 'nome', nome) # Valid protegida value protegida = interface_map.get('protegida') if not is_valid_boolean_param(protegida): self.log.error( u'Parameter protegida is invalid. Value: %s', protegida) raise InvalidValueError(None, 'protegida', protegida) else: protegida = convert_string_or_int_to_boolean(protegida) # Valid descricao value descricao = interface_map.get('descricao') if descricao is not None: if not is_valid_string_minsize(descricao, 3) or not is_valid_string_maxsize(descricao, 200): self.log.error( u'Parameter descricao is invalid. Value: %s', descricao) raise InvalidValueError(None, 'descricao', descricao) # Valid "id_ligacao_front" value id_ligacao_front = interface_map.get('id_ligacao_front') if id_ligacao_front is not None: if not is_valid_int_greater_zero_param(id_ligacao_front): self.log.error( u'The id_ligacao_front parameter is not a valid value: %s.', id_ligacao_front) raise InvalidValueError( None, 'id_ligacao_front', id_ligacao_front) else: id_ligacao_front = int(id_ligacao_front) # Valid "id_ligacao_back" value id_ligacao_back = interface_map.get('id_ligacao_back') if id_ligacao_back is not None: if not is_valid_int_greater_zero_param(id_ligacao_back): self.log.error( u'The id_ligacao_back parameter is not a valid value: %s.', id_ligacao_back) raise InvalidValueError( None, 'id_ligacao_back', id_ligacao_back) else: id_ligacao_back = int(id_ligacao_back) tipo = interface_map.get('tipo') tipo = TipoInterface.get_by_name(tipo) vlan = interface_map.get('vlan') with distributedlock(LOCK_INTERFACE % id_interface): # Update interface Interface.update(user, id_interface, interface=nome, protegida=protegida, descricao=descricao, ligacao_front_id=id_ligacao_front, ligacao_back_id=id_ligacao_back, tipo=tipo, vlan_nativa=vlan) return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add user. URL: user/ """ try: self.log.info('Add User') # User permission if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_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.') user_map = networkapi_map.get('user') if user_map is None: return self.response_error(3, u'There is no value to the user tag of XML request.') # Get XML data username = user_map.get('user') password = user_map.get('password') name = user_map.get('name') email = user_map.get('email') user_ldap = user_map.get('user_ldap') # Valid username if not is_valid_string_minsize(username, 3) or not is_valid_string_maxsize(username, 45): self.log.error( u'Parameter user is invalid. Value: %s', username) raise InvalidValueError(None, 'user', username) # Valid pwd if not is_valid_string_minsize(password, 3) or not is_valid_string_maxsize(password, 45): self.log.error(u'Parameter password is invalid. Value: ****') raise InvalidValueError(None, 'password', '****') # Valid name if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 200): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Valid email if not is_valid_string_minsize(email, 3) or not is_valid_string_maxsize(email, 200) or not is_valid_email(email): self.log.error(u'Parameter email is invalid. Value: %s', email) raise InvalidValueError(None, 'email', email) # Valid LDAP username if user_ldap is not None: if not is_valid_string_minsize(user_ldap, 3) or not is_valid_string_maxsize(user_ldap, 45): self.log.error( u'Parameter user_ldap is invalid. Value: %s', user_ldap) raise InvalidValueError(None, 'user_ldap', user_ldap) try: Usuario.get_by_user(username) raise UsuarioNameDuplicatedError( None, u'Já existe um usuário com o valor user %s.' % username) except UsuarioNotFoundError: pass usr = Usuario() # set variables usr.user = username usr.pwd = Usuario.encode_password(password) usr.nome = name usr.email = email usr.ativo = True usr.user_ldap = user_ldap try: # save User usr.save() except Exception, e: self.log.error(u'Failed to save the user.') raise UsuarioError(e, u'Failed to save the user.') perm_map = dict() perm_map['usuario'] = model_to_dict( usr, exclude=['user', 'nome', 'pwd', 'name', 'email']) return self.response(dumps_networkapi(perm_map))
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 edit an IP. URL: ipv4/edit/ """ self.log.info('Edit an IP') try: # 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 id_ip = ip_map.get('id_ip') description = ip_map.get('descricao') ip4 = ip_map.get('ip4') # Valid id_ip if not is_valid_int_greater_zero_param(id_ip): self.log.error( u'Parameter id_ip is invalid. Value: %s.', id_ip) raise InvalidValueError(None, 'id_ip', id_ip) if not is_valid_string_maxsize(ip4, 15): self.log.error(u'Parameter ip4 is invalid. Value: %s.', ip4) raise InvalidValueError(None, 'ip4', description) # Valid description if description is not None: if not is_valid_string_maxsize(description, 100) or not is_valid_string_minsize(description, 3): self.log.error( u'Parameter description is invalid. Value: %s.', description) raise InvalidValueError(None, 'description', description) # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.WRITE_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # Business Rules # New IP ip = Ip() ip = ip.get_by_pk(id_ip) with distributedlock(LOCK_IPV4 % id_ip): # se Houver erro no ip informado para retorna-lo na mensagem ip_error = ip4 # verificação se foi passado algo errado no ip ip4 = ip4.split('.') for oct in ip4: if not is_valid_int_param(oct): raise InvalidValueError(None, 'ip4', ip_error) # Ip passado de forma invalida if len(ip4) is not 4: raise IndexError ip.descricao = description ip.oct1 = ip4[0] ip.oct2 = ip4[1] ip.oct3 = ip4[2] ip.oct4 = ip4[3] # Persist ip.edit_ipv4(user) return self.response(dumps_networkapi({})) except UserNotAuthorizedError: return self.not_authorized() except IndexError: msg = 'Invalid IP %s' % ip_error return self.response_error(150, msg) except IpNotFoundError, e: return self.response_error(150, e.message)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to get all Ips (v4) or (v6) of equip on Divisao DC and Ambiente Logico of fisrt Network4 and 6 (if exists) of Environment Vip. URL: ip/getbyequipandevip/ """ self.log.info('Get Ips by Equip - Evip') try: # User permission if not has_perm(user, AdminPermission.IPS, AdminPermission.READ_OPERATION): raise UserNotAuthorizedError( None, u'User does not have permission to perform the operation.') # 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 id_evip = ip_map.get('id_evip') equip_name = ip_map.get('equip_name') # Valid id_evip if not is_valid_int_greater_zero_param(id_evip): self.log.error(u'Parameter id_evip is invalid. Value: %s.', id_evip) raise InvalidValueError(None, 'id_evip', id_evip) # Valid equip_name if not is_valid_string_minsize( equip_name, 3) or not is_valid_string_maxsize( equip_name, 80) or not is_valid_regex( equip_name, '^[A-Z0-9-_]+$'): self.log.error(u'Parameter equip_name is invalid. Value: %s', equip_name) raise InvalidValueError(None, 'equip_name', equip_name) # Business Rules # Get Environment VIp evip = EnvironmentVip.get_by_pk(id_evip) # Get Equipment equip = Equipamento.get_by_name(equip_name) lista_ips_equip = list() lista_ipsv6_equip = list() # GET DIVISAO DC AND AMBIENTE_LOGICO OF NET4 AND NET6 lista_amb_div_4 = list() lista_amb_div_6 = list() for net in evip.networkipv4_set.select_related('vlan', 'ambiente').all(): dict_div_4 = dict() dict_div_4['divisao_dc'] = net.vlan.ambiente.divisao_dc_id dict_div_4[ 'ambiente_logico'] = net.vlan.ambiente.ambiente_logico_id if dict_div_4 not in lista_amb_div_4: lista_amb_div_4.append(dict_div_4) for net in evip.networkipv6_set.select_related('vlan', 'ambiente').all(): dict_div_6 = dict() dict_div_6['divisao_dc'] = net.vlan.ambiente.divisao_dc_id dict_div_6[ 'ambiente_logico'] = net.vlan.ambiente.ambiente_logico_id if dict_div_6 not in lista_amb_div_6: lista_amb_div_6.append(dict_div_6) # Get all IPV4's Equipment for ipequip in equip.ipequipamento_set.select_related( 'ip', 'vlan', 'ambiente').all(): if ipequip.ip not in lista_ips_equip: for dict_div_amb in lista_amb_div_4: # if ipequip.ip.networkipv4.ambient_vip is not None and # ipequip.ip.networkipv4.ambient_vip.id == evip.id: if (ipequip.ip.networkipv4.vlan.ambiente.divisao_dc.id == dict_div_amb.get('divisao_dc') and ipequip. ip.networkipv4.vlan.ambiente.ambiente_logico.id == dict_div_amb.get('ambiente_logico')): lista_ips_equip.append(ipequip.ip) # Get all IPV6'S Equipment for ipequip in equip.ipv6equipament_set.select_related( 'ip', 'vlan', 'ambiente').all(): if ipequip.ip not in lista_ipsv6_equip: for dict_div_amb in lista_amb_div_6: # if ipequip.ip.networkipv6.ambient_vip is not None and # ipequip.ip.networkipv6.ambient_vip.id == evip.id: print ipequip.ip.networkipv6.vlan.ambiente.divisao_dc.id print dict_div_amb.get('divisao_dc') if (ipequip.ip.networkipv6.vlan.ambiente.divisao_dc.id == dict_div_amb.get('divisao_dc') and ipequip. ip.networkipv6.vlan.ambiente.ambiente_logico.id == dict_div_amb.get('ambiente_logico')): lista_ipsv6_equip.append(ipequip.ip) # lists and dicts for return lista_ip_entregue = list() lista_ip6_entregue = list() for ip in lista_ips_equip: dict_ips4 = dict() dict_network = dict() dict_ips4['id'] = ip.id dict_ips4['ip'] = '%s.%s.%s.%s' % (ip.oct1, ip.oct2, ip.oct3, ip.oct4) dict_network['id'] = ip.networkipv4_id dict_network['network'] = '%s.%s.%s.%s' % ( ip.networkipv4.oct1, ip.networkipv4.oct2, ip.networkipv4.oct3, ip.networkipv4.oct4) dict_network['mask'] = '%s.%s.%s.%s' % ( ip.networkipv4.mask_oct1, ip.networkipv4.mask_oct2, ip.networkipv4.mask_oct3, ip.networkipv4.mask_oct4) dict_ips4['network'] = dict_network lista_ip_entregue.append(dict_ips4) for ip in lista_ipsv6_equip: dict_ips6 = dict() dict_network = dict() dict_ips6['id'] = ip.id dict_ips6['ip'] = '%s:%s:%s:%s:%s:%s:%s:%s' % ( ip.block1, ip.block2, ip.block3, ip.block4, ip.block5, ip.block6, ip.block7, ip.block8) dict_network['id'] = ip.networkipv6.id dict_network['network'] = '%s:%s:%s:%s:%s:%s:%s:%s' % ( ip.networkipv6.block1, ip.networkipv6.block2, ip.networkipv6.block3, ip.networkipv6.block4, ip.networkipv6.block5, ip.networkipv6.block6, ip.networkipv6.block7, ip.networkipv6.block8) dict_network['mask'] = '%s:%s:%s:%s:%s:%s:%s:%s' % ( ip.networkipv6.block1, ip.networkipv6.block2, ip.networkipv6.block3, ip.networkipv6.block4, ip.networkipv6.block5, ip.networkipv6.block6, ip.networkipv6.block7, ip.networkipv6.block8) dict_ips6['network'] = dict_network lista_ip6_entregue.append(dict_ips6) lista_ip_entregue = lista_ip_entregue if len( lista_ip_entregue) > 0 else None lista_ip6_entregue = lista_ip6_entregue if len( lista_ip6_entregue) > 0 else None if (lista_ip_entregue is None and lista_ip6_entregue is None): raise IpNotFoundByEquipAndVipError( None, 'Ip não encontrado com equipamento %s e ambiente vip %s' % (equip_name, id_evip)) return self.response( dumps_networkapi({ 'ipv4': lista_ip_entregue, 'ipv6': lista_ip6_entregue })) except IpNotFoundByEquipAndVipError: return self.response_error(317, equip_name, id_evip) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def insert_vip_request(vip_map, user): """Insere uma requisição de VIP. @param vip_map: Mapa com os dados da requisição. @param user: Usuário autenticado. @return: Em caso de sucesso: tupla (0, <requisição de VIP>). Em caso de erro: tupla (código da mensagem de erro, argumento01, argumento02, ...) @raise IpNotFoundError: IP não cadastrado. @raise IpError: Falha ao pesquisar o IP. @raise HealthcheckExpectNotFoundError: HealthcheckExpect não cadastrado. @raise HealthcheckExpectError: Falha ao pesquisar o HealthcheckExpect. @raise InvalidFinalidadeValueError: Finalidade com valor inválido. @raise InvalidClienteValueError: Cliente com valor inválido. @raise InvalidAmbienteValueError: Ambiente com valor inválido. @raise InvalidCacheValueError: Cache com valor inválido. @raise InvalidMetodoBalValueError: Valor do método de balanceamento inválido. @raise InvalidPersistenciaValueError: Persistencia com valor inválido. @raise InvalidHealthcheckTypeValueError: Healthcheck_Type com valor inválido ou inconsistente em relação ao valor do healthcheck_expect. @raise InvalidTimeoutValueError: Timeout com valor inválido. @raise InvalidHostNameError: Host não cadastrado. @raise EquipamentoError: Falha ao pesquisar o equipamento. @raise InvalidMaxConValueError: Número máximo de conexões com valor inválido. @raise InvalidBalAtivoValueError: Bal_Ativo com valor inválido. @raise InvalidTransbordoValueError: Transbordo com valor inválido. @raise InvalidServicePortValueError: Porta do Serviço com valor inválido. @raise InvalidRealValueError: Valor inválido de um real. @raise InvalidHealthcheckValueError: Valor do healthcheck inconsistente em relação ao valor do healthcheck_type. @raise RequisicaoVipsError: Falha ao inserir a requisição de VIP. @raise UserNotAuthorizedError: """ log = logging.getLogger('insert_vip_request') if not has_perm(user, AdminPermission.VIPS_REQUEST, AdminPermission.WRITE_OPERATION): raise UserNotAuthorizedError( None, u'Usuário não tem permissão para executar a operação.') ip_id = vip_map.get('id_ip') if not is_valid_int_greater_zero_param(ip_id): log.error(u'The ip_id parameter is not a valid value: %s.', ip_id) raise InvalidValueError(None, 'ip_id', ip_id) else: ip_id = int(ip_id) vip = RequisicaoVips() vip.ip = Ip() vip.ip.id = ip_id # Valid ports vip_map, code = vip.valid_values_ports(vip_map) if code is not None: return code, vip # get environmentVip for validation dynamic heathcheck finalidade = vip_map.get('finalidade') cliente = vip_map.get('cliente') ambiente = vip_map.get('ambiente') if not is_valid_string_minsize( finalidade, 3) or not is_valid_string_maxsize(finalidade, 50): log.error(u'Finality value is invalid: %s.', finalidade) raise InvalidValueError(None, 'finalidade', finalidade) if not is_valid_string_minsize(cliente, 3) or not is_valid_string_maxsize( cliente, 50): log.error(u'Client value is invalid: %s.', cliente) raise InvalidValueError(None, 'cliente', cliente) if not is_valid_string_minsize(ambiente, 3) or not is_valid_string_maxsize( ambiente, 50): log.error(u'Environment value is invalid: %s.', ambiente) raise InvalidValueError(None, 'ambiente', ambiente) try: environment_vip = EnvironmentVip.get_by_values(finalidade, cliente, ambiente) except Exception, e: raise EnvironmentVipNotFoundError( e, 'The fields finality or client or ambiente is None')
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Model. URL: model/ """ try: self.log.info("Add Model") # User permission if not has_perm(user, AdminPermission.BRAND_MANAGEMENT, AdminPermission.WRITE_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.') model_map = networkapi_map.get('model') if model_map is None: return self.response_error(3, u'There is no value to the model tag of XML request.') # Get XML data name = model_map.get('name') id_brand = model_map.get('id_brand') # Valid name if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Valid ID Brand if not is_valid_int_greater_zero_param(id_brand): self.log.error( u'The id_brand parameter is not a valid value: %s.', id_brand) raise InvalidValueError(None, 'id_brand', id_brand) # Find Brand by ID to check if it exist brand = Marca.get_by_pk(id_brand) try: Modelo.get_by_name_brand(name, id_brand) raise MarcaModeloNameDuplicatedError( None, u'Já existe um modelo com o nome %s com marca %s.' % (name, brand.nome)) except ModeloNotFoundError: pass model = Modelo() # set variables model.nome = name model.marca = brand try: # save Model model.save() except Exception, e: self.log.error(u'Failed to save the Model.') raise EquipamentoError(e, u'Failed to save the Model.') model_map = dict() model_map['model'] = model_to_dict( model, exclude=["nome", "marca"]) return self.response(dumps_networkapi(model_map))
def handle_post(self, request, user, *args, **kwargs): """Trata as requisições de POST para criar Informações de Acesso a Equipamentos. URL: /equipamentoacesso """ # Obtém dados do request e verifica acesso try: # Obtém os dados do xml do request xml_map, attrs_map = loads(request.raw_post_data) # Obtém o mapa correspondente ao root node do mapa do XML # (networkapi) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'Não existe valor para a tag networkapi do XML de requisição.' ) # Verifica a existência do node "equipamento_acesso" equipamento_acesso_map = networkapi_map.get('equipamento_acesso') if equipamento_acesso_map is None: return self.response_error( 3, u'Não existe valor para a tag equipamento_acesso do XML de requisição.' ) # Verifica a existência do valor "id_equipamento" id_equipamento = equipamento_acesso_map.get('id_equipamento') # Valid ID Equipment if not is_valid_int_greater_zero_param(id_equipamento): self.log.error( u'The id_equipamento parameter is not a valid value: %s.', id_equipamento) raise InvalidValueError(None, 'id_equipamento', id_equipamento) try: id_equipamento = int(id_equipamento) except (TypeError, ValueError): self.log.error(u'Valor do id_equipamento inválido: %s.', id_equipamento) return self.response_error(117, id_equipamento) # Após obtenção do id_equipamento podemos verificar a permissão if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, id_equipamento, AdminPermission.EQUIP_WRITE_OPERATION): return self.not_authorized() # Verifica a existência do valor "fqdn" fqdn = equipamento_acesso_map.get('fqdn') # Valid fqdn if not is_valid_string_maxsize( fqdn, 100) or not is_valid_string_minsize(fqdn, 4): self.log.error(u'Parameter fqdn is invalid. Value: %s', fqdn) raise InvalidValueError(None, 'fqdn', fqdn) # Verifica a existência do valor "user" username = equipamento_acesso_map.get('user') # Valid username if not is_valid_string_maxsize( username, 20) or not is_valid_string_minsize(username, 3): self.log.error(u'Parameter username is invalid. Value: %s', username) raise InvalidValueError(None, 'username', username) # Verifica a existência do valor "pass" password = equipamento_acesso_map.get('pass') # Valid password if not is_valid_string_maxsize( password, 150) or not is_valid_string_minsize(password, 3): self.log.error(u'Parameter password is invalid.') raise InvalidValueError(None, 'password', '****') # Verifica a existência do valor "id_tipo_acesso" id_tipo_acesso = equipamento_acesso_map.get('id_tipo_acesso') # Valid ID Equipment if not is_valid_int_greater_zero_param(id_tipo_acesso): self.log.error( u'The id_tipo_acesso parameter is not a valid value: %s.', id_tipo_acesso) raise InvalidValueError(None, 'id_tipo_acesso', id_tipo_acesso) try: id_tipo_acesso = int(id_tipo_acesso) except (TypeError, ValueError): self.log.error(u'Valor do id_tipo_acesso inválido: %s.', id_tipo_acesso) return self.response_error(171, id_tipo_acesso) # Obtém o valor de "enable_pass" enable_pass = equipamento_acesso_map.get('enable_pass') # Valid enable_pass if not is_valid_string_maxsize(enable_pass, 150) or not is_valid_string_minsize( enable_pass, 3): self.log.error(u'Parameter enable_pass is invalid.') raise InvalidValueError(None, 'enable_pass', '****') # Cria acesso ao equipamento conforme dados recebidos no XML equipamento_acesso = EquipamentoAcesso( equipamento=Equipamento(id=id_equipamento), fqdn=fqdn, user=username, password=password, tipo_acesso=TipoAcesso(id=id_tipo_acesso), enable_pass=enable_pass) equipamento_acesso.create(user) # Monta dict para response networkapi_map = dict() equipamento_acesso_map = dict() equipamento_acesso_map['id'] = equipamento_acesso.id networkapi_map['equipamento_acesso'] = equipamento_acesso_map return self.response(dumps_networkapi(networkapi_map)) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Treat PUT requests to edit Access Type. URL: /tipoacesso/<id_tipo_acesso>/ """ try: if not has_perm(user, AdminPermission.ACCESS_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) # Valid Access Type ID tipo_acesso_id = kwargs.get('id_tipo_acesso') if not is_valid_int_greater_zero_param(tipo_acesso_id): self.log.error( u'The tipo_acesso_id parameter is not a valid value: %s.', tipo_acesso_id) raise InvalidValueError(None, 'tipo_acesso_id', tipo_acesso_id) xml_map, attrs_map = loads(request.raw_post_data) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'There is no networkapi tag in request XML.') tipo_acesso_map = networkapi_map.get('tipo_acesso') if tipo_acesso_map is None: return self.response_error( 3, u'There is no tipo_acesso tag in request XML.') # Valid protocol protocol = tipo_acesso_map.get('protocolo') if not is_valid_string_minsize( protocol, 3) or not is_valid_string_maxsize( protocol, 45) or not is_valid_regex( protocol, r'^[- a-zA-Z0-9]+$'): self.log.error(u'Parameter protocol is invalid. Value: %s', protocol) raise InvalidValueError(None, 'protocol', protocol) # Verify existence tpa = TipoAcesso.get_by_pk(tipo_acesso_id) tpa.protocolo = protocol try: if len( TipoAcesso.objects.filter( protocolo__iexact=protocol).exclude( id=tpa.id)) > 0: raise DuplicateProtocolError( None, u'Access Type with protocol %s already exists' % protocol) except TipoAcesso.DoesNotExist: pass with distributedlock(LOCK_TYPE_ACCESS % tipo_acesso_id): try: # save access type tpa.save() except Exception, e: self.log.error(u'Failed to update TipoAcesso.') raise TipoAcessoError(e, u'Failed to update TipoAcesso.') return self.response(dumps_networkapi({}))
def handle_post(self, request, user, *args, **kwargs): """ Handles POST requests to allocate a new VLAN. URL: vlan/ """ self.log.info('Allocate new VLAN') try: # Commons Validations # User permission if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # 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) vlan_map = networkapi_map.get('vlan') if vlan_map is None: msg = u'There is no value to the vlan tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data environment = vlan_map.get('id_ambiente') network_type = vlan_map.get('id_tipo_rede') name = vlan_map.get('nome') description = vlan_map.get('descricao') environment_vip = vlan_map.get('id_ambiente_vip') vrf = vlan_map.get('vrf') # Name must NOT be none and 50 is the maxsize if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 50): self.log.error(u'Parameter nome is invalid. Value: %s.', name) raise InvalidValueError(None, 'nome', name) # Description can NOT be greater than 200 if not is_valid_string_minsize(description, 3, False) or not is_valid_string_maxsize(description, 200, False): self.log.error( u'Parameter descricao is invalid. Value: %s.', description) raise InvalidValueError(None, 'descricao', description) # vrf can NOT be greater than 100 if not is_valid_string_maxsize(vrf, 100, False): self.log.error( u'Parameter vrf is invalid. Value: %s.', vrf) raise InvalidValueError(None, 'vrf', vrf) # Environment # Valid environment ID if not is_valid_int_greater_zero_param(environment): self.log.error( u'Parameter id_ambiente is invalid. Value: %s.', environment) raise InvalidValueError(None, 'id_ambiente', environment) # Find environment by ID to check if it exist env = Ambiente.get_by_pk(environment) # Environment Vip if environment_vip is not None: # Valid environment_vip ID if not is_valid_int_greater_zero_param(environment_vip): self.log.error( u'Parameter id_ambiente_vip is invalid. Value: %s.', environment_vip) raise InvalidValueError( None, 'id_ambiente_vip', environment_vip) # Find Environment VIP by ID to check if it exist evip = EnvironmentVip.get_by_pk(environment_vip) else: evip = None # Network Type # Valid network_type ID if not is_valid_int_greater_zero_param(network_type): self.log.error( u'Parameter id_tipo_rede is invalid. Value: %s.', network_type) raise InvalidValueError(None, 'id_tipo_rede', network_type) # Find network_type by ID to check if it exist net = TipoRede.get_by_pk(network_type) # Business Rules # New Vlan vlan = Vlan() vlan.nome = name vlan.descricao = description vlan.ambiente = env # Check if environment has min/max num_vlan value or use the value # thas was configured in settings if (vlan.ambiente.min_num_vlan_1 and vlan.ambiente.max_num_vlan_1) or (vlan.ambiente.min_num_vlan_2 and vlan.ambiente.max_num_vlan_2): min_num_01 = vlan.ambiente.min_num_vlan_1 if vlan.ambiente.min_num_vlan_1 and vlan.ambiente.max_num_vlan_1 else vlan.ambiente.min_num_vlan_2 max_num_01 = vlan.ambiente.max_num_vlan_1 if vlan.ambiente.min_num_vlan_1 and vlan.ambiente.max_num_vlan_1 else vlan.ambiente.max_num_vlan_2 min_num_02 = vlan.ambiente.min_num_vlan_2 if vlan.ambiente.min_num_vlan_2 and vlan.ambiente.max_num_vlan_2 else vlan.ambiente.min_num_vlan_1 max_num_02 = vlan.ambiente.max_num_vlan_2 if vlan.ambiente.min_num_vlan_2 and vlan.ambiente.max_num_vlan_2 else vlan.ambiente.max_num_vlan_1 else: min_num_01 = settings.MIN_VLAN_NUMBER_01 max_num_01 = settings.MAX_VLAN_NUMBER_01 min_num_02 = settings.MIN_VLAN_NUMBER_02 max_num_02 = settings.MAX_VLAN_NUMBER_02 # Persist vlan.create_new(user, min_num_01, max_num_01, min_num_02, max_num_02 ) # New NetworkIPv4 network_ipv4 = NetworkIPv4() vlan_map = network_ipv4.add_network_ipv4(user, vlan.id, net, evip) # Return XML return self.response(dumps_networkapi(vlan_map)) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests Post to search ambiente_p44_txt of Environment VIP by finalidade_txt and cliente_txt URL: environment-vip/get/ambiente_p44_txt/ """ try: self.log.info( 'Search ambiente_p44_txt Environment VIP by finalidade_txt and cliente_txt' ) # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_VIP, 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.') environmentvip_map = networkapi_map.get('vip') if environmentvip_map is None: return self.response_error( 3, u'There is no value to the vip tag of XML request.') # Get XML data finalidade = environmentvip_map.get('finalidade_txt') cliente_txt = environmentvip_map.get('cliente_txt') # finalidade_txt can NOT be greater than 50 if not is_valid_string_maxsize( finalidade, 50, True) or not is_valid_string_minsize( finalidade, 3, True) or not is_valid_text(finalidade): self.log.error( u'Parameter finalidade_txt is invalid. Value: %s.', finalidade) raise InvalidValueError(None, 'finalidade_txt', finalidade) # cliente_txt can NOT be greater than 50 if not is_valid_string_maxsize( cliente_txt, 50, True) or not is_valid_string_minsize( cliente_txt, 3, True) or not is_valid_text(cliente_txt): self.log.error(u'Parameter cliente_txt is invalid. Value: %s.', cliente_txt) raise InvalidValueError(None, 'cliente_txt', cliente_txt) environmentVip = EnvironmentVip() evip_values = environmentVip.list_all_ambientep44_by_finality_and_cliente( finalidade, cliente_txt) evips = dict() evips_list = [] for evip in evip_values: evips['id'] = evip.id evips['finalidade_txt'] = finalidade evips['cliente_txt'] = cliente_txt evips['ambiente_p44'] = evip.ambiente_p44_txt evips['description'] = evip.description evips_list.append(evips) evips = dict() return self.response(dumps_networkapi({'ambiente_p44': evips_list})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Trata as requisições de POST para criar Informações de Acesso a Equipamentos. URL: /equipamentoacesso """ # Obtém dados do request e verifica acesso try: # Obtém os dados do xml do request xml_map, attrs_map = loads(request.raw_post_data) # Obtém o mapa correspondente ao root node do mapa do XML # (networkapi) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'Não existe valor para a tag networkapi do XML de requisição.') # Verifica a existência do node "equipamento_acesso" equipamento_acesso_map = networkapi_map.get('equipamento_acesso') if equipamento_acesso_map is None: return self.response_error(3, u'Não existe valor para a tag equipamento_acesso do XML de requisição.') # Verifica a existência do valor "id_equipamento" id_equipamento = equipamento_acesso_map.get('id_equipamento') # Valid ID Equipment if not is_valid_int_greater_zero_param(id_equipamento): self.log.error( u'The id_equipamento parameter is not a valid value: %s.', id_equipamento) raise InvalidValueError(None, 'id_equipamento', id_equipamento) try: id_equipamento = int(id_equipamento) except (TypeError, ValueError): self.log.error( u'Valor do id_equipamento inválido: %s.', id_equipamento) return self.response_error(117, id_equipamento) # Após obtenção do id_equipamento podemos verificar a permissão if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, id_equipamento, AdminPermission.EQUIP_WRITE_OPERATION): return self.not_authorized() # Verifica a existência do valor "fqdn" fqdn = equipamento_acesso_map.get('fqdn') # Valid fqdn if not is_valid_string_maxsize(fqdn, 100) or not is_valid_string_minsize(fqdn, 4): self.log.error(u'Parameter fqdn is invalid. Value: %s', fqdn) raise InvalidValueError(None, 'fqdn', fqdn) # Verifica a existência do valor "user" username = equipamento_acesso_map.get('user') # Valid username if not is_valid_string_maxsize(username, 20) or not is_valid_string_minsize(username, 3): self.log.error( u'Parameter username is invalid. Value: %s', username) raise InvalidValueError(None, 'username', username) # Verifica a existência do valor "pass" password = equipamento_acesso_map.get('pass') # Valid password if not is_valid_string_maxsize(password, 150) or not is_valid_string_minsize(password, 3): self.log.error(u'Parameter password is invalid.') raise InvalidValueError(None, 'password', '****') # Verifica a existência do valor "id_tipo_acesso" id_tipo_acesso = equipamento_acesso_map.get('id_tipo_acesso') # Valid ID Equipment if not is_valid_int_greater_zero_param(id_tipo_acesso): self.log.error( u'The id_tipo_acesso parameter is not a valid value: %s.', id_tipo_acesso) raise InvalidValueError(None, 'id_tipo_acesso', id_tipo_acesso) try: id_tipo_acesso = int(id_tipo_acesso) except (TypeError, ValueError): self.log.error( u'Valor do id_tipo_acesso inválido: %s.', id_tipo_acesso) return self.response_error(171, id_tipo_acesso) # Obtém o valor de "enable_pass" enable_pass = equipamento_acesso_map.get('enable_pass') # Valid enable_pass if not is_valid_string_maxsize(enable_pass, 150) or not is_valid_string_minsize(enable_pass, 3): self.log.error(u'Parameter enable_pass is invalid.') raise InvalidValueError(None, 'enable_pass', '****') # Cria acesso ao equipamento conforme dados recebidos no XML equipamento_acesso = EquipamentoAcesso( equipamento=Equipamento(id=id_equipamento), fqdn=fqdn, user=username, password=password, tipo_acesso=TipoAcesso(id=id_tipo_acesso), enable_pass=enable_pass ) equipamento_acesso.create(user) # Monta dict para response networkapi_map = dict() equipamento_acesso_map = dict() equipamento_acesso_map['id'] = equipamento_acesso.id networkapi_map['equipamento_acesso'] = equipamento_acesso_map return self.response(dumps_networkapi(networkapi_map)) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to insert request VIP. URLs: /requestvip/ deprecated:: Use the new rest API """ self.log.info("Add request VIP") try: # Load XML data xml_map, attrs_map = loads( request.raw_post_data, ['real', 'reals_weight', 'reals_priority', 'porta']) # 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.') # User permission if not has_perm(user, AdminPermission.VIPS_REQUEST, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) # Valid Ipv4 and Ipv6 ID if (vip_map.get('id_ipv4') is None and vip_map.get('id_ipv6') is None): self.log.error( u'The id_ipv4 and id_ipv6 parameter is not a valid value: %s.', vip_map.get('id_ipv4')) raise InvalidValueError( None, 'id_ipv4 e id_vip6', vip_map.get('id_ipv4')) if (vip_map.get('id_ipv4') != None): if not is_valid_int_greater_zero_param(vip_map.get('id_ipv4')): self.log.error( u'The id_ipv4 parameter is not a valid value: %s.', vip_map.get('id_ipv4')) raise InvalidValueError( None, 'id_ipv4', vip_map.get('id_ipv4')) if (vip_map.get('id_ipv6') != None): if not is_valid_int_greater_zero_param(vip_map.get('id_ipv6')): self.log.error( u'The id_ipv6 parameter is not a valid value: %s.', vip_map.get('id_ipv6')) raise InvalidValueError( None, 'id_ipv6', vip_map.get('id_ipv6')) # Valid maxcon if not is_valid_int_greater_equal_zero_param(vip_map.get('maxcon')): self.log.error( u'The maxcon parameter is not a valid value: %s.', vip_map.get('maxcon')) raise InvalidValueError(None, 'maxcon', vip_map.get('maxcon')) vip = RequisicaoVips() finalidade = vip_map.get('finalidade') cliente = vip_map.get('cliente') ambiente = vip_map.get('ambiente') try: evip = EnvironmentVip.get_by_values( finalidade, cliente, ambiente) except Exception, e: raise EnvironmentVipNotFoundError( e, 'The fields finality or client or ambiente is None') # Valid real names and real ips of real server if vip_map.get('reals') is not None: for real in vip_map.get('reals').get('real'): ip_aux_error = real.get('real_ip') equip_aux_error = real.get('real_name') if equip_aux_error is not None: equip = Equipamento.get_by_name(equip_aux_error) else: self.log.error( u'The real_name parameter is not a valid value: None.') raise InvalidValueError(None, 'real_name', 'None') # Valid Real RequisicaoVips.valid_real_server( ip_aux_error, equip, evip, False) # Valid reals_prioritys vip_map, code = vip.valid_values_reals_priority(vip_map) if code is not None: return self.response_error(code) # Valid reals_weight vip_map, code = vip.valid_values_reals_weight(vip_map) if code is not None: return self.response_error(code) # Existing IPv4 ID if vip_map.get('id_ipv4') is not None: vip.ip = Ip().get_by_pk(vip_map.get('id_ipv4')) # Existing IPv6 ID if vip_map.get('id_ipv6') is not None: vip.ipv6 = Ipv6().get_by_pk(vip_map.get('id_ipv6')) # Valid ports vip_map, code = vip.valid_values_ports(vip_map) if code is not None: return self.response_error(code[0], code[1]) # Valid HealthcheckExpect vip_map, vip, code = vip.valid_values_healthcheck( vip_map, vip, evip) if code is not None: return self.response_error(code) # Host host_name = vip_map.get('host') if not is_valid_string_minsize(host_name, 3) or not is_valid_string_maxsize(host_name, 100): self.log.error(u'Host_name value is invalid: %s.', host_name) raise InvalidValueError(None, 'host_name', host_name) # Areanegocio areanegocio = vip_map.get('areanegocio') if not is_valid_string_minsize(areanegocio, 3) or not is_valid_string_maxsize(areanegocio, 100): self.log.error( u'Areanegocio value is invalid: %s.', areanegocio) raise InvalidValueError(None, 'areanegocio', areanegocio) # Nome_servico nome_servico = vip_map.get('nome_servico') if not is_valid_string_minsize(nome_servico, 3) or not is_valid_string_maxsize(nome_servico, 100): self.log.error( u'Nome_servico value is invalid: %s.', nome_servico) raise InvalidValueError(None, 'nome_servico', nome_servico) # Existing l7_filter if vip_map.get('l7_filter') is not None: vip.l7_filter = vip_map.get('l7_filter') # If the l7_filter is a rule if vip_map.get('rule_id') is not None: if not is_valid_int_greater_zero_param(vip_map.get('rule_id')): self.log.error( u'The rule_id parameter is not a valid value: %s.', vip_map.get('rule_id')) raise InvalidValueError( None, 'rule_id', vip_map.get('rule_id')) rule = Rule.objects.get(pk=vip_map.get('rule_id')) vip.l7_filter = '\n'.join( rule.rulecontent_set.all().values_list('content', flat=True)) vip.rule = rule # set variables vip.filter_valid = 1 vip.validado = 0 vip.vip_criado = 0 vip.set_variables(vip_map) try: # save Resquest Vip vip.save() # save VipPortToPool, ServerPool and ServerPoolMember vip.save_vips_and_ports(vip_map, user) except Exception, e: if isinstance(e, IntegrityError): # Duplicate value for Port Vip, Port Real and IP self.log.error(u'Failed to save the request vip.') return self.response_error(353) else: raise e
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Script Type. URL: scripttype/ """ try: self.log.info('Add Script Type') # User permission if not has_perm(user, AdminPermission.SCRIPT_MANAGEMENT, AdminPermission.WRITE_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.' ) script_type_map = networkapi_map.get('script_type') if script_type_map is None: return self.response_error( 3, u'There is no value to the script_type tag of XML request.' ) # Get XML data type = script_type_map.get('type') description = script_type_map.get('description') # Valid type if not is_valid_string_minsize( type, 3) or not is_valid_string_maxsize(type, 40): self.log.error(u'Parameter type is invalid. Value: %s', type) raise InvalidValueError(None, 'type', type) # Valid description if not is_valid_string_minsize(description, 3) or not is_valid_string_maxsize( description, 100): self.log.error(u'Parameter description is invalid. Value: %s', description) raise InvalidValueError(None, 'description', description) try: TipoRoteiro.get_by_name(type) raise TipoRoteiroNameDuplicatedError( None, u'Já existe um tipo de roteiro com o tipo %s.' % type) except TipoRoteiroNotFoundError: pass script_type = TipoRoteiro() # set variables script_type.tipo = type script_type.descricao = description try: # save Script Type script_type.save() except Exception, e: self.log.error(u'Failed to save the Script Type.') raise RoteiroError(e, u'Failed to save the Script Type.') script_map = dict() script_map['script_type'] = model_to_dict( script_type, exclude=['tipo', 'descricao']) return self.response(dumps_networkapi(script_map))
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Brand. URL: brand/<id_brand>/ """ try: self.log.info("Edit Brand") # User permission if not has_perm(user, AdminPermission.BRAND_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_brand = kwargs.get('id_brand') # 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.' ) brand_map = networkapi_map.get('brand') if brand_map is None: return self.response_error( 3, u'There is no value to the brand tag of XML request.') # Get XML data name = brand_map.get('name') # Valid ID Brand if not is_valid_int_greater_zero_param(id_brand): self.log.error( u'The id_brand parameter is not a valid value: %s.', id_brand) raise InvalidValueError(None, 'id_brand', id_brand) # Valid name if not is_valid_string_minsize( name, 3) or not is_valid_string_maxsize(name, 100): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Find Brand by ID to check if it exist brand = Marca.get_by_pk(id_brand) with distributedlock(LOCK_BRAND % id_brand): try: if brand.nome.lower() != name.lower(): Marca.get_by_name(name) raise MarcaNameDuplicatedError( None, u'Marca com o nome %s já cadastrada.' % name) except MarcaNotFoundError: pass # set variables brand.nome = name try: # update Brand brand.save() except Exception, e: self.log.error(u'Failed to update the Brand.') raise EquipamentoError(e, u'Failed to update the Brand.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Script Type. URL: scripttype/<id_script_type>/ """ try: self.log.info("Edit Script Type") # User permission if not has_perm(user, AdminPermission.SCRIPT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_script_type = kwargs.get('id_script_type') # 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.') script_type_map = networkapi_map.get('script_type') if script_type_map is None: return self.response_error(3, u'There is no value to the script_type tag of XML request.') # Get XML data type = script_type_map.get('type') description = script_type_map.get('description') # Valid ID Script Type if not is_valid_int_greater_zero_param(id_script_type): self.log.error( u'The id_script_type parameter is not a valid value: %s.', id_script_type) raise InvalidValueError(None, 'id_script_type', id_script_type) # Valid type if not is_valid_string_minsize(type, 3) or not is_valid_string_maxsize(type, 40): self.log.error(u'Parameter type is invalid. Value: %s', type) raise InvalidValueError(None, 'type', type) # Valid description if not is_valid_string_minsize(description, 3) or not is_valid_string_maxsize(description, 100): self.log.error( u'Parameter description is invalid. Value: %s', description) raise InvalidValueError(None, 'description', description) # Find Script Type by ID to check if it exist script_type = TipoRoteiro.get_by_pk(id_script_type) with distributedlock(LOCK_SCRIPT_TYPE % id_script_type): try: if script_type.tipo.lower() != type.lower(): TipoRoteiro.get_by_name(type) raise TipoRoteiroNameDuplicatedError( None, u'Já existe um tipo de roteiro com o tipo %s.' % type) except TipoRoteiroNotFoundError: pass # set variables script_type.tipo = type script_type.descricao = description try: # update Script Type script_type.save() except Exception, e: self.log.error(u'Failed to update the Script Type.') raise RoteiroError(e, u'Failed to update the Script Type.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add a HeltcheckExpect. URL: healthcheckexpect/add/ """ 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) healthcheck_map = networkapi_map.get('healthcheck') if healthcheck_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 match_list = healthcheck_map.get('match_list') expect_string = healthcheck_map.get('expect_string') environment_id = healthcheck_map.get('id_ambiente') # Valid equip_id if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'Parameter environment_id is invalid. Value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) if expect_string is not None: if not is_valid_string_maxsize(expect_string, 50) or not is_valid_string_minsize(expect_string, 2): self.log.error( u'Parameter expect_string is invalid. Value: %s.', expect_string) raise InvalidValueError( None, 'expect_string', expect_string) else: raise InvalidValueError(None, 'expect_string', expect_string) if match_list is not None: if not is_valid_string_maxsize(match_list, 50) or not is_valid_string_minsize(match_list, 2): self.log.error( u'Parameter match_list is invalid. Value: %s.', match_list) raise InvalidValueError(None, 'match_list', match_list) else: raise InvalidValueError(None, 'expect_string', expect_string) # User permission if not has_perm(user, AdminPermission.HEALTH_CHECK_EXPECT, AdminPermission.WRITE_OPERATION): return self.not_authorized() healthcheck = HealthcheckExpect() ambiente = Ambiente.get_by_pk(environment_id) healthcheck.insert(user, match_list, expect_string, ambiente) healtchcheck_dict = dict() healtchcheck_dict['id'] = healthcheck.id return self.response(dumps_networkapi({'healthcheck_expect': healtchcheck_dict})) except AmbienteNotFoundError, e: return self.response_error(112)
def insert_vip_request(vip_map, user): '''Insere uma requisição de VIP. @param vip_map: Mapa com os dados da requisição. @param user: Usuário autenticado. @return: Em caso de sucesso: tupla (0, <requisição de VIP>). Em caso de erro: tupla (código da mensagem de erro, argumento01, argumento02, ...) @raise IpNotFoundError: IP não cadastrado. @raise IpError: Falha ao pesquisar o IP. @raise HealthcheckExpectNotFoundError: HealthcheckExpect não cadastrado. @raise HealthcheckExpectError: Falha ao pesquisar o HealthcheckExpect. @raise InvalidFinalidadeValueError: Finalidade com valor inválido. @raise InvalidClienteValueError: Cliente com valor inválido. @raise InvalidAmbienteValueError: Ambiente com valor inválido. @raise InvalidCacheValueError: Cache com valor inválido. @raise InvalidMetodoBalValueError: Valor do método de balanceamento inválido. @raise InvalidPersistenciaValueError: Persistencia com valor inválido. @raise InvalidHealthcheckTypeValueError: Healthcheck_Type com valor inválido ou inconsistente em relação ao valor do healthcheck_expect. @raise InvalidTimeoutValueError: Timeout com valor inválido. @raise InvalidHostNameError: Host não cadastrado. @raise EquipamentoError: Falha ao pesquisar o equipamento. @raise InvalidMaxConValueError: Número máximo de conexões com valor inválido. @raise InvalidBalAtivoValueError: Bal_Ativo com valor inválido. @raise InvalidTransbordoValueError: Transbordo com valor inválido. @raise InvalidServicePortValueError: Porta do Serviço com valor inválido. @raise InvalidRealValueError: Valor inválido de um real. @raise InvalidHealthcheckValueError: Valor do healthcheck inconsistente em relação ao valor do healthcheck_type. @raise RequisicaoVipsError: Falha ao inserir a requisição de VIP. @raise UserNotAuthorizedError: ''' log = Log('insert_vip_request') if not has_perm(user, AdminPermission.VIPS_REQUEST, AdminPermission.WRITE_OPERATION): raise UserNotAuthorizedError( None, u'Usuário não tem permissão para executar a operação.') ip_id = vip_map.get('id_ip') if not is_valid_int_greater_zero_param(ip_id): log.error(u'The ip_id parameter is not a valid value: %s.', ip_id) raise InvalidValueError(None, 'ip_id', ip_id) else: ip_id = int(ip_id) vip = RequisicaoVips() vip.ip = Ip() vip.ip.id = ip_id # Valid ports vip_map, code = vip.valid_values_ports(vip_map) if code is not None: return code, vip # get environmentVip dor validation dynamic heathcheck finalidade = vip_map.get('finalidade') cliente = vip_map.get('cliente') ambiente = vip_map.get('ambiente') if not is_valid_string_minsize(finalidade, 3) or not is_valid_string_maxsize(finalidade, 50): log.error(u'Finality value is invalid: %s.', finalidade) raise InvalidValueError(None, 'finalidade', finalidade) if not is_valid_string_minsize(cliente, 3) or not is_valid_string_maxsize(cliente, 50): log.error(u'Client value is invalid: %s.', cliente) raise InvalidValueError(None, 'cliente', cliente) if not is_valid_string_minsize(ambiente, 3) or not is_valid_string_maxsize(ambiente, 50): log.error(u'Environment value is invalid: %s.', ambiente) raise InvalidValueError(None, 'ambiente', ambiente) try: environment_vip = EnvironmentVip.get_by_values( finalidade, cliente, ambiente) except Exception, e: raise EnvironmentVipNotFoundError( e, 'The fields finality or client or ambiente is None')
def handle_put(self, request, user, *args, **kwargs): """Treat PUT requests to edit Group User. URL: ugroup/<id_ugroup>/ """ try: self.log.info('Edit Group User') # User permission if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_ugroup = kwargs.get('id_ugroup') # 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.') ugroup_map = networkapi_map.get('user_group') if ugroup_map is None: return self.response_error(3, u'There is no value to the user_group tag of XML request.') id_ugroup = kwargs.get('id_ugroup') # Valid Group User ID if not is_valid_int_greater_zero_param(id_ugroup): self.log.error( u'The id_ugroup parameter is not a valid value: %s.', id_ugroup) raise InvalidValueError(None, 'id_ugroup', id_ugroup) # Find Group User by ID to check if it exist ugroup = UGrupo.get_by_pk(id_ugroup) # Valid name name = ugroup_map.get('nome') if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100) or not is_valid_text(name): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) ugroup_existent = UGrupo.objects.filter( nome__iexact=name).exclude(id=id_ugroup) if len(ugroup_existent) > 0: raise UGrupoNameDuplicatedError( None, u'User group with name %s already exists' % name) # Valid read read = ugroup_map.get('leitura') if not is_valid_yes_no_choice(read): self.log.error(u'Parameter read is invalid. Value: %s', read) raise InvalidValueError(None, 'read', read) # Valid write write = ugroup_map.get('escrita') if not is_valid_yes_no_choice(write): self.log.error(u'Parameter write is invalid. Value: %s', write) raise InvalidValueError(None, 'write', write) # Valid edit edit = ugroup_map.get('edicao') if not is_valid_yes_no_choice(edit): self.log.error(u'Parameter edit is invalid. Value: %s', edit) raise InvalidValueError(None, 'edit', edit) # Valid remove remove = ugroup_map.get('exclusao') if not is_valid_yes_no_choice(remove): self.log.error( u'Parameter remove is invalid. Value: %s', remove) raise InvalidValueError(None, 'remove', remove) ugroup.nome = name ugroup.leitura = read ugroup.escrita = write ugroup.edicao = edit ugroup.exclusao = remove with distributedlock(LOCK_GROUP_USER % id_ugroup): try: # save user group ugroup.save() except Exception, e: self.log.error(u'Failed to save the GroupUser.') raise GrupoError(e, u'Failed to save the GroupUser.') return self.response(dumps_networkapi({'user_group': {'id': ugroup.id}})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Trata as requisições de POST para criar uma nova interface para o equipamento URL: /interface/ """ # Obtém dados do request e verifica acesso try: # Obtém os dados do xml do request xml_map, attrs_map = loads(request.raw_post_data) # Obtém o mapa correspondente ao root node do mapa do XML # (networkapi) networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'Não existe valor para a tag networkapi do XML de requisição.') # Verifica a existência do node "interface" interface_map = networkapi_map.get('interface') if interface_map is None: return self.response_error(3, u'Não existe valor para a tag interface do XML de requisição.') # Valid id_equipamento value id_equipamento = interface_map.get('id_equipamento') if not is_valid_int_greater_zero_param(id_equipamento): self.log.error( u'Parameter id_equipamento is invalid. Value: %s', id_equipamento) raise InvalidValueError(None, 'id_equipamento', id_equipamento) else: id_equipamento = int(id_equipamento) # Check existence Equipamento.get_by_pk(id_equipamento) # Verify permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, None, id_equipamento, AdminPermission.EQUIP_WRITE_OPERATION): return self.not_authorized() # Valid name value nome = interface_map.get('nome') if not is_valid_string_minsize(nome, 1) or not is_valid_string_maxsize(nome, 20): self.log.error(u'Parameter nome is invalid. Value: %s', nome) raise InvalidValueError(None, 'nome', nome) # Valid protegida value protegida = interface_map.get('protegida') if not is_valid_boolean_param(protegida): self.log.error( u'Parameter protegida is invalid. Value: %s', protegida) raise InvalidValueError(None, 'protegida', protegida) else: protegida = convert_string_or_int_to_boolean(protegida) # Valid descricao value descricao = interface_map.get('descricao') if descricao is not None: if not is_valid_string_minsize(descricao, 3) or not is_valid_string_maxsize(descricao, 200): self.log.error( u'Parameter descricao is invalid. Value: %s', descricao) raise InvalidValueError(None, 'descricao', descricao) # Valid "id_ligacao_front" value id_ligacao_front = interface_map.get('id_ligacao_front') if id_ligacao_front is not None: if not is_valid_int_greater_zero_param(id_ligacao_front): self.log.error( u'The id_ligacao_front parameter is not a valid value: %s.', id_ligacao_front) raise InvalidValueError( None, 'id_ligacao_front', id_ligacao_front) else: id_ligacao_front = int(id_ligacao_front) ligacao_front = Interface(id=id_ligacao_front) else: ligacao_front = None # Valid "id_ligacao_back" value id_ligacao_back = interface_map.get('id_ligacao_back') if id_ligacao_back is not None: if not is_valid_int_greater_zero_param(id_ligacao_back): self.log.error( u'The id_ligacao_back parameter is not a valid value: %s.', id_ligacao_back) raise InvalidValueError( None, 'id_ligacao_back', id_ligacao_back) else: id_ligacao_back = int(id_ligacao_back) ligacao_back = Interface(id=id_ligacao_back) else: ligacao_back = None tipo_interface = interface_map.get('tipo') if tipo_interface == None: tipo_interface = "Access" tipo_interface = TipoInterface.get_by_name(tipo_interface) vlan = interface_map.get('vlan') # Cria a interface conforme dados recebidos no XML interface = Interface( interface=nome, protegida=protegida, descricao=descricao, ligacao_front=ligacao_front, ligacao_back=ligacao_back, equipamento=Equipamento(id=id_equipamento), tipo=tipo_interface, vlan_nativa=vlan ) interface.create(user) networkapi_map = dict() interface_map = dict() interface_map['id'] = interface.id networkapi_map['interface'] = interface_map return self.response(dumps_networkapi(networkapi_map)) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to insert vlan URL: vlan/insert/ """ try: # Generic method for v4 and v6 network_version = kwargs.get('network_version') # Commons Validations # User permission if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # 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) vlan_map = networkapi_map.get('vlan') if vlan_map is None: msg = u'There is no value to the vlan tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data environment_id = vlan_map.get('environment_id') number = vlan_map.get('number') name = vlan_map.get('name') acl_file = vlan_map.get('acl_file') acl_file_v6 = vlan_map.get('acl_file_v6') description = vlan_map.get('description') network_ipv4 = vlan_map.get('network_ipv4') network_ipv6 = vlan_map.get('network_ipv6') vrf = vlan_map.get('vrf') # Valid environment_id ID if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'Parameter environment_id is invalid. Value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) # Valid number of Vlan if not is_valid_int_greater_zero_param(number): self.log.error( u'Parameter number is invalid. Value: %s', number) raise InvalidValueError(None, 'number', number) # Valid name of Vlan if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 50): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) if not network_ipv4 or not str(network_ipv4).isdigit(): self.log.error( u'Parameter network_ipv4 is invalid. Value: %s.', network_ipv4) raise InvalidValueError(None, 'network_ipv4', network_ipv4) if not network_ipv6 or not str(network_ipv6).isdigit(): self.log.error( u'Parameter network_ipv6 is invalid. Value: %s.', network_ipv6) raise InvalidValueError(None, 'network_ipv6', network_ipv6) # vrf can NOT be greater than 100 if not is_valid_string_maxsize(vrf, 100, False): self.log.error( u'Parameter vrf is invalid. Value: %s.', vrf) raise InvalidValueError(None, 'vrf', vrf) network_ipv4 = int(network_ipv4) network_ipv6 = int(network_ipv6) if network_ipv4 not in range(0, 2): self.log.error( u'Parameter network_ipv4 is invalid. Value: %s.', network_ipv4) raise InvalidValueError(None, 'network_ipv4', network_ipv4) if network_ipv6 not in range(0, 2): self.log.error( u'Parameter network_ipv6 is invalid. Value: %s.', network_ipv6) raise InvalidValueError(None, 'network_ipv6', network_ipv6) p = re.compile('^[A-Z0-9-_]+$') m = p.match(name) if not m: name = name.upper() m = p.match(name) if not m: raise InvalidValueError(None, 'name', name) # Valid description of Vlan if not is_valid_string_minsize(description, 3, False) or not is_valid_string_maxsize(description, 200, False): self.log.error( u'Parameter description is invalid. Value: %s', description) raise InvalidValueError(None, 'description', description) vlan = Vlan() # Valid acl_file Vlan if acl_file is not None: if not is_valid_string_minsize(acl_file, 3) or not is_valid_string_maxsize(acl_file, 200): self.log.error( u'Parameter acl_file is invalid. Value: %s', acl_file) raise InvalidValueError(None, 'acl_file', acl_file) p = re.compile('^[A-Z0-9-_]+$') m = p.match(acl_file) if not m: raise InvalidValueError(None, 'acl_file', acl_file) # VERIFICA SE VLAN COM MESMO ACL JA EXISTE OU NAO # commenting acl name check - issue #55 # vlan.get_vlan_by_acl(acl_file) # Valid acl_file_v6 Vlan if acl_file_v6 is not None: if not is_valid_string_minsize(acl_file_v6, 3) or not is_valid_string_maxsize(acl_file_v6, 200): self.log.error( u'Parameter acl_file_v6 is invalid. Value: %s', acl_file_v6) raise InvalidValueError(None, 'acl_file_v6', acl_file_v6) p = re.compile('^[A-Z0-9-_]+$') m = p.match(acl_file_v6) if not m: raise InvalidValueError(None, 'acl_file_v6', acl_file_v6) # VERIFICA SE VLAN COM MESMO ACL JA EXISTE OU NAO # commenting acl name check - issue #55 # vlan.get_vlan_by_acl_v6(acl_file_v6) ambiente = Ambiente() ambiente = ambiente.get_by_pk(environment_id) vlan.acl_file_name = acl_file vlan.acl_file_name_v6 = acl_file_v6 vlan.num_vlan = number vlan.nome = name vlan.descricao = description vlan.ambiente = ambiente vlan.ativada = 0 vlan.acl_valida = 0 vlan.acl_valida_v6 = 0 vlan.insert_vlan(user) if network_ipv4: network_ipv4 = NetworkIPv4() vlan_map = network_ipv4.add_network_ipv4( user, vlan.id, None, None, None) list_equip_routers_ambient = EquipamentoAmbiente.objects.select_related('equipamento').filter( ambiente=vlan.ambiente.id, is_router=True) if list_equip_routers_ambient: # Add Adds the first available ipv4 on all equipment # that is configured as a router for the environment related to # network ip = Ip.get_first_available_ip(network_ipv4.id) ip = str(ip).split('.') ip_model = Ip() ip_model.oct1 = ip[0] ip_model.oct2 = ip[1] ip_model.oct3 = ip[2] ip_model.oct4 = ip[3] ip_model.networkipv4_id = network_ipv4.id ip_model.save(user) if len(list_equip_routers_ambient) > 1 and network_ipv4.block < 30: multiple_ips = True else: multiple_ips = False for equip in list_equip_routers_ambient: IpEquipamento().create(user, ip_model.id, equip.equipamento.id) if multiple_ips: router_ip = Ip.get_first_available_ip( network_ipv4.id, True) router_ip = str(router_ip).split('.') ip_model2 = Ip() ip_model2.oct1 = router_ip[0] ip_model2.oct2 = router_ip[1] ip_model2.oct3 = router_ip[2] ip_model2.oct4 = router_ip[3] ip_model2.networkipv4_id = network_ipv4.id ip_model2.save(user) IpEquipamento().create(user, ip_model2.id, equip.equipamento.id) if network_ipv6: network_ipv6 = NetworkIPv6() vlan_map = network_ipv6.add_network_ipv6( user, vlan.id, None, None, None) list_equip_routers_ambient = EquipamentoAmbiente.objects.filter( ambiente=vlan.ambiente.id, is_router=True) if list_equip_routers_ambient: # Add Adds the first available ipv6 on all equipment # that is configured as a router for the environment related to # network ipv6 = Ipv6.get_first_available_ip6(network_ipv6.id) ipv6 = str(ipv6).split(':') ipv6_model = Ipv6() ipv6_model.block1 = ipv6[0] ipv6_model.block2 = ipv6[1] ipv6_model.block3 = ipv6[2] ipv6_model.block4 = ipv6[3] ipv6_model.block5 = ipv6[4] ipv6_model.block6 = ipv6[5] ipv6_model.block7 = ipv6[6] ipv6_model.block8 = ipv6[7] ipv6_model.networkipv6_id = network_ipv6.id ipv6_model.save(user) if len(list_equip_routers_ambient) > 1: multiple_ips = True else: multiple_ips = False for equip in list_equip_routers_ambient: Ipv6Equipament().create( user, ipv6_model.id, equip.equipamento.id) if multiple_ips: router_ip = Ipv6.get_first_available_ip6( network_ipv6.id, True) router_ip = str(router_ip).split(':') ipv6_model2 = Ipv6() ipv6_model2.block1 = router_ip[0] ipv6_model2.block2 = router_ip[1] ipv6_model2.block3 = router_ip[2] ipv6_model2.block4 = router_ip[3] ipv6_model2.block5 = router_ip[4] ipv6_model2.block6 = router_ip[5] ipv6_model2.block7 = router_ip[6] ipv6_model2.block8 = router_ip[7] ipv6_model2.networkipv6_id = network_ipv6.id ipv6_model2.save(user) Ipv6Equipament().create(user, ipv6_model2.id, equip.equipamento.id) map = dict() listaVlan = dict() listaVlan['id'] = vlan.id listaVlan['nome'] = vlan.nome listaVlan['acl_file_name'] = vlan.acl_file_name listaVlan['descricao'] = vlan.descricao listaVlan['id_ambiente'] = vlan.ambiente.id listaVlan['ativada'] = vlan.ativada listaVlan['acl_valida'] = vlan.acl_valida map['vlan'] = listaVlan # Delete vlan's cache # destroy_cache_function() # Return XML return self.response(dumps_networkapi(map)) except VlanACLDuplicatedError, e: return self.response_error(311, acl_file)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to find all VLANs by search parameters. URLs: /vlan/find/ """ self.log.info('Find all VLANs') try: # Commons Validations # User permission if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.READ_OPERATION): self.log.error( u'User does not have permission to perform the operation.') return self.not_authorized() # Business Validations # Load XML data xml_map, attrs_map = loads(request.raw_post_data, ['searchable_columns', 'asorting_cols']) # 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) vlan_map = networkapi_map.get('vlan') if vlan_map is None: msg = u'There is no value to the vlan tag of XML request.' self.log.error(msg) return self.response_error(3, msg) # Get XML data start_record = vlan_map.get('start_record') end_record = vlan_map.get('end_record') asorting_cols = vlan_map.get('asorting_cols') searchable_columns = vlan_map.get('searchable_columns') custom_search = vlan_map.get('custom_search') number = vlan_map.get('numero') name = vlan_map.get('nome') iexact = vlan_map.get('exato') environment = vlan_map.get('ambiente') net_type = vlan_map.get('tipo_rede') network = vlan_map.get('rede') ip_version = vlan_map.get('versao') subnet = vlan_map.get('subrede') acl = vlan_map.get('acl') # Business Rules # Start with alls vlans = Vlan.objects.all().prefetch_related( 'networkipv4_set', 'networkipv6_set') if number is not None: # If number is valid, add to filter if not is_valid_int_greater_zero_param(number, False): raise InvalidValueError(None, 'numero', number) else: vlans = vlans.filter(num_vlan=number) if name is not None: # If name is valid, add to filter if not is_valid_string_minsize(name, 3, False): raise InvalidValueError(None, 'nome', name) else: # Iexact must be valid to add name to filter if not is_valid_boolean_param(iexact, False): raise InvalidValueError(None, 'exato', iexact) else: if (iexact is None) or (iexact == 'False') or (iexact == '0'): iexact = False if iexact: vlans = vlans.filter(nome=name) else: vlans = vlans.filter(nome__icontains=name) # If environment is valid, add to filter if environment is not None: if not is_valid_int_greater_zero_param(environment, False): raise InvalidValueError(None, 'ambiente', environment) else: vlans = vlans.filter(ambiente__pk=environment) if net_type is not None: # If net_type is valid, add to filter if not is_valid_int_greater_zero_param(net_type, False): raise InvalidValueError(None, 'tipo_rede', net_type) else: q1 = Q(networkipv4__network_type__id=net_type) q2 = Q(networkipv6__network_type__id=net_type) vlans = vlans.filter(q1 | q2) if acl is not None: # If acl is valid, add to filter if not is_valid_boolean_param(acl, False): raise InvalidValueError(None, 'acl', acl) else: if (acl is None) or (acl == 'False') or (acl == '0'): acl = False # If acl is true, only show vlans with false acl_valida if acl: vlans = vlans.filter(acl_valida=False) # If ip_version is valid if not is_valid_int_greater_equal_zero_param(ip_version): raise InvalidValueError(None, 'versao', ip_version) else: if ip_version == '0': vlans = vlans.filter( Q(networkipv6__isnull=True) | Q(networkipv4__isnull=False)) elif ip_version == '1': vlans = vlans.filter( Q(networkipv4__isnull=True) | Q(networkipv6__isnull=False)) if network is not None: # If network is valid if not is_valid_string_minsize(network, 1, False): raise InvalidValueError(None, 'rede', network) else: blocks, network, version = break_network(network) try: network_ip = IPNetwork(network) except ValueError, e: raise InvalidValueError(None, 'rede', network) # If subnet is valid, add to filter if not (subnet == '0' or subnet == '1'): raise InvalidValueError(None, 'subrede', subnet) else: # If subnet is 0, only filter network octs if subnet == '0': # Filter octs if version == IP_VERSION.IPv4[0]: # Network IP v4 oct1 = Q() oct2 = Q() oct3 = Q() oct4 = Q() blk = Q() if len(blocks[0]) != 0: oct1 = Q(networkipv4__oct1=blocks[0]) if len(blocks[1]) != 0: oct2 = Q(networkipv4__oct2=blocks[1]) if len(blocks[2]) != 0: oct3 = Q(networkipv4__oct3=blocks[2]) if len(blocks[3]) != 0: oct4 = Q(networkipv4__oct4=blocks[3]) if len(blocks[4]) != 0: blk = Q(networkipv4__block=blocks[4]) vlans = vlans.filter(oct1 & oct2 & oct3 & oct4 & blk) else: # Network IP v6 oct1 = Q() oct2 = Q() oct3 = Q() oct4 = Q() oct5 = Q() oct6 = Q() oct7 = Q() oct8 = Q() blk = Q() if len(blocks[0]) != 0: oct1 = Q(networkipv6__block1__iexact=blocks[0]) if len(blocks[1]) != 0: oct2 = Q(networkipv6__block2__iexact=blocks[1]) if len(blocks[2]) != 0: oct3 = Q(networkipv6__block3__iexact=blocks[2]) if len(blocks[3]) != 0: oct4 = Q(networkipv6__block4__iexact=blocks[3]) if len(blocks[4]) != 0: oct5 = Q(networkipv6__block5__iexact=blocks[4]) if len(blocks[5]) != 0: oct6 = Q(networkipv6__block6__iexact=blocks[5]) if len(blocks[6]) != 0: oct7 = Q(networkipv6__block7__iexact=blocks[6]) if len(blocks[7]) != 0: oct8 = Q(networkipv6__block8__iexact=blocks[7]) if len(blocks[8]) != 0: blk = Q(networkipv6__block=blocks[8]) vlans = vlans.filter(oct1 & oct2 & oct3 & oct4 & oct5 & oct6 & oct7 & oct8 & blk) # If subnet is 1 else: if version == IP_VERSION.IPv4[0]: expl = split(network_ip.network.exploded, '.') else: expl = split(network_ip.network.exploded, ':') expl.append(str(network_ip.prefixlen)) if blocks != expl: raise InvalidValueError(None, 'rede', network) # First, get all vlans filtered until now itens = get_networks_simple(vlans) ids_exclude = [] # Then iterate over it to verify each vlan for vlan in itens: is_subnet = verify_subnet(vlan, network_ip, version) if not is_subnet: ids_exclude.append(vlan['id']) vlans = vlans.exclude(id__in=ids_exclude) # Custom order if asorting_cols: if 'ambiente' in asorting_cols: vlans = vlans.order_by('ambiente__divisao_dc__nome', 'ambiente__ambiente_logico__nome', 'ambiente__grupo_l3__nome') asorting_cols.remove('ambiente') if '-ambiente' in asorting_cols: vlans = vlans.order_by('-ambiente__divisao_dc__nome', '-ambiente__ambiente_logico__nome', '-ambiente__grupo_l3__nome') asorting_cols.remove('-ambiente') if 'tipo_rede' in asorting_cols: vlans = vlans.order_by( 'networkipv4__network_type__tipo_rede', 'networkipv6__network_type__tipo_rede') asorting_cols.remove('tipo_rede') if '-tipo_rede' in asorting_cols: vlans = vlans.order_by( '-networkipv4__network_type__tipo_rede', '-networkipv6__network_type__tipo_rede') asorting_cols.remove('-tipo_rede') if 'network' in asorting_cols: vlans = vlans.order_by( 'networkipv4__oct1', 'networkipv4__oct2', 'networkipv4__oct3', 'networkipv4__oct4', 'networkipv4__block', 'networkipv6__block1', 'networkipv6__block2', 'networkipv6__block3', 'networkipv6__block4', 'networkipv6__block5', 'networkipv6__block6', 'networkipv6__block7', 'networkipv6__block8', 'networkipv6__block') asorting_cols.remove('network') if '-network' in asorting_cols: vlans = vlans.order_by( '-networkipv4__oct1', '-networkipv4__oct2', '-networkipv4__oct3', '-networkipv4__oct4', '-networkipv4__block', '-networkipv6__block1', '-networkipv6__block2', '-networkipv6__block3', '-networkipv6__block4', '-networkipv6__block5', '-networkipv6__block6', '-networkipv6__block7', '-networkipv6__block8', '-networkipv6__block') asorting_cols.remove('-network') vlans = vlans.distinct() # Datatable paginator vlans, total = build_query_to_datatable(vlans, asorting_cols, custom_search, searchable_columns, start_record, end_record) vlans = vlans.prefetch_related( 'ambiente', 'networkipv4_set__network_type', 'networkipv4_set__ip_set__ipequipamento_set__equipamento__equipamentoambiente_set__ambiente', 'networkipv6_set__network_type', 'networkipv6_set__ipv6_set__ipv6equipament_set__equipamento__equipamentoambiente_set__ambiente' ) itens = get_networks(vlans, False) vlan_map = dict() vlan_map['vlan'] = itens vlan_map['total'] = total return self.response(dumps_networkapi(vlan_map))
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Model. URL: model/<id_model>/ """ try: self.log.info('Edit Model') # User permission if not has_perm(user, AdminPermission.BRAND_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_model = kwargs.get('id_model') # 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.' ) model_map = networkapi_map.get('model') if model_map is None: return self.response_error( 3, u'There is no value to the model tag of XML request.') # Get XML data name = model_map.get('name') id_brand = model_map.get('id_brand') # Valid ID Model if not is_valid_int_greater_zero_param(id_model): self.log.error( u'The id_model parameter is not a valid value: %s.', id_model) raise InvalidValueError(None, 'id_model', id_model) # Valid name if not is_valid_string_minsize( name, 3) or not is_valid_string_maxsize(name, 100): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) # Valid ID Brand if not is_valid_int_greater_zero_param(id_brand): self.log.error( u'The id_brand parameter is not a valid value: %s.', id_brand) raise InvalidValueError(None, 'id_brand', id_brand) # Find Brand by ID to check if it exist brand = Marca.get_by_pk(id_brand) # Find Model by ID to check if it exist model = Modelo.get_by_pk(id_model) with distributedlock(LOCK_MODEL % id_model): try: if not (model.nome.lower() == name.lower() and model.marca.id == id_brand): Modelo.get_by_name_brand(name, id_brand) raise MarcaModeloNameDuplicatedError( None, u'Já existe um modelo com o nome %s com marca %s.' % (name, brand.nome)) except ModeloNotFoundError: pass # set variables model.nome = name model.marca = brand try: # update Model model.save() except Exception, e: self.log.error(u'Failed to update the Model.') raise EquipamentoError(e, u'Failed to update the Model.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def insert_equipment(equipment_map, user): ''' Insere um equipamento e o relacionamento entre equipamento e o grupo. @param equipment_map: Map com as chaves: id_grupo, id_tipo_equipamento, id_modelo e nome @param user: Usuário autenticado na API. @return Em caso de erro retorna a tupla: (código da mensagem de erro, argumento01, argumento02, ...) Em caso de sucesso retorna a tupla: (0, <identificador do equipamento_grupo>, <equipamento>) @raise InvalidGroupToEquipmentTypeError: Equipamento do grupo “Equipamentos Orquestração” somente poderá ser criado com tipo igual a “Servidor Virtual”. @raise EGrupoNotFoundError: Grupo não cadastrado. @raise GrupoError: Falha ao pesquisar o Grupo. @raise TipoEquipamentoNotFoundError: Tipo de equipamento nao cadastrado. @raise ModeloNotFoundError: Modelo nao cadastrado. @raise EquipamentoNameDuplicatedError: Nome do equipamento duplicado. @raise EquipamentoError: Falha ou inserir o equipamento. @raise UserNotAuthorizedError: Usuário sem autorização para executar a operação. ''' log = Log('insert_equipment') log.debug('EQUIPAMENTO_MAP: %s', equipment_map) equipment = Equipamento() equipment.tipo_equipamento = TipoEquipamento() equipment.modelo = Modelo() group_id = equipment_map.get('id_grupo') if not is_valid_int_greater_zero_param(group_id): log.error( u'The group_id parameter is not a valid value: %s.', group_id) raise InvalidValueError(None, 'group_id', group_id) else: group_id = int(group_id) if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION, group_id, None, AdminPermission.EQUIP_WRITE_OPERATION): raise UserNotAuthorizedError( None, u'Usuário não tem permissão para executar a operação.') equipment_type_id = equipment_map.get('id_tipo_equipamento') if not is_valid_int_greater_zero_param(equipment_type_id): log.error( u'The equipment_type_id parameter is not a valid value: %s.', equipment_type_id) raise InvalidValueError(None, 'equipment_type_id', equipment_type_id) else: equipment.tipo_equipamento.id = int(equipment_type_id) model_id = equipment_map.get('id_modelo') if not is_valid_int_greater_zero_param(model_id): log.error( u'The model_id parameter is not a valid value: %s.', model_id) raise InvalidValueError(None, 'model_id', model_id) else: equipment.modelo.id = int(model_id) name = equipment_map.get('nome') if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 50): log.error(u'The name parameter is not a valid value: %s.', name) raise InvalidValueError(None, 'name', name) else: equipment.nome = name #maintenance is a new feature. Check existing value if not defined in request #Old calls does not send this field maintenance = equipment_map.get('maintenance') if maintenance is None: maintenance = False if not is_valid_boolean_param(maintenance): log.error(u'The maintenance parameter is not a valid value: %s.', maintenance) raise InvalidValueError(None, 'maintenance', maintenance) else: equipment.maintenance = maintenance equipment_group_id = equipment.create(user, group_id) return 0, equipment_group_id, equipment
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to edit Script Type. URL: scripttype/<id_script_type>/ """ try: self.log.info('Edit Script Type') # User permission if not has_perm(user, AdminPermission.SCRIPT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) id_script_type = kwargs.get('id_script_type') # 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.') script_type_map = networkapi_map.get('script_type') if script_type_map is None: return self.response_error(3, u'There is no value to the script_type tag of XML request.') # Get XML data type = script_type_map.get('type') description = script_type_map.get('description') # Valid ID Script Type if not is_valid_int_greater_zero_param(id_script_type): self.log.error( u'The id_script_type parameter is not a valid value: %s.', id_script_type) raise InvalidValueError(None, 'id_script_type', id_script_type) # Valid type if not is_valid_string_minsize(type, 3) or not is_valid_string_maxsize(type, 40): self.log.error(u'Parameter type is invalid. Value: %s', type) raise InvalidValueError(None, 'type', type) # Valid description if not is_valid_string_minsize(description, 3) or not is_valid_string_maxsize(description, 100): self.log.error( u'Parameter description is invalid. Value: %s', description) raise InvalidValueError(None, 'description', description) # Find Script Type by ID to check if it exist script_type = TipoRoteiro.get_by_pk(id_script_type) with distributedlock(LOCK_SCRIPT_TYPE % id_script_type): try: if script_type.tipo.lower() != type.lower(): TipoRoteiro.get_by_name(type) raise TipoRoteiroNameDuplicatedError( None, u'Já existe um tipo de roteiro com o tipo %s.' % type) except TipoRoteiroNotFoundError: pass # set variables script_type.tipo = type script_type.descricao = description try: # update Script Type script_type.save() except Exception, e: self.log.error(u'Failed to update the Script Type.') raise RoteiroError(e, u'Failed to update the Script Type.') return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)