Esempio n. 1
0
class InternetExchangePeeringSessionForm(BootstrapMixin, forms.ModelForm):
    autonomous_system = DynamicModelChoiceField(
        queryset=AutonomousSystem.objects.all())
    ixp_connection = DynamicModelChoiceField(
        queryset=Connection.objects.all(),
        label="IXP connection",
    )
    password = PasswordField(required=False, render_value=True)
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    comments = CommentField()
    tags = TagField(required=False)

    class Meta:
        model = InternetExchangePeeringSession
        fields = (
            "service_reference",
            "autonomous_system",
            "ixp_connection",
            "ip_address",
            "password",
            "multihop_ttl",
            "is_route_server",
            "enabled",
            "import_routing_policies",
            "export_routing_policies",
            "comments",
            "tags",
        )
        help_texts = {
            "ip_address": "IPv6 or IPv4 address",
            "is_route_server": "Define if this session is with a route server",
        }
Esempio n. 2
0
class CommunityBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
    pk = DynamicModelMultipleChoiceField(queryset=Community.objects.all(),
                                         widget=forms.MultipleHiddenInput)
    type = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(CommunityType.choices),
        widget=StaticSelect,
    )
    comments = CommentField(widget=SmallTextarea)

    class Meta:
        nullable_fields = ["comments"]
Esempio n. 3
0
class InternetExchangeBulkEditForm(BootstrapMixin, AddRemoveTagsForm,
                                   BulkEditForm):
    pk = DynamicModelMultipleChoiceField(
        queryset=InternetExchange.objects.all(),
        widget=forms.MultipleHiddenInput)
    local_autonomous_system = DynamicModelChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.defer("prefixes"),
        query_params={"affiliated": True},
    )
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    communities = DynamicModelMultipleChoiceField(
        required=False, queryset=Community.objects.all())
    check_bgp_session_states = forms.NullBooleanField(
        required=False,
        label="Poll peering session states",
        widget=CustomNullBooleanSelect,
    )
    ixapi_endpoint = DynamicModelChoiceField(required=False,
                                             label="IX-API endpoint",
                                             queryset=IXAPI.objects.all())
    comments = CommentField(widget=SmallTextarea)

    class Meta:
        nullable_fields = [
            "import_routing_policies",
            "export_routing_policies",
            "communities",
            "ixapi_endpoint",
            "comments",
        ]
Esempio n. 4
0
class DirectPeeringSessionBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
    pk = DynamicModelMultipleChoiceField(
        queryset=DirectPeeringSession.objects.all(), widget=forms.MultipleHiddenInput
    )
    local_autonomous_system = DynamicModelChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.all(),
        query_params={"affiliated": True},
    )
    enabled = forms.NullBooleanField(
        required=False, label="Enable", widget=CustomNullBooleanSelect
    )
    relationship = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(BGPRelationship.choices),
        widget=StaticSelect,
    )
    bgp_group = DynamicModelChoiceField(
        required=False, queryset=BGPGroup.objects.all(), label="BGP group"
    )
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    router = DynamicModelChoiceField(required=False, queryset=Router.objects.all())
    comments = CommentField()

    class Meta:
        nullable_fields = [
            "import_routing_policies",
            "export_routing_policies",
            "router",
            "comments",
        ]
Esempio n. 5
0
class BGPGroupForm(BootstrapMixin, forms.ModelForm):
    slug = SlugField(
        max_length=255,
        help_text=
        "Friendly unique shorthand used for URL and config. Warning: may result in change of operational state on a router if being used in the configuration.",
    )
    comments = CommentField()
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    communities = DynamicModelMultipleChoiceField(
        required=False, queryset=Community.objects.all())
    tags = TagField(required=False)

    class Meta:
        model = BGPGroup
        fields = (
            "name",
            "slug",
            "comments",
            "import_routing_policies",
            "export_routing_policies",
            "communities",
            "check_bgp_session_states",
            "tags",
        )
        labels = {"check_bgp_session_states": "Poll peering session states"}
        help_texts = {
            "name":
            "Full name of the BGP group",
            "check_bgp_session_states":
            "If enabled, the state of peering sessions will be polled.",
        }
Esempio n. 6
0
class DirectPeeringSessionBulkEditForm(BootstrapMixin, AddRemoveTagsForm,
                                       BulkEditForm):
    pk = DynamicModelMultipleChoiceField(
        queryset=DirectPeeringSession.objects.all(),
        widget=forms.MultipleHiddenInput)
    enabled = forms.NullBooleanField(required=False,
                                     label="Enable",
                                     widget=CustomNullBooleanSelect)
    relationship = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(BGP_RELATIONSHIP_CHOICES),
        widget=StaticSelect,
    )
    bgp_group = DynamicModelChoiceField(required=False,
                                        queryset=BGPGroup.objects.all(),
                                        label="BGP Group")
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        widget=APISelectMultiple(
            additional_query_params={"type": "import-policy"}),
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        widget=APISelectMultiple(
            additional_query_params={"type": "export-policy"}),
    )
    router = DynamicModelChoiceField(required=False,
                                     queryset=Router.objects.all())
    comments = CommentField()

    class Meta:
        nullable_fields = [
            "import_routing_policies",
            "export_routing_policies",
            "router",
            "comments",
        ]
Esempio n. 7
0
class DirectPeeringSessionFilterForm(BootstrapMixin, forms.Form):
    model = DirectPeeringSession
    q = forms.CharField(required=False, label="Search")
    local_autonomous_system_id = DynamicModelChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.all(),
        query_params={"affiliated": True},
        to_field_name="pk",
        label="Local Autonomous System",
    )
    autonomous_system_id = DynamicModelChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.all(),
        to_field_name="pk",
        label="Autonomous System",
    )
    bgp_group_id = DynamicModelMultipleChoiceField(
        required=False,
        queryset=BGPGroup.objects.all(),
        to_field_name="pk",
        label="BGP Group",
        null_option="None",
    )
    address_family = forms.ChoiceField(required=False,
                                       choices=IPFamily.choices,
                                       widget=StaticSelect)
    enabled = forms.NullBooleanField(required=False,
                                     label="Enabled",
                                     widget=CustomNullBooleanSelect)
    relationship = forms.MultipleChoiceField(required=False,
                                             choices=BGPRelationship.choices,
                                             widget=StaticSelectMultiple)
    router_id = DynamicModelMultipleChoiceField(
        required=False,
        queryset=Router.objects.all(),
        to_field_name="pk",
        null_option="None",
    )
    tag = TagFilterField(model)
Esempio n. 8
0
class ConnectionFilterForm(BootstrapMixin, forms.Form):
    model = Connection
    q = forms.CharField(required=False, label="Search")
    state = forms.MultipleChoiceField(
        required=False,
        choices=add_blank_choice(ConnectionState.choices),
        widget=StaticSelect,
    )
    internet_exchange_point_id = DynamicModelMultipleChoiceField(
        required=False,
        queryset=InternetExchange.objects.all(),
        to_field_name="pk",
        label="Internet exchange point",
        null_option="None",
    )
    router_id = DynamicModelMultipleChoiceField(
        required=False,
        queryset=Router.objects.all(),
        to_field_name="pk",
        null_option="None",
    )
    tag = TagFilterField(model)
Esempio n. 9
0
class BGPGroupForm(BootstrapMixin, forms.ModelForm):
    slug = SlugField(max_length=255)
    comments = CommentField()
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        widget=APISelectMultiple(
            additional_query_params={"type": "import-policy"}),
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        widget=APISelectMultiple(
            additional_query_params={"type": "export-policy"}),
    )
    communities = DynamicModelMultipleChoiceField(
        required=False, queryset=Community.objects.all())
    tags = TagField(required=False)

    class Meta:
        model = BGPGroup
        fields = (
            "name",
            "slug",
            "comments",
            "import_routing_policies",
            "export_routing_policies",
            "communities",
            "check_bgp_session_states",
            "tags",
        )
        labels = {"check_bgp_session_states": "Poll Peering Session States"}
        help_texts = {
            "name":
            "Full name of the BGP group",
            "check_bgp_session_states":
            "If enabled, the state of peering sessions will be polled.",
        }
Esempio n. 10
0
class InternetExchangeFilterForm(BootstrapMixin, forms.Form):
    model = InternetExchange
    q = forms.CharField(required=False, label="Search")
    local_autonomous_system_id = DynamicModelChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.all(),
        query_params={"affiliated": True},
    )
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        to_field_name="pk",
        null_option="None",
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        to_field_name="pk",
        null_option="None",
        query_params={"type": "export-policy"},
    )
    tag = TagFilterField(model)
Esempio n. 11
0
class InternetExchangePeeringSessionFilterForm(BootstrapMixin, forms.Form):
    model = InternetExchangePeeringSession
    q = forms.CharField(required=False, label="Search")
    autonomous_system_id = DynamicModelMultipleChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.all(),
        to_field_name="pk",
        label="Autonomous system",
    )
    ixp_connection_id = DynamicModelMultipleChoiceField(
        required=False,
        queryset=Connection.objects.all(),
        to_field_name="pk",
        label="IXP connection",
    )
    address_family = forms.ChoiceField(
        required=False, choices=IPFamily.choices, widget=StaticSelect
    )
    is_route_server = forms.NullBooleanField(
        required=False, label="Route server", widget=CustomNullBooleanSelect
    )
    enabled = forms.NullBooleanField(required=False, widget=CustomNullBooleanSelect)
    tag = TagFilterField(model)
Esempio n. 12
0
class RouterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
    pk = DynamicModelMultipleChoiceField(queryset=Router.objects.all(),
                                         widget=forms.MultipleHiddenInput)
    platform = forms.ChoiceField(required=False,
                                 choices=add_blank_choice(Platform.choices),
                                 widget=StaticSelect)
    encrypt_passwords = forms.NullBooleanField(required=False,
                                               label="Encrypt Passwords",
                                               widget=CustomNullBooleanSelect)
    configuration_template = DynamicModelChoiceField(
        required=False, queryset=Configuration.objects.all())
    comments = CommentField(widget=SmallTextarea)

    class Meta:
        nullable_fields = ["comments"]
Esempio n. 13
0
class BGPGroupBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
    pk = DynamicModelMultipleChoiceField(queryset=BGPGroup.objects.all(),
                                         widget=forms.MultipleHiddenInput)
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    communities = DynamicModelMultipleChoiceField(
        required=False, queryset=Community.objects.all())
    comments = CommentField(widget=SmallTextarea)

    class Meta:
        nullable_fields = [
            "import_routing_policies",
            "export_routing_policies",
            "communities",
            "comments",
        ]
Esempio n. 14
0
class InternetExchangeFilterForm(BootstrapMixin, forms.Form):
    model = InternetExchange
    q = forms.CharField(required=False, label="Search")
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        to_field_name="pk",
        null_option="None",
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        to_field_name="pk",
        null_option="None",
        query_params={"type": "export-policy"},
    )
    router = DynamicModelMultipleChoiceField(
        required=False,
        queryset=Router.objects.all(),
        to_field_name="pk",
        null_option="None",
    )
    tag = TagFilterField(model)
Esempio n. 15
0
class JobResultFilterForm(BootstrapMixin, forms.Form):
    model = JobResult
    q = forms.CharField(required=False, label="Search")
    name = forms.CharField(required=False)
    user_id = DynamicModelMultipleChoiceField(
        queryset=User.objects.all(),
        required=False,
        display_field="username",
        label="User",
        widget=APISelectMultiple(api_url="/api/users/users/"),
    )
    status = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(JobResultStatus.choices),
        widget=StaticSelect(),
    )
Esempio n. 16
0
class RouterFilterForm(BootstrapMixin, forms.Form):
    model = Router
    q = forms.CharField(required=False, label="Search")
    platform = forms.MultipleChoiceField(required=False,
                                         choices=Platform.choices,
                                         widget=StaticSelectMultiple)
    encrypt_passwords = forms.NullBooleanField(required=False,
                                               label="Encrypt Passwords",
                                               widget=CustomNullBooleanSelect)
    configuration_template = DynamicModelMultipleChoiceField(
        required=False,
        queryset=Configuration.objects.all(),
        to_field_name="pk",
        widget=APISelectMultiple(null_option=True),
    )
    tag = TagFilterField(model)
Esempio n. 17
0
class RoutingPolicyBulkEditForm(BootstrapMixin, AddRemoveTagsForm,
                                BulkEditForm):
    pk = DynamicModelMultipleChoiceField(queryset=RoutingPolicy.objects.all(),
                                         widget=forms.MultipleHiddenInput)
    type = forms.ChoiceField(
        required=False,
        choices=add_blank_choice(RoutingPolicyType.choices),
        widget=StaticSelect,
    )
    weight = forms.IntegerField(required=False, min_value=0, max_value=32767)
    address_family = forms.ChoiceField(required=False,
                                       choices=IPFamily.choices,
                                       widget=StaticSelect)
    comments = CommentField(widget=SmallTextarea)

    class Meta:
        nullable_fields = ["comments"]
Esempio n. 18
0
class RouterBulkEditForm(BootstrapMixin, AddRemoveTagsForm, BulkEditForm):
    pk = DynamicModelMultipleChoiceField(queryset=Router.objects.all(),
                                         widget=forms.MultipleHiddenInput)
    local_autonomous_system = DynamicModelChoiceField(
        required=False,
        queryset=AutonomousSystem.objects.defer("prefixes"),
        query_params={"affiliated": True},
    )
    platform = DynamicModelChoiceField(required=False,
                                       queryset=Platform.objects.all())
    encrypt_passwords = forms.NullBooleanField(required=False,
                                               widget=CustomNullBooleanSelect)
    configuration_template = DynamicModelChoiceField(
        required=False, queryset=Configuration.objects.all())
    device_state = forms.ChoiceField(
        required=False,
        initial=DeviceState.ENABLED,
        choices=add_blank_choice(DeviceState.choices),
        widget=StaticSelect,
    )
    comments = CommentField(widget=SmallTextarea)

    class Meta:
        nullable_fields = ["comments"]
Esempio n. 19
0
class DirectPeeringSessionForm(BootstrapMixin, forms.ModelForm):
    local_autonomous_system = DynamicModelChoiceField(
        queryset=AutonomousSystem.objects.defer("prefixes"),
        query_params={"affiliated": True},
    )
    autonomous_system = DynamicModelChoiceField(
        queryset=AutonomousSystem.objects.defer("prefixes"))
    bgp_group = DynamicModelChoiceField(required=False,
                                        queryset=BGPGroup.objects.all(),
                                        label="BGP Group")
    relationship = DynamicModelChoiceField(queryset=Relationship.objects.all())
    router = DynamicModelChoiceField(
        required=False,
        queryset=Router.objects.all(),
        help_text="Router on which this session is configured",
    )
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    password = PasswordField(required=False, render_value=True)
    comments = CommentField()
    tags = TagField(required=False)

    class Meta:
        model = DirectPeeringSession
        fields = (
            "service_reference",
            "local_autonomous_system",
            "local_ip_address",
            "autonomous_system",
            "bgp_group",
            "relationship",
            "ip_address",
            "password",
            "multihop_ttl",
            "enabled",
            "router",
            "import_routing_policies",
            "export_routing_policies",
            "comments",
            "tags",
        )
        labels = {
            "local_ip_address": "Local IP Address",
            "ip_address": "IP Address"
        }
        help_texts = {
            "local_ip_address": "IPv6 or IPv4 address",
            "ip_address": "IPv6 or IPv4 address",
            "enabled": "Should this session be enabled?",
        }

    def clean(self):
        cleaned_data = super().clean()

        # Make sure that both local and remote IP addresses are from the same family
        if cleaned_data["local_ip_address"] and (
                cleaned_data["local_ip_address"].version !=
                cleaned_data["ip_address"].version):
            raise ValidationError(
                "Local and remote IP addresses must belong to the same address family."
            )

        # Make sure that routing policies are compatible (address family)
        for policy in cleaned_data["import_routing_policies"].union(
                cleaned_data["export_routing_policies"]):
            if (policy.address_family != IPFamily.ALL and policy.address_family
                    != cleaned_data["ip_address"].version):
                raise ValidationError(
                    f"Routing policy '{policy.name}' cannot be used for this session, address families mismatch."
                )
Esempio n. 20
0
class InternetExchangeForm(BootstrapMixin, forms.ModelForm):
    slug = SlugField(
        max_length=255,
        help_text=
        "Friendly unique shorthand used for URL and config. Change Warning: May result in change of Operational State on a Router if being used in config generation",
    )
    local_autonomous_system = DynamicModelChoiceField(
        queryset=AutonomousSystem.objects.all(),
        query_params={"affiliated": True},
        label="Local Autonomous System",
    )
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "import-policy"},
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        query_params={"type": "export-policy"},
    )
    communities = DynamicModelMultipleChoiceField(
        required=False, queryset=Community.objects.all())
    router = DynamicModelChoiceField(
        required=False,
        queryset=Router.objects.all(),
        help_text="Router connected to the Internet Exchange point",
    )
    comments = CommentField()
    tags = TagField(required=False)

    class Meta:
        model = InternetExchange
        fields = (
            "name",
            "slug",
            "local_autonomous_system",
            "ipv6_address",
            "ipv4_address",
            "communities",
            "import_routing_policies",
            "export_routing_policies",
            "router",
            "check_bgp_session_states",
            "comments",
            "tags",
        )
        labels = {
            "ipv6_address": "IPv6 Address",
            "ipv4_address": "IPv4 Address",
            "check_bgp_session_states": "Poll Peering Session States",
        }
        help_texts = {
            "name":
            "Full name of the Internet Exchange point",
            "ipv6_address":
            "IPv6 Address used to peer",
            "ipv4_address":
            "IPv4 Address used to peer",
            "check_bgp_session_states":
            "If enabled, with a usable router, the state of peering sessions will be polled.",
        }
Esempio n. 21
0
class DirectPeeringSessionForm(BootstrapMixin, forms.ModelForm):
    local_asn = forms.IntegerField(
        min_value=ASN_MIN,
        max_value=ASN_MAX,
        label="Local ASN",
        help_text=f"ASN to be used locally, defaults to {settings.MY_ASN}",
    )
    autonomous_system = DynamicModelChoiceField(
        queryset=AutonomousSystem.objects.all(), label="Autonomous System")
    bgp_group = DynamicModelChoiceField(required=False,
                                        queryset=BGPGroup.objects.all(),
                                        label="BGP Group")
    relationship = forms.ChoiceField(choices=BGPRelationship.choices,
                                     widget=StaticSelect)
    router = DynamicModelChoiceField(
        required=False,
        queryset=Router.objects.all(),
        help_text="Router on which this session is configured",
    )
    import_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        widget=APISelectMultiple(
            additional_query_params={"type": "import-policy"}),
    )
    export_routing_policies = DynamicModelMultipleChoiceField(
        required=False,
        queryset=RoutingPolicy.objects.all(),
        widget=APISelectMultiple(
            additional_query_params={"type": "export-policy"}),
    )
    password = PasswordField(required=False, render_value=True)
    comments = CommentField()
    tags = TagField(required=False)

    class Meta:
        model = DirectPeeringSession
        fields = (
            "local_asn",
            "local_ip_address",
            "autonomous_system",
            "bgp_group",
            "relationship",
            "ip_address",
            "password",
            "multihop_ttl",
            "enabled",
            "router",
            "import_routing_policies",
            "export_routing_policies",
            "comments",
            "tags",
        )
        labels = {
            "local_ip_address": "Local IP Address",
            "ip_address": "IP Address"
        }
        help_texts = {
            "local_ip_address": "IPv6 or IPv4 address",
            "ip_address": "IPv6 or IPv4 address",
            "enabled": "Should this session be enabled?",
        }

    def __init__(self, *args, **kwargs):
        initial = kwargs.get("initial", {})
        # Set local ASN according to the one found in the settings
        initial.update({"local_asn": settings.MY_ASN})
        super().__init__(*args, **kwargs)