def __update_vip(self, vip_id, request, user): try: try: xml_map, attrs_map = loads(request.raw_post_data, ['transbordo', 'porta', 'real']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x) 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.' ) vip_map = networkapi_map.get('vip') if vip_map is None: return self.response_error( 3, u'Não existe valor para a tag vip do XML de requisição.') response = update_vip_request(vip_id, vip_map, user) if (response != 0): return self.response_error(response) return self.response(dumps_networkapi({}))
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests associate environment to ip config URL: ipconfig/ """ try: # Commons Validations # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_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: return self.response_error(3, u'Não existe valor para a tag networkapi do XML de requisição.') environment_map = networkapi_map.get('ambiente') if environment_map is None: return self.response_error(3, u'Não existe valor para a tag ambiente do XML de requisição.') # Get XML data id_environment = environment_map.get('id_environment') id_ip_config = environment_map.get('id_ip_config') # Valid environment if not is_valid_int_greater_zero_param(id_environment): raise InvalidValueError(None, 'id_environment', id_environment) # Valid ip config if not is_valid_int_greater_zero_param(id_ip_config): raise InvalidValueError(None, 'id_ip_config', id_ip_config) # Environment must exists environment = Ambiente().get_by_pk(id_environment) # Ip config must exists ip_conf = IPConfig().get_by_pk(id_ip_config) # Makes the relationship config = ConfigEnvironment() config.ip_config = ip_conf config.environment = environment config.save(user) # Make return xml conf_env_map = dict() conf_env_map['id_config_do_ambiente'] = config.id return self.response(dumps_networkapi({'config_do_ambiente': conf_env_map})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_get(self, request, user, *args, **kwargs): """Trata uma requisição PUT para alterar informações de um channel. URL: channel/get-by-name/ """ # Get request data and check permission try: self.log.info("Get Channel") # User permission if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION): self.log.error( u'User does not have permission to perform the operation.') raise UserNotAuthorizedError(None) # 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.') channel_name = kwargs.get('channel_name') channel = PortChannel.get_by_name(channel_name) channel = model_to_dict(channel) return self.response(dumps_networkapi({'channel': channel})) 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 inserir um grupo de equipamento. URL: egrupo/ """ try: if not has_perm(user, AdminPermission.EQUIPMENT_GROUP_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() 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'Não existe valor para a tag networkapi do XML de requisição.') egroup_map = networkapi_map.get('grupo') if egroup_map is None: return self.response_error(3, u'Não existe valor para a tag grupo do XML de requisição.') name = egroup_map.get('nome') if not is_valid_string_maxsize(name, 100): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) egroup = EGrupo() egroup.nome = name egroup.create(user) return self.response(dumps_networkapi({'grupo': {'id': egroup.id}})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Handle POST requests to set Environment template URLs: /environment/set_template/<environment_id>/ """ try: environment_id = kwargs.get('environment_id') if not is_valid_int_greater_equal_zero_param(environment_id): self.log.error( u'The environment_id parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() 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'Não existe valor para a tag networkapi do XML de requisição.') environment_map = networkapi_map.get('environment') if environment_map is None: return self.response_error(3, u'Não existe valor para a tag ambiente do XML de requisição.') name = environment_map.get('name') network = environment_map.get('network') if int(environment_id) != 0: Ambiente().get_by_pk(environment_id) if network == IP_VERSION.IPv4[1]: Ambiente.objects.filter( id=environment_id).update(ipv4_template=name) elif network == IP_VERSION.IPv6[1]: Ambiente.objects.filter( id=environment_id).update(ipv6_template=name) else: return self.response_error(269, 'network', network) else: if network == IP_VERSION.IPv4[1]: Ambiente.objects.filter( ipv4_template=name).update(ipv4_template='') elif network == IP_VERSION.IPv6[1]: Ambiente.objects.filter( ipv6_template=name).update(ipv6_template='') else: return self.response_error(269, 'network', network) 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 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): """Handles POST requests to save a new Rule URL: rule/save/ """ try: self.log.info('Save rule to an environment') # User permission if not has_perm(user, AdminPermission.VIP_VALIDATION, 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.') rule_map = networkapi_map.get('map') if rule_map is None: return self.response_error(3, u'There is no value to the environment_vip tag of XML request.') # Get XML data id_env = rule_map['id_env'] name = rule_map['name'] contents = rule_map['contents'] if type( rule_map['contents']) is list else [rule_map['contents'], ] blocks_id = rule_map['blocks_id'] if type( rule_map['blocks_id']) is list else [rule_map['blocks_id'], ] if not is_valid_int_greater_zero_param(id_env): self.log.error( u'The id_env parameter is not a valid value: %s.', id_env) raise InvalidValueError(None, 'id_env', id_env) if not name or len(name) > 80: self.log.error( u'The name parameter is not a valid value: %s.', name) raise InvalidValueError(None, 'name', name) environment = Ambiente.get_by_pk(id_env) new_rule = Rule() new_rule.name = name new_rule.environment = environment new_rule.save() self.__save_rule_contents( contents, blocks_id, environment, new_rule, user) return self.response(dumps_networkapi({})) except AmbienteNotFoundError, e: self.log.error('Environment not found') return self.response_error(112)
def handle_post(self, request, user, *args, **kwargs): """Handles POST requests to save a new Rule URL: rule/save/ """ try: self.log.info("Save rule to an environment") # User permission if not has_perm(user, AdminPermission.VIP_VALIDATION, 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.') rule_map = networkapi_map.get('map') if rule_map is None: return self.response_error(3, u'There is no value to the environment_vip tag of XML request.') # Get XML data id_env = rule_map['id_env'] name = rule_map['name'] contents = rule_map['contents'] if type( rule_map['contents']) is list else [rule_map['contents'], ] blocks_id = rule_map['blocks_id'] if type( rule_map['blocks_id']) is list else [rule_map['blocks_id'], ] if not is_valid_int_greater_zero_param(id_env): self.log.error( u'The id_env parameter is not a valid value: %s.', id_env) raise InvalidValueError(None, 'id_env', id_env) if not name or len(name) > 80: self.log.error( u'The name parameter is not a valid value: %s.', name) raise InvalidValueError(None, 'name', name) environment = Ambiente.get_by_pk(id_env) new_rule = Rule() new_rule.name = name new_rule.environment = environment new_rule.save() self.__save_rule_contents( contents, blocks_id, environment, new_rule, user) return self.response(dumps_networkapi({})) except AmbienteNotFoundError, e: self.log.error('Environment not found') return self.response_error(112)
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 save_or_update(self, request, user, update=False): try: # User permission if not has_perm(user, AdminPermission.VIP_VALIDATION, 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.') map = networkapi_map.get('map') if map is None: return self.response_error( 3, u'There is no value to the map tag of XML request.') environment_id = map['id_env'] if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'The environment_id parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) environment = Ambiente.get_by_pk(environment_id) if update: for block in environment.blockrules_set.all(): block.delete() else: if environment.blockrules_set.count() > 0: return self.response_error(357) if 'blocks' in map: blocks = map['blocks'] if type(map['blocks']) is list else [ map['blocks'], ] for order, content in enumerate(blocks): block = BlockRules() block.content = content block.order = order block.environment = environment block.save() return self.response(dumps_networkapi({})) except AmbienteNotFoundError, e: self.log.error('Environment not found') return self.response_error(112)
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 inserir um Roteiro. URL: roteiro/ """ try: if not has_perm(user, AdminPermission.SCRIPT_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() 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'Não existe valor para a tag networkapi do XML de requisição.') script_map = networkapi_map.get('roteiro') if script_map is None: return self.response_error(3, u'Não existe valor para a tag roteiro do XML de requisição.') script_type_id = script_map.get('id_tipo_roteiro') if script_type_id is None: return self.response_error(194) script_name = script_map.get('nome') if script_name is None: return self.response_error(195) script = Roteiro() script.tipo_roteiro = TipoRoteiro() try: script.tipo_roteiro.id = int(script_type_id) except (TypeError, ValueError): self.log.error( u'Valor do id_tipo_roteiro inválido: %s.', script_type_id) return self.response_error(158, script_type_id) script.roteiro = script_name script.descricao = script_map.get('descricao') script.create(user) script_map = dict() script_map['id'] = script.id networkapi_map = dict() networkapi_map['roteiro'] = script_map return self.response(dumps_networkapi(networkapi_map)) except TipoRoteiroNotFoundError: return self.response_error(158, script_type_id) except RoteiroNameDuplicatedError: return self.response_error(250, script_name) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x)
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 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_put(self, request, user, *args, **kwargs): """Treat requests PUT to change Environment VIP. URL: environmentvip/<id_environment_vip>/ """ try: self.log.info("Change Environment VIP") id_environment_vip = kwargs.get('id_environment_vip') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_VIP, 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.') environmentvip_map = networkapi_map.get('environment_vip') if environmentvip_map is None: return self.response_error(3, u'There is no value to the environment_vip tag of XML request.') # Valid Environment VIP ID if not is_valid_int_greater_zero_param(id_environment_vip): self.log.error( u'The id_environment_vip parameter is not a valid value: %s.', id_environment_vip) raise InvalidValueError( None, 'id_environment_vip', id_environment_vip) # Find Environment VIP by ID to check if it exist environment_vip = EnvironmentVip.get_by_pk(id_environment_vip) with distributedlock(LOCK_ENVIRONMENT_VIP % id_environment_vip): # Valid Environment Vip environment_vip.valid_environment_vip(environmentvip_map) try: # Update Environment Vip environment_vip.save() except Exception, e: self.log.error(u'Failed to update the environment vip.') raise EnvironmentVipError( e, u'Failed to update the environment vip') 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 inserir uma requisição de VIP.""" try: xml_map, attrs_map = loads(request.raw_post_data, ['transbordo', 'porta', 'real']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): '''Trata as requisições de POST para inserir uma requisição de VIP.''' try: xml_map, attrs_map = loads( request.raw_post_data, ['transbordo', 'porta', 'real']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_put(self, request, user, *args, **kwargs): """Treat requests PUT to change Environment VIP. URL: environmentvip/<id_environment_vip>/ """ try: self.log.info('Change Environment VIP') id_environment_vip = kwargs.get('id_environment_vip') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_VIP, 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.') environmentvip_map = networkapi_map.get('environment_vip') if environmentvip_map is None: return self.response_error(3, u'There is no value to the environment_vip tag of XML request.') # Valid Environment VIP ID if not is_valid_int_greater_zero_param(id_environment_vip): self.log.error( u'The id_environment_vip parameter is not a valid value: %s.', id_environment_vip) raise InvalidValueError( None, 'id_environment_vip', id_environment_vip) # Find Environment VIP by ID to check if it exist environment_vip = EnvironmentVip.get_by_pk(id_environment_vip) with distributedlock(LOCK_ENVIRONMENT_VIP % id_environment_vip): # Valid Environment Vip environment_vip.valid_environment_vip(environmentvip_map) try: # Update Environment Vip environment_vip.save() except Exception, e: self.log.error(u'Failed to update the environment vip.') raise EnvironmentVipError( e, u'Failed to update the environment vip') 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 tipos de rede. URL: /tiporede/ """ # Obtém dados do request e verifica acesso try: # Verificar a permissão if not has_perm(user, AdminPermission.NETWORK_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # 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 "tipo_rede" tipo_rede_map = networkapi_map.get('tipo_rede') if tipo_rede_map is None: return self.response_error( 3, u'Não existe valor para a tag tipo_rede do XML de requisição.' ) # Verifica a existência do valor "fqdn" nome = tipo_rede_map.get('nome') if nome is None: return self.response_error(176) # Cria acesso ao equipamento conforme dados recebidos no XML tipo_rede = TipoRede(tipo_rede=nome) tipo_rede.create(user) # Monta dict para response networkapi_map = dict() tipo_rede_map = dict() tipo_rede_map['id'] = tipo_rede.id networkapi_map['tipo_rede'] = tipo_rede_map return self.response(dumps_networkapi(networkapi_map)) except TipoRedeNameDuplicatedError: return self.response_error(253, nome) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Logical Environment. URL: logicalenvironment/ """ try: self.log.info('Add Logical Environment') # 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) # 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.') logical_environment_map = networkapi_map.get('logical_environment') if logical_environment_map is None: return self.response_error(3, u'There is no value to the logical_environment tag of XML request.') # Get XML data name = logical_environment_map.get('name') try: AmbienteLogico.get_by_name(name) raise AmbienteLogicoNameDuplicatedError( None, u'Já existe um Ambiente Lógico com o valor name %s.' % name) except AmbienteLogicoNotFoundError: pass log_env = AmbienteLogico() # set variables log_env.nome = name try: # save Logical Environment log_env.save() except Exception, e: self.log.error(u'Failed to save the Logical Environment.') raise AmbienteError( e, u'Failed to save the Logical Environment.') log_env_map = dict() log_env_map['logical_environment'] = model_to_dict( log_env, exclude=['nome']) return self.response(dumps_networkapi(log_env_map))
def handle_put(self, request, user, *args, **kwargs): ''' Treat requests PUT to add a network IPv4 with num hosts param URL: network/ipv4/add/ ''' # 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, _ = 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 vlan_id = vlan_map.get('id_vlan') network_type = vlan_map.get('id_tipo_rede') environment_vip = vlan_map.get('id_ambiente_vip') num_hosts = vlan_map.get('num_hosts') # Valid num_hosts if not is_valid_int_greater_zero_param( num_hosts) or int(num_hosts) > MAX_IPV4_HOSTS: self.log.error(u'Parameter num_hosts is invalid. Value: %s.', num_hosts) return self.response_error(269, 'num_hosts', num_hosts) num_hosts = int(num_hosts) # Get configuration conf = Configuration.get() num_hosts += conf.IPv4_MIN + conf.IPv4_MAX prefix = get_prefix_IPV4(num_hosts) self.log.info(u'Prefix for %s hosts: %s' % (num_hosts, prefix)) return self.network_ipv4_add(user, vlan_id, network_type, environment_vip, prefix)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Group l3. URL: groupl3/ """ try: self.log.info('Add Group l3') # 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) # 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.') group_l3_map = networkapi_map.get('group_l3') if group_l3_map is None: return self.response_error(3, u'There is no value to the group_l3 tag of XML request.') # Get XML data name = group_l3_map.get('name') try: GrupoL3.get_by_name(name) raise GrupoL3NameDuplicatedError( None, u'Já existe um grupo l3 com o valor name %s.' % name) except GroupL3NotFoundError: pass l3_group = GrupoL3() # set variables l3_group.nome = name try: # save Group l3 l3_group.save() except Exception, e: self.log.error(u'Failed to save the Group l3.') raise AmbienteError(e, u'Failed to save the Group l3.') l3_group_map = dict() l3_group_map['group_l3'] = model_to_dict( l3_group, exclude=['nome']) return self.response(dumps_networkapi(l3_group_map))
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to Add/Del/Enable/Disable/Check requestIP - Real. URLs: /vip/real/ or /real/equip/<id_equip>/vip/<id_vip>/ip/<id_ip>/ """ self.log.info('Add/Del/Ena/Dis/Chk request VIP - Real') try: parameter = request.path.split('/')[2] if parameter == 'equip': operation = 'add' # Get URL data vip_id = int(kwargs.get('id_vip')) equip_id = int(kwargs.get('id_equip')) ip_id = int(kwargs.get('id_ip')) network_version = IP_VERSION.IPv4[0] else: # Load XML data xml_map, attrs_map = loads(request.raw_post_data) # XML data format networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error( 3, u'There is no value to the networkapi tag of XML request.' ) vip_map = networkapi_map.get('vip') if vip_map is None: return self.response_error( 3, u'There is no value to the vip tag of XML request.') # Get XML data vip_id = vip_map.get('vip_id') equip_id = vip_map.get('equip_id') ip_id = vip_map.get('ip_id') operation = vip_map.get('operation') network_version = vip_map.get('network_version') port_vip = None port_real = None if 'port_vip' in vip_map and 'port_real' in vip_map: port_vip = vip_map.get('port_vip') port_real = vip_map.get('port_real') return self.administrate_real(user, vip_id, equip_id, ip_id, operation, network_version, port_vip, port_real) except UserNotAuthorizedError: return self.not_authorized() except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Division Dc. URL: divisiondc/ """ try: self.log.info('Add 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) # 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') try: DivisaoDc.get_by_name(name) raise DivisaoDcNameDuplicatedError( None, u'Já existe um divisào dc com o valor name %s.' % name) except DivisaoDcNotFoundError: pass division_dc = DivisaoDc() # set variables division_dc.nome = name try: # save Division Dc division_dc.save() except Exception, e: self.log.error(u'Failed to save the Division Dc.') raise AmbienteError(e, u'Failed to save the Division Dc.') division_dc_map = dict() division_dc_map['division_dc'] = model_to_dict( division_dc, exclude=['nome']) return self.response(dumps_networkapi(division_dc_map))
def handle_post(self, request, user, *args, **kwargs): '''Trata as requisições de POST para inserir um IP e associá-lo a um equipamento. URL: ip/ ''' try: xml_map, attrs_map = loads(request.raw_post_data) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
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): """Trata uma requisicao POST para inserir um equipamento. URL: equipamento/ """ try: xml_map, attrs_map = loads(request.raw_post_data) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to insert Environment VIP. URL: environmentvip/ """ try: self.log.info('Add Environment VIP') # User permission if not has_perm(user, AdminPermission.ENVIRONMENT_VIP, 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.' ) environmentvip_map = networkapi_map.get('environment_vip') if environmentvip_map is None: return self.response_error( 3, u'There is no value to the environment_vip tag of XML request.' ) # New Environment Vip environment_vip = EnvironmentVip() # Valid Environment Vip environment_vip.valid_environment_vip(environmentvip_map) try: # Save Environment Vip environment_vip.save() except Exception, e: self.log.error(u'Failed to save the environment vip.') raise EnvironmentVipError( e, u'Failed to save the environment vip') environment_map = dict() environment_map['id'] = environment_vip.id return self.response( dumps_networkapi({'environment_vip': environment_map}))
def handle_post(self, request, user, *args, **kwargs): """Trata uma requisicao POST para inserir um equipamento. URL: equipmento/ """ try: xml_map, attrs_map = loads(request.raw_post_data) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x)
def save_or_update(self, request, user, update=False): try: # User permission if not has_perm(user, AdminPermission.VIP_VALIDATION, 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.') map = networkapi_map.get('map') if map is None: return self.response_error(3, u'There is no value to the map tag of XML request.') environment_id = map['id_env'] if not is_valid_int_greater_zero_param(environment_id): self.log.error( u'The environment_id parameter is not a valid value: %s.', environment_id) raise InvalidValueError(None, 'environment_id', environment_id) environment = Ambiente.get_by_pk(environment_id) if update: for block in environment.blockrules_set.all(): block.delete() else: if environment.blockrules_set.count() > 0: return self.response_error(357) if 'blocks' in map: blocks = map['blocks'] if type( map['blocks']) is list else [map['blocks'], ] for order, content in enumerate(blocks): block = BlockRules() block.content = content block.order = order block.environment = environment block.save() return self.response(dumps_networkapi({})) except AmbienteNotFoundError, e: self.log.error('Environment not found') return self.response_error(112)
def handle_put(self, request, user, *args, **kwargs): """Trata as requisições de PUT para alterar um grupo de equipamento. URL: egrupo/<id_grupo>/ """ try: egroup_id = kwargs.get('id_grupo') if not is_valid_int_greater_zero_param(egroup_id): self.log.error( u'The egroup_id parameter is not a valid value: %s.', egroup_id) raise InvalidValueError(None, 'egroup_id', egroup_id) egrp = EGrupo.get_by_pk(egroup_id) if not has_perm(user, AdminPermission.EQUIPMENT_GROUP_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() 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'Não existe valor para a tag networkapi do XML de requisição.' ) egroup_map = networkapi_map.get('grupo') if egroup_map is None: return self.response_error( 3, u'Não existe valor para a tag grupo do XML de requisição.') name = egroup_map.get('nome') if not is_valid_string_maxsize(name, 100): self.log.error(u'Parameter name is invalid. Value: %s', name) raise InvalidValueError(None, 'name', name) with distributedlock(LOCK_GROUP_EQUIPMENT % egroup_id): # Destroy equipment's cache equip_id_list = [] for equipament in egrp.equipamento_set.all(): equip_id_list.append(equipament.id) destroy_cache_function(equip_id_list, True) EGrupo.update(user, egroup_id, nome=name) return self.response(dumps_networkapi({})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_delete(self, request, user, *args, **kwargs): '''Trata as requisições de PUT para remover um grupo virtual. URL: /grupovirtual/ ''' try: xml_map, attrs_map = loads( request.raw_post_data, ['vip', 'equipamento', 'id_equipamento']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
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): """Trata as requisições de POST para inserir um Grupo Virtual. URL: /grupovirtual/ """ try: xml_map, attrs_map = loads(request.raw_post_data, [ 'vip', 'equipamento', 'id_equipamento', 'reals_weight', 'reals_priority', 'real', 'transbordo', 'porta']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x)
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): """Trata as requisições de POST para inserir um equipamento_grupo. URL: equipamentogrupo/ """ # verifica parametros try: xml_map, attrs_map = loads(request.raw_post_data) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_put(self, request, user, *args, **kwargs): """Handle POST requests to get Environments by template name. URLs: /environment/get_env_template/, """ try: if not has_perm(user, AdminPermission.VLAN_MANAGEMENT, AdminPermission.READ_OPERATION): return self.not_authorized() environment_list = list() 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'Não existe valor para a tag networkapi do XML de requisição.' ) map = networkapi_map.get('map') if map is None: return self.response_error( 3, u'Não existe valor para a tag ambiente do XML de requisição.' ) name = map.get('name') network = map.get('network') if network == IP_VERSION.IPv4[1]: environments = Ambiente.objects.filter(ipv4_template=name) elif network == IP_VERSION.IPv6[1]: environments = Ambiente.objects.filter(ipv6_template=name) else: return self.response_error(269, 'network', network) if environments: for env in environments: environment_list.append(env.divisao_dc.nome + '-' + env.ambiente_logico.nome + '-' + env.grupo_l3.nome) return self.response( dumps_networkapi({'ambiente': environment_list})) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Trata as requisições de PUT para alterar direitos de um grupo de usuário em um grupo de equipamento. URL: direitosgrupoequipamento/<id_direito>/ """ try: if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_OPERATION): return self.not_authorized() right_id = kwargs.get('id_direito') if not is_valid_int_greater_zero_param(right_id): self.log.error( u'The right_id parameter is not a valid value: %s.', right_id) raise InvalidValueError(None, 'right_id', right_id) try: xml_map, attrs_map = loads(request.raw_post_data) self.log.debug('XML_MAP: %s', xml_map) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x) 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.' ) direito_map = networkapi_map.get('direito_grupo_equipamento') if direito_map is None: return self.response_error( 3, u'Não existe valor para a tag direito_grupo_equipamento do XML de requisição.' ) response = self.__valida_request(direito_map, False) if response is not None: return response with distributedlock(LOCK_GROUP_RIGHTS % right_id): DireitosGrupoEquipamento.update( user, right_id, leitura=direito_map.get('leitura'), escrita=direito_map.get('escrita'), alterar_config=direito_map.get('alterar_config'), exclusao=direito_map.get('exclusao')) return self.response(dumps_networkapi({}))
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add Rack. URL: interface/associar-ambiente/ """ try: self.log.info('Associa interface aos ambientes') # User permission if not has_perm(user, AdminPermission.EQUIPMENT_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.' ) interface_map = networkapi_map.get('interface') if interface_map is None: return self.response_error( 3, u'There is no value to the interface tag of XML request.') # Get XML data env = interface_map.get('ambiente') interface = interface_map.get('interface') amb_int = EnvironmentInterface() interfaces = Interface() amb = Ambiente() amb_int.interface = interfaces.get_by_pk(int(interface)) amb_int.ambiente = amb.get_by_pk(int(env)) amb_int.create(user) amb_int_map = dict() amb_int_map['interface_ambiente'] = amb_int return self.response(dumps_networkapi(amb_int_map)) except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_put(self, request, user, *args, **kwargs): """Trata uma requisição PUT para alterar tipos de rede. URL: /tiporede/<id_tipo_rede>/ """ # Obtém dados do request e verifica acesso try: # Verificar a permissão if not has_perm(user, AdminPermission.NETWORK_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # Obtém argumentos passados na URL id_tipo_rede = kwargs.get('id_tipo_rede') if id_tipo_rede is None: return self.response_error(256) # Obtém dados do XML 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 "tipo_rede" tipo_rede_map = networkapi_map.get('tipo_rede') if tipo_rede_map is None: return self.response_error( 3, u'Não existe valor para a tag tipo_rede do XML de requisição.' ) # Verifica a existência do valor "fqdn" nome = tipo_rede_map.get('nome') if nome is None: return self.response_error(176) # Altera o tipo de redeconforme dados recebidos no XML TipoRede.update(user, id_tipo_rede, tipo_rede=nome) # Retorna response vazio em caso de sucesso return self.response(dumps_networkapi({})) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to insert Option VIP. URL: optionvip/ """ try: self.log.info('Add Option VIP') # User permission if not has_perm(user, AdminPermission.OPTION_VIP, 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.' ) optionvip_map = networkapi_map.get('option_vip') if optionvip_map is None: return self.response_error( 3, u'There is no value to the option_vip tag of XML request.' ) # New Option Vip option_vip = OptionVip() # Valid Option Vip option_vip.valid_option_vip(optionvip_map) try: # Save Option Vip option_vip.save() except Exception, e: self.log.error(u'Failed to save the option vip.') raise OptionVipError(e, u'Failed to save the option vip') option_map = dict() option_map['option_vip'] = model_to_dict(option_vip, fields=['id']) return self.response(dumps_networkapi(option_map))
def handle_put(self, request, user, *args, **kwargs): ''' Treat requests PUT to add a network IPv4 with num hosts param URL: network/ipv4/add/ ''' # 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, _ = 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 vlan_id = vlan_map.get('id_vlan') network_type = vlan_map.get('id_tipo_rede') environment_vip = vlan_map.get('id_ambiente_vip') num_hosts = vlan_map.get('num_hosts') # Valid num_hosts if not is_valid_int_greater_zero_param(num_hosts) or int(num_hosts) > MAX_IPV4_HOSTS: self.log.error( u'Parameter num_hosts is invalid. Value: %s.', num_hosts) return self.response_error(269, 'num_hosts', num_hosts) num_hosts = int(num_hosts) # Get configuration conf = Configuration.get() num_hosts += conf.IPv4_MIN + conf.IPv4_MAX prefix = get_prefix_IPV4(num_hosts) self.log.info(u'Prefix for %s hosts: %s' % (num_hosts, prefix)) return self.network_ipv4_add(user, vlan_id, network_type, environment_vip, prefix)
def handle_put(self, request, user, *args, **kwargs): """Treat PUT requests to edit Filters. URL: filter/<id_filter>/ """ try: self.log.info('Alter Filter') # Commons Validations # 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.') return self.not_authorized() # 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.' ) filter_map = networkapi_map.get('filter') if filter_map is None: return self.response_error( 3, u'There is no value to the filter tag of XML request.') if not is_valid_int_greater_zero_param(kwargs['id_filter']): self.log.error(u'Parameter id_filter is invalid. Value: %s.', kwargs['id_filter']) raise InvalidValueError(None, 'id_filter', kwargs['id_filter']) else: # Check existence fil = Filter().get_by_pk(kwargs['id_filter']) fil.validate_filter(filter_map) try: # Save filter fil.save() except Exception, e: self.log.error(u'Failed to edit the filter.') raise e return self.response(dumps_networkapi({}))
def handle_delete(self, request, user, *args, **kwargs): """Trata as requisições de PUT para remover um grupo virtual. URL: /grupovirtual/ """ try: xml_map, attrs_map = loads( request.raw_post_data, ['vip', 'equipamento', 'id_equipamento']) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): """Treat POST requests to add new Filter. URL: filter/ """ try: self.log.info('Add Filter') # Commons Validations # 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.') return self.not_authorized() # 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.' ) filter_map = networkapi_map.get('filter') if filter_map is None: return self.response_error( 3, u'There is no value to the filter tag of XML request.') # New Filter filter_ = Filter() # Validates filter_.validate_filter(filter_map) try: # Save filter filter_.save() except Exception, e: self.log.error(u'Failed to save the filter.') raise FilterError(e, u'Failed to save the filter') filter_map = dict() filter_map['id'] = filter_.id return self.response(dumps_networkapi({'filter': filter_map}))
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add a HeltcheckExpect only expect_string field. URL: healthcheckexpect/add/expectstring/ """ 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 expect_string = healthcheck_map.get('expect_string') if not is_valid_string_maxsize(expect_string, 50): self.log.error( u'Parameter expect_string is invalid. Value: %s.', expect_string) 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() healthcheck.insert_expect_string(user, expect_string) healtchcheck_dict = dict() healtchcheck_dict['id'] = healthcheck.id return self.response( dumps_networkapi({'healthcheck_expect': healtchcheck_dict})) 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 inserir um Grupo Virtual. URL: /grupovirtual/ """ try: xml_map, attrs_map = loads(request.raw_post_data, [ 'vip', 'equipamento', 'id_equipamento', 'reals_weight', 'reals_priority', 'real', 'transbordo', 'porta' ]) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): """Trata as requisições de POST para inserir direitos de um grupo de usuário em um grupo de equipamento. URL: direitosgrupoequipamento/ """ try: if not has_perm(user, AdminPermission.USER_ADMINISTRATION, AdminPermission.WRITE_OPERATION): return self.not_authorized() try: xml_map, attrs_map = loads(request.raw_post_data) self.log.debug('XML_MAP: %s', xml_map) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisicao.') return self.response_error(3, x) 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.' ) direito_map = networkapi_map.get('direito_grupo_equipamento') if direito_map is None: return self.response_error( 3, u'Não existe valor para a tag direito_grupo_equipamento do XML de requisição.' ) response = self.__valida_request(direito_map) if response is not None: return response direito = DireitosGrupoEquipamento() direito.egrupo = EGrupo(id=direito_map.get('id_grupo_equipamento')) direito.ugrupo = UGrupo(id=direito_map.get('id_grupo_usuario')) direito.leitura = direito_map.get('leitura') direito.escrita = direito_map.get('escrita') direito.alterar_config = direito_map.get('alterar_config') direito.exclusao = direito_map.get('exclusao') direito.create(user) return self.response( dumps_networkapi( {'direito_grupo_equipamento': { 'id': direito.id }}))
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to add a HeltcheckExpect only expect_string field. URL: healthcheckexpect/add/expectstring/ """ 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 expect_string = healthcheck_map.get('expect_string') if not is_valid_string_maxsize(expect_string, 50): self.log.error( u'Parameter expect_string is invalid. Value: %s.', expect_string) 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() healthcheck.insert_expect_string(user, expect_string) healtchcheck_dict = dict() healtchcheck_dict['id'] = healthcheck.id return self.response(dumps_networkapi({'healthcheck_expect': healtchcheck_dict})) 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 tipos de rede. URL: /tiporede/ """ # Obtém dados do request e verifica acesso try: # Verificar a permissão if not has_perm(user, AdminPermission.NETWORK_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # 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 "tipo_rede" tipo_rede_map = networkapi_map.get('tipo_rede') if tipo_rede_map is None: return self.response_error(3, u'Não existe valor para a tag tipo_rede do XML de requisição.') # Verifica a existência do valor "fqdn" nome = tipo_rede_map.get('nome') if nome is None: return self.response_error(176) # Cria acesso ao equipamento conforme dados recebidos no XML tipo_rede = TipoRede(tipo_rede=nome) tipo_rede.create(user) # Monta dict para response networkapi_map = dict() tipo_rede_map = dict() tipo_rede_map['id'] = tipo_rede.id networkapi_map['tipo_rede'] = tipo_rede_map return self.response(dumps_networkapi(networkapi_map)) except TipoRedeNameDuplicatedError: return self.response_error(253, nome) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_post(self, request, user, *args, **kwargs): """Treat requests POST to Add/Del/Enable/Disable/Check requestIP - Real. URLs: /vip/real/ or /real/equip/<id_equip>/vip/<id_vip>/ip/<id_ip>/ """ self.log.info("Add/Del/Ena/Dis/Chk request VIP - Real") try: parameter = request.path.split('/')[2] if parameter == 'equip': operation = 'add' # Get URL data vip_id = int(kwargs.get('id_vip')) equip_id = int(kwargs.get('id_equip')) ip_id = int(kwargs.get('id_ip')) network_version = IP_VERSION.IPv4[0] else: # Load XML data xml_map, attrs_map = loads(request.raw_post_data) # XML data format networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'There is no value to the networkapi tag of XML request.') vip_map = networkapi_map.get('vip') if vip_map is None: return self.response_error(3, u'There is no value to the vip tag of XML request.') # Get XML data vip_id = vip_map.get('vip_id') equip_id = vip_map.get('equip_id') ip_id = vip_map.get('ip_id') operation = vip_map.get('operation') network_version = vip_map.get('network_version') port_vip = None port_real = None if 'port_vip' in vip_map and 'port_real' in vip_map: port_vip = vip_map.get('port_vip') port_real = vip_map.get('port_real') return self.administrate_real(user, vip_id, equip_id, ip_id, operation, network_version, port_vip, port_real) except UserNotAuthorizedError: return self.not_authorized() except InvalidValueError, e: return self.response_error(269, e.param, e.value)
def handle_post(self, request, user, *args, **kwargs): """Treat 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_put(self, request, user, *args, **kwargs): """Trata uma requisição PUT para alterar tipos de rede. URL: /tiporede/<id_tipo_rede>/ """ # Obtém dados do request e verifica acesso try: # Verificar a permissão if not has_perm(user, AdminPermission.NETWORK_TYPE_MANAGEMENT, AdminPermission.WRITE_OPERATION): return self.not_authorized() # Obtém argumentos passados na URL id_tipo_rede = kwargs.get('id_tipo_rede') if id_tipo_rede is None: return self.response_error(256) # Obtém dados do XML 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 "tipo_rede" tipo_rede_map = networkapi_map.get('tipo_rede') if tipo_rede_map is None: return self.response_error(3, u'Não existe valor para a tag tipo_rede do XML de requisição.') # Verifica a existência do valor "fqdn" nome = tipo_rede_map.get('nome') if nome is None: return self.response_error(176) # Altera o tipo de redeconforme dados recebidos no XML TipoRede.update(user, id_tipo_rede, tipo_rede=nome ) # Retorna response vazio em caso de sucesso return self.response(dumps_networkapi({})) except XMLError, x: self.log.error(u'Erro ao ler o XML da requisição.') return self.response_error(3, x)
def handle_put(self, request, user, *args, **kwargs): """ Handles a PUT request to edit the L7 filter. URL: vip/<id_vip>/filter/ """ if not has_perm(user, AdminPermission.VIP_ALTER_SCRIPT, AdminPermission.WRITE_OPERATION): return self.not_authorized() id_vip = kwargs.get('id_vip') # Load XML data xml_map, attrs_map = loads(request.raw_post_data) # XML data format networkapi_map = xml_map.get('networkapi') if networkapi_map is None: return self.response_error(3, u'There is no value to the networkapi tag of XML request.') vip_map = networkapi_map.get('vip') if vip_map is None: return self.response_error(3, u'There is no value to the vip tag of XML request.') vip = RequisicaoVips.get_by_pk(id_vip) # Get XML data l7_filter = vip_map['l7_filter'] vip.l7_filter = l7_filter vip.filter_valid = False # If the l7_filter is a rule, set filter_valid to TRUE if vip_map.get('rule_id') is not None: vip.filter_valid = 1 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 else: vip.filter_valid = 0 vip.rule = None vip.save(user) map = dict() map['sucesso'] = 'sucesso' return self.response(dumps_networkapi(map))