Compare commits

...

2 Commits

Author SHA1 Message Date
Jens Langhammer
b055ce9c2c move to db
Signed-off-by: Jens Langhammer <jens@goauthentik.io>
2025-12-10 04:33:57 +01:00
Nuno Alves
eb2b8ca8e2 api: allow configuring default page_size and max_page_size (#18158) 2025-11-28 14:06:07 +00:00
6 changed files with 74 additions and 1 deletions

View File

@@ -13,6 +13,11 @@ class Pagination(pagination.PageNumberPagination):
page_query_param = "page"
page_size_query_param = "page_size"
def get_page_size(self, request):
if self.page_size_query_param in request.query_params:
return min(super().get_page_size(request), request.tenant.pagination_max_page_size)
return request.tenant.pagination_default_page_size
def get_paginated_response(self, data):
previous_page_number = 0
if self.page.has_previous():

View File

@@ -205,7 +205,7 @@ SPECTACULAR_SETTINGS = {
REST_FRAMEWORK = {
"DEFAULT_PAGINATION_CLASS": "authentik.api.pagination.Pagination",
"PAGE_SIZE": 100,
"PAGE_SIZE": CONFIG.get("pagination.page_size", 100),
"DEFAULT_FILTER_BACKENDS": [
"authentik.rbac.filters.ObjectFilter",
"django_filters.rest_framework.DjangoFilterBackend",

View File

@@ -69,6 +69,8 @@ class SettingsSerializer(ModelSerializer):
"impersonation_require_reason",
"default_token_duration",
"default_token_length",
"pagination_default_page_size",
"pagination_max_page_size",
"flags",
]

View File

@@ -0,0 +1,26 @@
# Generated by Django 5.2.8 on 2025-12-10 03:33
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("authentik_tenants", "0006_tenant_flags"),
]
operations = [
migrations.AddField(
model_name="tenant",
name="pagination_default_page_size",
field=models.PositiveIntegerField(
default=20,
help_text="Default page size for API responses, if no size was requested.",
),
),
migrations.AddField(
model_name="tenant",
name="pagination_max_page_size",
field=models.PositiveIntegerField(default=100, help_text="Maximum page size"),
),
]

View File

@@ -113,6 +113,16 @@ class Tenant(TenantMixin, SerializerModel):
default=DEFAULT_TOKEN_LENGTH,
validators=[MinValueValidator(1)],
)
pagination_default_page_size = models.PositiveIntegerField(
help_text=_("Default page size for API responses, if no size was requested."),
default=20,
)
pagination_max_page_size = models.PositiveIntegerField(
help_text=_("Maximum page size"),
default=100,
)
flags = models.JSONField(default=dict)
def save(self, *args, **kwargs):

View File

@@ -48272,6 +48272,16 @@ components:
maximum: 2147483647
minimum: 1
description: Default token length
pagination_default_page_size:
type: integer
maximum: 2147483647
minimum: 0
description: Default page size for API responses, if no size was requested.
pagination_max_page_size:
type: integer
maximum: 2147483647
minimum: 0
description: Maximum page size
flags:
type: object
properties:
@@ -52685,6 +52695,16 @@ components:
maximum: 2147483647
minimum: 1
description: Default token length
pagination_default_page_size:
type: integer
maximum: 2147483647
minimum: 0
description: Default page size for API responses, if no size was requested.
pagination_max_page_size:
type: integer
maximum: 2147483647
minimum: 0
description: Maximum page size
flags:
type: object
properties:
@@ -52747,6 +52767,16 @@ components:
maximum: 2147483647
minimum: 1
description: Default token length
pagination_default_page_size:
type: integer
maximum: 2147483647
minimum: 0
description: Default page size for API responses, if no size was requested.
pagination_max_page_size:
type: integer
maximum: 2147483647
minimum: 0
description: Maximum page size
flags:
type: object
properties: