Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 274b926e authored by Artur CIESZKOWSKI's avatar Artur CIESZKOWSKI
Browse files

Merge branch...

Merge branch 'DEV-3483_addproxy_buffer_responses_and_proxy_buffer_requests_into_mapping_model_fixed_versioning' into 'main'

Dev 3483 addproxy buffer responses and proxy buffer requests into mapping model fixed versioning

See merge request !74
parents ba344b7c 2f9d4cf1
Branches
Tags 0.23.0
1 merge request!74Dev 3483 addproxy buffer responses and proxy buffer requests into mapping model fixed versioning
Pipeline #217976 passed
......@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
[tool.poetry]
name = "netbox-rps-plugin"
version = "0.22.3"
version = "0.23.0"
# Family name last year contributors
authors = [
"David Jose DELASSUS",
......
"""API Serializer definitions"""
from rest_framework import serializers # pylint: disable=import-error
from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer # pylint: disable=import-error
from ..models import Mapping, HttpHeader, SamlConfig, HstsProtocol, clean_url, AclDeniedSource, CacheConfig
from netbox.api.serializers import (
NetBoxModelSerializer,
WritableNestedSerializer,
) # pylint: disable=import-error
from ..models import (
Mapping,
HttpHeader,
SamlConfig,
HstsProtocol,
clean_url,
AclDeniedSource,
CacheConfig,
)
class NestedMappingSerializer(WritableNestedSerializer):
......@@ -107,7 +118,6 @@ class NestedHttpHeaderSerializer(WritableNestedSerializer):
fields = ("id", "url", "name", "value", "apply_to")
class NestedAclDeniedSourceSerializer(WritableNestedSerializer):
"""Nested HTTP Header Serializer class"""
......@@ -143,7 +153,7 @@ class CacheConfigSerializer(NetBoxModelSerializer):
"ttl",
"max_size_limit",
"last_updated",
"created"
"created",
)
......@@ -166,7 +176,7 @@ class NestedCacheConfigSerializer(WritableNestedSerializer):
"ttl",
"max_size_limit",
"last_updated",
"created"
"created",
)
......@@ -261,7 +271,9 @@ class MappingSerializer(NetBoxModelSerializer):
"proxy_busy_buffer",
"acl_denied_source",
"cache_configs",
"hsts_protocol"
"hsts_protocol",
"proxy_buffer_responses",
"proxy_buffer_requests",
)
def create(self, validated_data):
......@@ -286,6 +298,7 @@ class MappingSerializer(NetBoxModelSerializer):
return super().update(instance, validated_data)
class AclDeniedSourceSerializer(NetBoxModelSerializer):
"""AclDeniedSource Serializer class"""
......
......@@ -7,8 +7,14 @@ from netbox.forms import ( # pylint: disable=import-error, no-name-in-module
NetBoxModelFilterSetForm, # pylint: disable=import-error, no-name-in-module
NetBoxModelImportForm, # pylint: disable=import-error, no-name-in-module
) # pylint: disable=import-error, no-name-in-module
from utilities.forms.fields import DynamicModelMultipleChoiceField, TagFilterField # pylint: disable=import-error, wrong-import-order
from utilities.forms import BOOLEAN_WITH_BLANK_CHOICES, add_blank_choice # pylint: disable=import-error, wrong-import-order
from utilities.forms.fields import (
DynamicModelMultipleChoiceField,
TagFilterField,
) # pylint: disable=import-error, wrong-import-order
from utilities.forms import (
BOOLEAN_WITH_BLANK_CHOICES,
add_blank_choice,
) # pylint: disable=import-error, wrong-import-order
from netfields import InetAddressField
from .models import ( # pylint: disable=syntax-error
Mapping,
......@@ -57,7 +63,10 @@ class MappingForm(NetBoxModelForm):
"proxy_busy_buffer",
"Comment",
"tags",
"proxy_buffer_responses",
"proxy_buffer_requests",
)
help_texts = {
"target": "URL-friendly unique shorthand",
"keepalive_requests": "Min value 100 requests, max 5000 requests, "
......@@ -68,6 +77,8 @@ class MappingForm(NetBoxModelForm):
"proxy_buffer_size": "In Kilo Bytes, min value 4, max value 128 - possible values: 4 kB, 32 kB, 64 kB, 128 kB",
"proxy_buffer": "In Kilo Bytes, min value 16, max value 512 - Should be 4x Proxy Buffer Size",
"proxy_busy_buffer": "In Kilo Bytes, min value 8, max value 256 - Should be 2x Proxy Buffer Size",
"proxy_buffer_responses": "Enable/Disable buffering of requests received by the Proxy, from the Client, before sending them to the Upstream",
"proxy_buffer_requests": "Enable/Disable buffering of responses received by the Proxy, from the Upstream, before sending them to the Client",
}
labels = {
"source": "Source URL",
......@@ -81,6 +92,8 @@ class MappingForm(NetBoxModelForm):
"proxy_buffer_size": "Proxy Buffer Size",
"proxy_buffer": "Proxy Buffer",
"proxy_busy_buffer": "Proxy Busy Buffer",
"proxy_buffer_responses": "Buffering of responses from upstream",
"proxy_buffer_requests": "Buffering of requests to upstream",
}
......@@ -119,22 +132,23 @@ class MappingFilterForm(NetBoxModelFilterSetForm):
required=False, widget=forms.Select(choices=BOOLEAN_WITH_BLANK_CHOICES)
)
proxy_read_timeout = forms.IntegerField(min_value=1, max_value=300, required=False)
client_max_body_size = forms.IntegerField(
required=False
)
client_max_body_size = forms.IntegerField(required=False)
sorry_page = forms.CharField(
max_length=URL_MAX_SIZE, min_length=1, required=False, label="Sorry Page URL"
)
proxy_buffer_size = forms.IntegerField(
min_value=4, max_value=128,
min_value=4,
max_value=128,
required=False,
)
proxy_buffer = forms.IntegerField(
min_value=16, max_value=512,
min_value=16,
max_value=512,
required=False,
)
proxy_busy_buffer = forms.IntegerField(
min_value=8, max_value=256,
min_value=8,
max_value=256,
required=False,
)
......@@ -181,15 +195,18 @@ class MappingImportForm(NetBoxModelImportForm):
help_text="Sorry Page URL",
)
proxy_buffer_size = forms.IntegerField(
min_value=4, max_value=128,
min_value=4,
max_value=128,
required=False,
)
proxy_buffer = forms.IntegerField(
min_value=16, max_value=512,
min_value=16,
max_value=512,
required=False,
)
proxy_busy_buffer = forms.IntegerField(
min_value=8, max_value=256,
min_value=8,
max_value=256,
required=False,
)
......@@ -273,6 +290,7 @@ class SamlConfigForm(NetBoxModelForm):
"force_nauth": "Force AuthnRequest",
}
# ACL DENIED FORM
class AclDeniedSourceForm(NetBoxModelForm):
"""Acl Denied Source form definition class"""
......@@ -305,12 +323,9 @@ class AclDeniedSourceFilterForm(NetBoxModelFilterSetForm):
"""AclDeniedSource filter form definition class"""
model = AclDeniedSource
mapping = forms.IntegerField(
required=True, label="Mapping"
)
acl_source = forms.CharField(
required=True, label="ACL list record"
)
mapping = forms.IntegerField(required=True, label="Mapping")
acl_source = forms.CharField(required=True, label="ACL list record")
class CacheConfigForm(NetBoxModelForm):
"""Cache config form definition class"""
......@@ -318,6 +333,7 @@ class CacheConfigForm(NetBoxModelForm):
list_extensions = forms.MultipleChoiceField(
required=False, choices=ExtensionChoices
)
class Meta:
"""Meta class"""
......
"""Migration file""" # pylint: disable=invalid-name
# Generated by Django 4.2.13 on 2024-09-16 12:10
from django.db import migrations, models
class Migration(migrations.Migration):
"""Migration class"""
dependencies = [
("netbox_rps_plugin", "0022_remove_hstsprotocol_logout_url"),
]
operations = [
migrations.AddField(
model_name="mapping",
name="proxy_buffer_requests",
field=models.BooleanField(default=True),
),
migrations.AddField(
model_name="mapping",
name="proxy_buffer_responses",
field=models.BooleanField(default=True),
),
]
......@@ -7,10 +7,18 @@ from django.conf import settings
from django.db import models # pylint: disable=import-error
from django.db.models import Model # pylint: disable=import-error
from django.urls import reverse # pylint: disable=import-error
from django.core.validators import URLValidator, MaxValueValidator, MinValueValidator # pylint: disable=import-error
from django.contrib.postgres.fields.array import ArrayField # pylint: disable=import-error
from django.core.validators import (
URLValidator,
MaxValueValidator,
MinValueValidator,
) # pylint: disable=import-error
from django.contrib.postgres.fields.array import (
ArrayField,
) # pylint: disable=import-error
from netbox.models import NetBoxModel # pylint: disable=import-error, no-name-in-module
from utilities.choices import ChoiceSet # pylint: disable=import-error, wrong-import-order
from utilities.choices import (
ChoiceSet,
) # pylint: disable=import-error, wrong-import-order
from netfields import InetAddressField
URL_MAX_SIZE = 2000
......@@ -199,24 +207,31 @@ class Mapping(NetBoxModel):
)
proxy_buffer_size = models.IntegerField(
default=4, validators=[MinValueValidator(4), MaxValueValidator(128)],
default=4,
validators=[MinValueValidator(4), MaxValueValidator(128)],
blank=True,
null=True,
# choices=ProxyBufferChoices,
)
# Info : Will be (x4) proxy_buffer_size
proxy_buffer = models.IntegerField(
default=16, validators=[MinValueValidator(16), MaxValueValidator(512)],
default=16,
validators=[MinValueValidator(16), MaxValueValidator(512)],
blank=True,
null=True,
)
# Info : Will be (x2) proxy_buffer_size
proxy_busy_buffer = models.IntegerField(
default=8, validators=[MinValueValidator(8), MaxValueValidator(256)],
default=8,
validators=[MinValueValidator(8), MaxValueValidator(256)],
blank=True,
null=True,
)
proxy_buffer_responses = models.BooleanField(default=True)
proxy_buffer_requests = models.BooleanField(default=True)
class Meta:
"""Meta class"""
......@@ -229,7 +244,7 @@ class Mapping(NetBoxModel):
]
def __str__(self):
return f"{self.source}"
return str(self.source)
def get_absolute_url(self):
"""override"""
......@@ -297,7 +312,7 @@ class HttpHeader(NetBoxModel):
ordering = ["name"]
def __str__(self):
return f"{self.name}"
return str(self.name)
def get_absolute_url(self):
"""override"""
......@@ -306,6 +321,7 @@ class HttpHeader(NetBoxModel):
class AclDeniedSource(NetBoxModel):
"""AclDeniedSource class"""
id = models.AutoField(primary_key=True)
# acl_source = models.CharField(max_length=18)
acl_source = InetAddressField()
......@@ -320,13 +336,11 @@ class AclDeniedSource(NetBoxModel):
name="mapping",
)
class Meta:
"""Meta class"""
ordering = ["id", "mapping", "acl_source", "last_updated", "created"]
def __str__(self):
return f"Netbox RPS Plugin ACL Denied Source {self.id}"
# return f"Netbox RPS Plugin ACL Denied Source {self.id}, {self.mapping}, \
......@@ -346,7 +360,9 @@ class CacheConfig(NetBoxModel):
id = models.AutoField(primary_key=True)
mapping = models.ForeignKey(
Mapping, on_delete=models.CASCADE, related_name="cache_configs",
Mapping,
on_delete=models.CASCADE,
related_name="cache_configs",
# db_column="mapping_id",
)
......@@ -373,11 +389,7 @@ class HstsMaxAge(ChoiceSet):
DEFAULT_VALUE = 31536000
CHOICES = [
(0, "no cache"),
(31536000, "one year"),
(63072000, "two years")
]
CHOICES = [(0, "no cache"), (31536000, "one year"), (63072000, "two years")]
class HstsProtocol(NetBoxModel):
......
"""Tables definitions"""
import django_tables2 as tables
from netbox.tables import NetBoxTable, ChoiceFieldColumn, columns # pylint: disable=import-error, no-name-in-module
from netbox.tables import (
NetBoxTable,
ChoiceFieldColumn,
columns,
) # pylint: disable=import-error, no-name-in-module
from .models import Mapping, HttpHeader, AclDeniedSource, CacheConfig, HstsProtocol
......@@ -45,6 +49,8 @@ class MappingTable(NetBoxTable):
"proxy_buffer_size",
"proxy_buffer",
"proxy_busy_buffer",
"proxy_buffer_responses",
"proxy_buffer_requests",
)
default_columns = (
"source",
......@@ -99,7 +105,13 @@ class AclDeniedSourceTable(NetBoxTable):
"last_updated",
"created",
)
default_columns = ("id", "mapping", "acl_source", "last_updated", "created",)
default_columns = (
"id",
"mapping",
"acl_source",
"last_updated",
"created",
)
class CacheConfigTable(NetBoxTable):
......@@ -121,6 +133,7 @@ class CacheConfigTable(NetBoxTable):
"last_updated",
)
class HstsProtocolTable(NetBoxTable):
"""Hsts Protocol Table definition class"""
......
......@@ -267,3 +267,38 @@ class MappingApiTestCase(
self.assertIsNotNone(content["proxy_buffer_size"])
self.assertIsNotNone(content["proxy_buffer"])
self.assertIsNotNone(content["proxy_busy_buffer"])
def test_that_mapping_creation_include_proxy_buffer_requests_and_response(
self,
) -> None:
"""Test that mapping creation include proxy buffer size parameter."""
# Add object-level permission
obj_perm = ObjectPermission(
name="Test permission",
actions=["add", "change", "view"],
)
obj_perm.save()
# pylint: disable=E1101
obj_perm.users.add(self.user)
obj_perm.object_types.add(ContentType.objects.get_for_model(self.model))
response = self.client.post(
self._get_list_url(),
{
"source": "HTTPS://TRUC11.com/API",
"target": "HTTP://Toto.11.com:1888/aPi",
"authentication": "none",
"testingpage": None,
"proxy_buffer_size": 4,
},
format="json",
**self.header,
)
self.assertHttpStatus(response, status.HTTP_201_CREATED)
content = json.loads(response.content)
self.assertIn("proxy_buffer_responses", content)
self.assertIn("proxy_buffer_requests", content)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment