Revision 9ae613af snf-cyclades-app/synnefo/api/util.py
b/snf-cyclades-app/synnefo/api/util.py | ||
---|---|---|
32 | 32 |
# or implied, of GRNET S.A. |
33 | 33 |
|
34 | 34 |
import datetime |
35 |
import ipaddr |
|
35 | 36 |
|
36 | 37 |
from base64 import b64encode, b64decode |
37 | 38 |
from datetime import timedelta, tzinfo |
... | ... | |
43 | 44 |
from time import time |
44 | 45 |
from traceback import format_exc |
45 | 46 |
from wsgiref.handlers import format_date_time |
46 |
from ipaddr import IPNetwork |
|
47 | 47 |
|
48 | 48 |
import dateutil.parser |
49 | 49 |
|
... | ... | |
240 | 240 |
raise ItemNotFound('Network not found.') |
241 | 241 |
|
242 | 242 |
|
243 |
def validate_network_subnet(subnet):
|
|
243 |
def validate_network_params(subnet, gateway=None, subnet6=None, gateway6=None):
|
|
244 | 244 |
try: |
245 | 245 |
# Use strict option to not all subnets with host bits set |
246 |
network = IPNetwork(subnet, strict=True)
|
|
246 |
network = ipaddr.IPv4Network(subnet, strict=True)
|
|
247 | 247 |
except ValueError: |
248 |
raise BadRequest("Invalid network subnet") |
|
248 |
raise BadRequest("Invalid network IPv4 subnet")
|
|
249 | 249 |
|
250 | 250 |
# Check that network size is allowed! |
251 | 251 |
if not validate_network_size(network.prefixlen): |
252 |
raise OverLimit("Unsupported network size") |
|
252 |
raise OverLimit(message="Unsupported network size", |
|
253 |
details="Network mask must be in range (%s, 29]" % |
|
254 |
MAX_CIDR_BLOCK) |
|
255 |
|
|
256 |
# Check that gateway belongs to network |
|
257 |
if gateway: |
|
258 |
try: |
|
259 |
gateway = ipaddr.IPv4Address(gateway) |
|
260 |
except ValueError: |
|
261 |
raise BadRequest("Invalid network IPv4 gateway") |
|
262 |
if not gateway in network: |
|
263 |
raise BadRequest("Invalid network IPv4 gateway") |
|
264 |
|
|
265 |
if subnet6: |
|
266 |
try: |
|
267 |
# Use strict option to not all subnets with host bits set |
|
268 |
network6 = ipaddr.IPv6Network(subnet6, strict=True) |
|
269 |
except ValueError: |
|
270 |
raise BadRequest("Invalid network IPv6 subnet") |
|
271 |
if gateway6: |
|
272 |
try: |
|
273 |
gateway6 = ipaddr.IPv6Address(gateway6) |
|
274 |
except ValueError: |
|
275 |
raise BadRequest("Invalid network IPv6 gateway") |
|
276 |
if not gateway6 in network6: |
|
277 |
raise BadRequest("Invalid network IPv6 gateway") |
|
253 | 278 |
|
254 | 279 |
|
255 | 280 |
def validate_network_size(cidr_block): |
Also available in: Unified diff