1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00

Route-server URL starting with ssh:// #462

This commit is contained in:
Stefan Pratter
2020-04-04 09:11:59 +00:00
parent 9f4bf32ab1
commit 9176520f10
4 changed files with 79 additions and 3 deletions

View File

@@ -1174,6 +1174,30 @@ class TestJSON(unittest.TestCase):
test_success=False,
)
##########################################################################
def test_org_admin_002_POST_net_looking_glass_url(self):
for scheme in ["http","https","ssh","telnet"]:
r_data = self.assert_create(
self.db_org_admin,
"net",
self.make_data_net(asn=9000900, looking_glass="{}://foo.bar".format(scheme)),
test_failures={"invalid": {"looking_glass": "foo://www.bar.com"}}
)
Network.objects.get(id=r_data["id"]).delete(hard=True)
##########################################################################
def test_org_admin_002_POST_net_route_server_url(self):
for scheme in ["http","https","ssh","telnet"]:
r_data = self.assert_create(
self.db_org_admin,
"net",
self.make_data_net(asn=9000900, route_server="{}://foo.bar".format(scheme)),
test_failures={"invalid": {"route_server": "foo://www.bar.com"}}
)
Network.objects.get(id=r_data["id"]).delete(hard=True)
##########################################################################
def test_org_admin_002_POST_net_deleted(self):
data = self.make_data_net(asn=SHARED["net_rw_dupe_deleted"].asn)

View File

@@ -0,0 +1,18 @@
# Generated by Django 2.2.9 on 2020-04-04 09:10
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('peeringdb_server', '0030_affiliation_request_status_add_canceled'),
]
operations = [
migrations.AlterField(
model_name='network',
name='info_never_via_route_servers',
field=models.BooleanField(default=False, help_text='Indicates if this network will announce its routes via route servers or not'),
),
]

View File

@@ -0,0 +1,24 @@
# Generated by Django 2.2.9 on 2020-04-04 09:11
from django.db import migrations
import django_peeringdb.models.abstract
class Migration(migrations.Migration):
dependencies = [
('peeringdb_server', '0031_auto_20200404_0910'),
]
operations = [
migrations.AlterField(
model_name='network',
name='looking_glass',
field=django_peeringdb.models.abstract.LG_URLField(blank=True, max_length=255),
),
migrations.AlterField(
model_name='network',
name='route_server',
field=django_peeringdb.models.abstract.LG_URLField(blank=True, max_length=255),
),
]

View File

@@ -3,7 +3,7 @@ import re
import reversion
from django_inet.rest import IPAddressField, IPPrefixField
from django_inet.models import URLValidator
from django.core.validators import URLValidator
from django.db.models.query import QuerySet
from django.db.models import Prefetch, Q, Sum, IntegerField, Case, When
from django.db import models, transaction, IntegrityError
@@ -320,8 +320,9 @@ class FieldMethodValidator(object):
class ExtendedURLField(serializers.URLField):
def __init__(self, **kwargs):
schemes = kwargs.pop("schemes", None)
super(ExtendedURLField, self).__init__(**kwargs)
validator = URLValidator(message=self.error_messages["invalid"])
validator = URLValidator(message=self.error_messages["invalid"], schemes=schemes)
self.validators = []
self.validators.append(validator)
@@ -1533,7 +1534,16 @@ class NetworkSerializer(ModelSerializer):
)
org = serializers.SerializerMethodField()
route_server = ExtendedURLField(required=False, allow_blank=True)
route_server = serializers.CharField(
required=False, allow_blank=True,
validators=[URLValidator(schemes=["http", "https", "telnet", "ssh"])]
)
looking_glass = serializers.CharField(
required=False, allow_blank=True,
validators=[URLValidator(schemes=["http", "https", "telnet", "ssh"])]
)
info_prefixes4 = SaneIntegerField(
allow_null=False, required=False, validators=[validate_info_prefixes4]