Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions networkapi/ip/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,12 @@
from networkapi.util.geral import create_lock_with_blocking
from networkapi.util.geral import destroy_lock
from networkapi.util.geral import get_app
from networkapi.api_rest.exceptions import NetworkAPIException


log = logging.getLogger(__name__)


class NetworkIPv4Error(Exception):

"""Generic exception for everything related to NetworkIPv4."""
Expand Down Expand Up @@ -625,6 +627,8 @@ def add_network_ipv4(self, user, id_vlan, network_type, evip, prefix=None):

except (ValueError, TypeError, AddressValueError), e:
raise ConfigEnvironmentInvalidError(e, u'Invalid Configuration')
except NetworkAPIException as e:
return self.response_error(150, e)

# Return vlan map
vlan_map = dict()
Expand Down
48 changes: 16 additions & 32 deletions networkapi/ip/resource/NetworkIPv4AddResource.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

from networkapi.admin_permission import AdminPermission
from networkapi.ambiente.models import ConfigEnvironmentInvalidError
from networkapi.api_rest.exceptions import NetworkAPIException
from networkapi.ambiente.models import EnvironmentVip
from networkapi.auth import has_perm
from networkapi.config.models import Configuration
Expand Down Expand Up @@ -51,28 +52,22 @@ def handle_post(self, request, user, *args, **kwargs):
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.'
msg = "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.'
msg = "There is no value to the vlan tag of XML request."
self.log.error(msg)
return self.response_error(3, msg)

Expand All @@ -84,8 +79,9 @@ def handle_post(self, request, user, *args, **kwargs):

# Valid prefix
if not is_valid_int_greater_zero_param(prefix, False) or (prefix and int(prefix) > 32):
self.log.error(u'Parameter prefix is invalid. Value: %s.', prefix)
return self.response_error(269, 'prefix', prefix)
msg = "CIDR prefix is invalid. It must be between 1 and 32 Value: {}".format(prefix)
self.log.error(msg)
return self.response_error(150, msg)

return self.network_ipv4_add(user, vlan_id, network_type, environment_vip, prefix)

Expand Down Expand Up @@ -146,35 +142,21 @@ def network_ipv4_add(self, user, vlan_id, network_type, environment_vip, prefix=

try:

# Valid vlan ID
if not is_valid_int_greater_zero_param(vlan_id):
self.log.error(u'Parameter id_vlan is invalid. Value: %s.', vlan_id)
raise InvalidValueError(None, 'id_vlan', vlan_id)

# 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)
msg = "The Vlan number is invalid. Value: {}".format(prefix)
self.log.error(msg)
return self.response_error(150, msg)

# Find network_type by ID to check if it exist
net = None
if network_type:
net = TipoRede.get_by_pk(network_type)

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

msg = "The VIP Environment id is invalid. Value: {}".format(prefix)
self.log.error(msg)
return self.response_error(150, msg)
# Find Environment VIP by ID to check if it exist
evip = EnvironmentVip.get_by_pk(environment_vip)

Expand Down Expand Up @@ -271,3 +253,5 @@ def network_ipv4_add(self, user, vlan_id, network_type, environment_vip, prefix=
return self.response_error(294)
except IpNotAvailableError, e:
return self.response_error(150, e)
except NetworkAPIException as e:
return self.response_error(150, e)
2 changes: 1 addition & 1 deletion networkapi/vlan/resource/VlanFindResource.py
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ def handle_post(self, request, user, *args, **kwargs):

if name is not None:
# If name is valid, add to filter
if not is_valid_string_minsize(name, 3, False):
if not is_valid_string_minsize(name, 1, False):
raise InvalidValueError(None, 'nome', name)
else:
# Iexact must be valid to add name to filter
Expand Down