Skip to content

Commit ec94e47

Browse files
committed
Merge remote-tracking branch 'origin/dev' into stackable
2 parents e70b240 + fdaa7e3 commit ec94e47

File tree

152 files changed

+2609
-472
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

152 files changed

+2609
-472
lines changed

.github/workflows/build_push_dev.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
-
4545
name: Build and push backend
4646
id: build-and-push-backend
47-
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
47+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
4848
with:
4949
context: .
5050
file: ./docker/backend/prod/django/Dockerfile
@@ -93,7 +93,7 @@ jobs:
9393
-
9494
name: Build and push frontend
9595
id: build-and-push-frontend
96-
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
96+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
9797
with:
9898
context: .
9999
file: ./docker/frontend/prod/Dockerfile

.github/workflows/build_push_release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ jobs:
4343
run: echo "CREATED=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
4444
-
4545
name: Build and push backend
46-
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
46+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
4747
with:
4848
context: .
4949
file: ./docker/backend/prod/django/Dockerfile
@@ -89,7 +89,7 @@ jobs:
8989
run: echo "CREATED=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
9090
-
9191
name: Build and push frontend
92-
uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7.0.0
92+
uses: docker/build-push-action@bcafcacb16a39f128d818304e6c9c0c18556b85f # v7.1.0
9393
with:
9494
context: .
9595
file: ./docker/frontend/prod/Dockerfile

.github/workflows/check_backend.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ jobs:
7575
--env-file docker/backend/unittests/envs/sqlite \
7676
secobserve_backend_unittests:latest
7777
- name: "Upload coverage report"
78-
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
78+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
7979
with:
8080
name: coverage-report
8181
path: backend/coverage.xml

.github/workflows/scorecard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ jobs:
5656
# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
5757
# format to the repository Actions tab.
5858
- name: "Upload artifact"
59-
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
59+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
6060
with:
6161
name: SARIF file
6262
path: results.sarif

backend/application/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
__version__ = "1.51.0"
1+
__version__ = "1.51.1"
22

33
import pymysql
44

5+
pymysql.version_info = (2, 2, 1, "final", 0)
6+
pymysql.__version__ = "2.2.1"
57
pymysql.install_as_MySQLdb()

backend/application/access_control/api/serializers.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ class Meta:
5353
"setting_list_size",
5454
"setting_package_info_preference",
5555
"setting_metrics_timespan",
56+
"setting_rows_per_page",
5657
"permissions",
5758
"oidc_groups_hash",
5859
"is_oidc_user",
@@ -75,6 +76,7 @@ def to_representation(self, instance: User) -> dict[str, Any]:
7576
data.pop("setting_list_size")
7677
data.pop("setting_package_info_preference")
7778
data.pop("setting_metrics_timespan")
79+
data.pop("setting_rows_per_page")
7880
data.pop("permissions")
7981
data.pop("oidc_groups_hash")
8082
data.pop("is_oidc_user")
@@ -133,6 +135,7 @@ class Meta:
133135
"setting_list_size",
134136
"setting_package_info_preference",
135137
"setting_metrics_timespan",
138+
"setting_rows_per_page",
136139
"permissions",
137140
"oidc_groups_hash",
138141
"is_oidc_user",
@@ -277,6 +280,7 @@ class Meta:
277280
"setting_list_size",
278281
"setting_package_info_preference",
279282
"setting_metrics_timespan",
283+
"setting_rows_per_page",
280284
]
281285

282286

backend/application/access_control/api/views.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ def my_settings(self, request: Request) -> Response:
134134
setting_list_size = request_serializer.validated_data.get("setting_list_size")
135135
setting_package_info_preference = request_serializer.validated_data.get("setting_package_info_preference")
136136
setting_metrics_timespan = request_serializer.validated_data.get("setting_metrics_timespan")
137+
setting_rows_per_page = request_serializer.validated_data.get("setting_rows_per_page")
138+
137139
user = request.user
138140
if isinstance(user, AnonymousUser):
139141
raise PermissionDenied("You must be authenticated to change settings")
@@ -146,6 +148,9 @@ def my_settings(self, request: Request) -> Response:
146148
user.setting_package_info_preference = setting_package_info_preference
147149
if setting_metrics_timespan:
148150
user.setting_metrics_timespan = setting_metrics_timespan
151+
if setting_rows_per_page:
152+
user.setting_rows_per_page = setting_rows_per_page
153+
149154
user.save()
150155

151156
response_serializer = UserSerializer(request.user)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 6.0.3 on 2026-04-11 06:14
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("access_control", "0017_add_system_theme_option"),
10+
]
11+
12+
operations = [
13+
migrations.AddField(
14+
model_name="user",
15+
name="setting_rows_per_page",
16+
field=models.IntegerField(
17+
choices=[(10, "Ten"), (25, "Twentyfive"), (50, "Fifty"), (100, "Hundred")], default=25
18+
),
19+
),
20+
]

backend/application/access_control/models.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
DateField,
1111
ForeignKey,
1212
Index,
13+
IntegerChoices,
14+
IntegerField,
1315
ManyToManyField,
1416
Model,
1517
)
@@ -23,9 +25,17 @@
2325
)
2426

2527

28+
class RowsPerPageChoices(IntegerChoices):
29+
TEN = 10
30+
TWENTYFIVE = 25
31+
FIFTY = 50
32+
HUNDRED = 100
33+
34+
2635
class User(AbstractUser):
2736
full_name = CharField(max_length=301, blank=True)
2837
is_external = BooleanField(default=False)
38+
2939
setting_theme = CharField(max_length=6, choices=Theme.THEME_CHOICES, default=Theme.THEME_LIGHT)
3040
setting_list_size = CharField(max_length=6, choices=ListSize.LIST_SIZE_CHOICES, default=ListSize.LIST_SIZE_MEDIUM)
3141
setting_package_info_preference = CharField(
@@ -36,6 +46,8 @@ class User(AbstractUser):
3646
setting_metrics_timespan = CharField(
3747
max_length=8, choices=MetricsTimespan.METRICS_TIMESPAN_CHOICES, default=MetricsTimespan.METRICS_TIMESPAN_7_DAYS
3848
)
49+
setting_rows_per_page = IntegerField(choices=RowsPerPageChoices, default=25)
50+
3951
oidc_groups_hash = CharField(max_length=64, blank=True)
4052
is_oidc_user = BooleanField(default=False)
4153

backend/application/access_control/queries/api_token.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def get_api_tokens() -> QuerySet[API_Token_Multiple]:
1919
if user is None:
2020
return API_Token_Multiple.objects.none()
2121

22-
api_tokens = API_Token_Multiple.objects.all()
22+
api_tokens = API_Token_Multiple.objects.all().order_by("id")
2323

2424
if user.is_superuser:
2525
return api_tokens
@@ -33,7 +33,7 @@ def get_api_tokens_for_user(given_user: User) -> QuerySet[API_Token_Multiple]:
3333
if current_user is None:
3434
return API_Token_Multiple.objects.none()
3535

36-
api_tokens = API_Token_Multiple.objects.filter(user=given_user)
36+
api_tokens = API_Token_Multiple.objects.filter(user=given_user).order_by("id")
3737

3838
if current_user.is_superuser:
3939
return api_tokens

0 commit comments

Comments
 (0)