def handle_post(self, request, user, *args, **kwargs):
        '''Handles POST requests to add an IP and associate it to an equipment.

        URL: ipv4/
        '''

        self.log.info('Add an IP and associate it to an equipment')

        try:

            # Business Validations

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

            # XML data format

            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                msg = u'There is no value to the networkapi tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)
            ip_map = networkapi_map.get('ip')
            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_equipment')
            network_ipv4_id = ip_map.get('id_network_ipv4')
            description = ip_map.get('description')

            # 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)

            # Description can NOT be greater than 100
            if not is_valid_string_maxsize(description, 100) or not is_valid_string_minsize(description, 3):
                self.log.error(
                    u'Parameter descricao is invalid. Value: %s.', description)
                raise InvalidValueError(None, 'descricao', 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()
            ip.descricao = description

            # Persist
            ip.create(user, equip_id, network_ipv4_id, True)

            # Generate return map
            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 self.response(dumps_networkapi({'ip': ip_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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