Skip to content

Commit 3ec4461

Browse files
Maffoochclaude
andcommitted
Add deprecation warning messages to Credential Manager and Stub Findings UI pages
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3cef2c1 commit 3ec4461

3 files changed

Lines changed: 48 additions & 0 deletions

File tree

dojo/cred/views.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from dojo.authorization.authorization_decorators import user_is_authorized, user_is_configuration_authorized
1010
from dojo.authorization.roles_permissions import Permissions
1111
from dojo.cred.queries import get_authorized_cred_mappings_for_queryset
12+
from dojo.decorators import deprecated_view
1213
from dojo.forms import CredMappingForm, CredMappingFormProd, CredUserForm, NoteForm
1314
from dojo.models import Cred_Mapping, Cred_User, Engagement, Finding, Product, Test
1415
from dojo.utils import Product_Tab, add_breadcrumb, dojo_crypto_encrypt, prepare_for_view
@@ -17,6 +18,7 @@
1718

1819

1920
@user_is_configuration_authorized(Permissions.Credential_Add)
21+
@deprecated_view("Credential Manager")
2022
def new_cred(request):
2123
if request.method == "POST":
2224
tform = CredUserForm(request.POST)
@@ -39,6 +41,7 @@ def new_cred(request):
3941

4042

4143
@user_is_authorized(Product, Permissions.Product_Edit, "pid")
44+
@deprecated_view("Credential Manager")
4245
def all_cred_product(request, pid):
4346
prod = get_object_or_404(Product, id=pid)
4447
creds = Cred_Mapping.objects.filter(product=prod).order_by("cred_id__name")
@@ -48,6 +51,7 @@ def all_cred_product(request, pid):
4851

4952

5053
@user_is_configuration_authorized(Permissions.Credential_Edit)
54+
@deprecated_view("Credential Manager")
5155
def edit_cred(request, ttid):
5256
tool_config = Cred_User.objects.get(pk=ttid)
5357
if request.method == "POST":
@@ -80,6 +84,7 @@ def edit_cred(request, ttid):
8084

8185

8286
@user_is_configuration_authorized(Permissions.Credential_View)
87+
@deprecated_view("Credential Manager")
8388
def view_cred_details(request, ttid):
8489
cred = Cred_User.objects.get(pk=ttid)
8590
notes = cred.notes.all()
@@ -118,6 +123,7 @@ def view_cred_details(request, ttid):
118123

119124

120125
@user_is_configuration_authorized(Permissions.Credential_View)
126+
@deprecated_view("Credential Manager")
121127
def cred(request):
122128
confs = Cred_User.objects.all().order_by("name", "environment", "username")
123129
add_breadcrumb(title="Credential Manager", top_level=True, request=request)
@@ -128,6 +134,7 @@ def cred(request):
128134

129135
@user_is_authorized(Product, Permissions.Product_View, "pid")
130136
@user_is_authorized(Cred_Mapping, Permissions.Credential_View, "ttid")
137+
@deprecated_view("Credential Manager")
131138
def view_cred_product(request, pid, ttid):
132139
cred = get_object_or_404(
133140
Cred_Mapping.objects.select_related("cred_id"), id=ttid)
@@ -184,6 +191,7 @@ def view_cred_product(request, pid, ttid):
184191

185192
@user_is_authorized(Engagement, Permissions.Engagement_View, "eid")
186193
@user_is_authorized(Cred_Mapping, Permissions.Credential_View, "ttid")
194+
@deprecated_view("Credential Manager")
187195
def view_cred_product_engagement(request, eid, ttid):
188196
cred = get_object_or_404(
189197
Cred_Mapping.objects.select_related("cred_id"), id=ttid)
@@ -233,6 +241,7 @@ def view_cred_product_engagement(request, eid, ttid):
233241

234242
@user_is_authorized(Test, Permissions.Test_View, "tid")
235243
@user_is_authorized(Cred_Mapping, Permissions.Credential_View, "ttid")
244+
@deprecated_view("Credential Manager")
236245
def view_cred_engagement_test(request, tid, ttid):
237246
cred = get_object_or_404(
238247
Cred_Mapping.objects.select_related("cred_id"), id=ttid)
@@ -284,6 +293,7 @@ def view_cred_engagement_test(request, tid, ttid):
284293

285294
@user_is_authorized(Finding, Permissions.Finding_View, "fid")
286295
@user_is_authorized(Cred_Mapping, Permissions.Credential_View, "ttid")
296+
@deprecated_view("Credential Manager")
287297
def view_cred_finding(request, fid, ttid):
288298
cred = get_object_or_404(
289299
Cred_Mapping.objects.select_related("cred_id"), id=ttid)
@@ -335,6 +345,7 @@ def view_cred_finding(request, fid, ttid):
335345

336346
@user_is_authorized(Product, Permissions.Product_Edit, "pid")
337347
@user_is_authorized(Cred_Mapping, Permissions.Credential_Edit, "ttid")
348+
@deprecated_view("Credential Manager")
338349
def edit_cred_product(request, pid, ttid):
339350
cred = get_object_or_404(
340351
Cred_Mapping.objects.select_related("cred_id"), id=ttid)
@@ -363,6 +374,7 @@ def edit_cred_product(request, pid, ttid):
363374

364375
@user_is_authorized(Engagement, Permissions.Engagement_Edit, "eid")
365376
@user_is_authorized(Cred_Mapping, Permissions.Credential_Edit, "ttid")
377+
@deprecated_view("Credential Manager")
366378
def edit_cred_product_engagement(request, eid, ttid):
367379
cred = get_object_or_404(
368380
Cred_Mapping.objects.select_related("cred_id"), id=ttid)
@@ -396,6 +408,7 @@ def edit_cred_product_engagement(request, eid, ttid):
396408

397409

398410
@user_is_authorized(Product, Permissions.Product_Edit, "pid")
411+
@deprecated_view("Credential Manager")
399412
def new_cred_product(request, pid):
400413
prod = get_object_or_404(Product, pk=pid)
401414
if request.method == "POST":
@@ -431,6 +444,7 @@ def new_cred_product(request, pid):
431444

432445

433446
@user_is_authorized(Engagement, Permissions.Engagement_Edit, "eid")
447+
@deprecated_view("Credential Manager")
434448
def new_cred_product_engagement(request, eid):
435449
eng = get_object_or_404(Engagement, pk=eid)
436450

@@ -482,6 +496,7 @@ def new_cred_product_engagement(request, eid):
482496

483497

484498
@user_is_authorized(Test, Permissions.Test_Edit, "tid")
499+
@deprecated_view("Credential Manager")
485500
def new_cred_engagement_test(request, tid):
486501
test = get_object_or_404(Test, pk=tid)
487502

@@ -532,6 +547,7 @@ def new_cred_engagement_test(request, tid):
532547

533548

534549
@user_is_authorized(Finding, Permissions.Finding_Edit, "fid")
550+
@deprecated_view("Credential Manager")
535551
def new_cred_finding(request, fid):
536552
finding = get_object_or_404(Finding, pk=fid)
537553

@@ -662,29 +678,34 @@ def delete_cred_controller(request, destination_url, elem_id, ttid):
662678

663679

664680
@user_is_configuration_authorized(Permissions.Credential_Delete)
681+
@deprecated_view("Credential Manager")
665682
def delete_cred(request, ttid):
666683
return delete_cred_controller(request, "cred", 0, ttid=ttid)
667684

668685

669686
@user_is_authorized(Product, Permissions.Product_Edit, "pid")
670687
@user_is_authorized(Cred_Mapping, Permissions.Credential_Delete, "ttid")
688+
@deprecated_view("Credential Manager")
671689
def delete_cred_product(request, pid, ttid):
672690
return delete_cred_controller(request, "all_cred_product", pid, ttid)
673691

674692

675693
@user_is_authorized(Engagement, Permissions.Engagement_Edit, "eid")
676694
@user_is_authorized(Cred_Mapping, Permissions.Credential_Delete, "ttid")
695+
@deprecated_view("Credential Manager")
677696
def delete_cred_engagement(request, eid, ttid):
678697
return delete_cred_controller(request, "view_engagement", eid, ttid)
679698

680699

681700
@user_is_authorized(Test, Permissions.Test_Edit, "tid")
682701
@user_is_authorized(Cred_Mapping, Permissions.Credential_Delete, "ttid")
702+
@deprecated_view("Credential Manager")
683703
def delete_cred_test(request, tid, ttid):
684704
return delete_cred_controller(request, "view_test", tid, ttid)
685705

686706

687707
@user_is_authorized(Finding, Permissions.Finding_Edit, "fid")
688708
@user_is_authorized(Cred_Mapping, Permissions.Credential_Delete, "ttid")
709+
@deprecated_view("Credential Manager")
689710
def delete_cred_finding(request, fid, ttid):
690711
return delete_cred_controller(request, "view_finding", fid, ttid)

dojo/decorators.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from functools import wraps
44

55
from django.conf import settings
6+
from django.contrib import messages
67
from django.http import Http404
78
from django_ratelimit import UNSAFE
89
from django_ratelimit.core import is_ratelimited
@@ -162,6 +163,29 @@ def _wrapped(request, *args, **kw):
162163
return decorator
163164

164165

166+
def deprecated_view(feature_name, removal_version="2.59.0", removal_date="June 1, 2026"):
167+
"""
168+
Decorator that adds a deprecation warning message to a view.
169+
170+
Only adds the message on GET requests to avoid duplicate warnings
171+
when POST requests redirect.
172+
"""
173+
def decorator(func):
174+
@wraps(func)
175+
def _wrapped(request, *args, **kwargs):
176+
if request.method == "GET":
177+
messages.add_message(
178+
request,
179+
messages.WARNING,
180+
f"{feature_name} is deprecated and will be removed in DefectDojo v{removal_version} "
181+
f"({removal_date}). Please plan to migrate away from this feature.",
182+
extra_tags="alert-warning",
183+
)
184+
return func(request, *args, **kwargs)
185+
return _wrapped
186+
return decorator
187+
188+
165189
def require_v3_feature_set():
166190
"""Decorator that raises 404 if the V3_FEATURE_LOCATIONS is False."""
167191

dojo/finding/views.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
)
4040
from dojo.authorization.roles_permissions import Permissions
4141
from dojo.celery_dispatch import dojo_dispatch_task
42+
from dojo.decorators import deprecated_view
4243
from dojo.filters import (
4344
AcceptedFindingFilter,
4445
AcceptedFindingFilterWithoutObjectLookups,
@@ -2000,6 +2001,7 @@ def add_stub_finding(request, tid):
20002001

20012002

20022003
@user_is_authorized(Stub_Finding, Permissions.Finding_Delete, "fid")
2004+
@deprecated_view("Stub Findings")
20032005
def delete_stub_finding(request, fid):
20042006
finding = get_object_or_404(Stub_Finding, id=fid)
20052007

@@ -2026,6 +2028,7 @@ def delete_stub_finding(request, fid):
20262028

20272029

20282030
@user_is_authorized(Stub_Finding, Permissions.Finding_Edit, "fid")
2031+
@deprecated_view("Stub Findings")
20292032
def promote_to_finding(request, fid):
20302033
finding = get_object_or_404(Stub_Finding, id=fid)
20312034
test = finding.test

0 commit comments

Comments
 (0)