|
44 | 44 | from django.utils.html import format_html |
45 | 45 | from django.utils.translation import gettext_lazy as _ |
46 | 46 | from django.views.decorators.csrf import csrf_exempt |
| 47 | +from django.views.decorators.http import require_http_methods |
47 | 48 | from django.views.decorators.http import require_POST |
48 | 49 | from django.views.generic import DetailView |
49 | 50 | from django.views.generic import FormView |
@@ -947,11 +948,12 @@ def inject_scan_data(scancodeio, feature_grouped, dataspace_uuid): |
947 | 948 | for productpackage in productpackages: |
948 | 949 | if not isinstance(productpackage, ProductPackage): |
949 | 950 | continue |
950 | | - scan = scans_by_uri.get(productpackage.package.download_url) |
| 951 | + package = productpackage.package |
| 952 | + scan = scans_by_uri.get(package.download_url) |
951 | 953 | if scan: |
952 | 954 | scan["download_result_url"] = get_scan_results_as_file_url(scan) |
953 | 955 | scan["delete_url"] = reverse( |
954 | | - "component_catalog:scan_delete", args=[scan.get("uuid")] |
| 956 | + "product_portfolio:scan_delete_htmx", args=[scan.get("uuid"), package.uuid] |
955 | 957 | ) |
956 | 958 | productpackage.scan = scan |
957 | 959 | injected_productpackages.append(productpackage) |
@@ -2587,3 +2589,33 @@ def vulnerability_analysis_form_view(request, productpackage_uuid, vulnerability |
2587 | 2589 | rendered_form = render_crispy_form(form, context=csrf(request)) |
2588 | 2590 |
|
2589 | 2591 | return HttpResponse(rendered_form) |
| 2592 | + |
| 2593 | + |
| 2594 | +@login_required |
| 2595 | +@csrf_exempt |
| 2596 | +@require_http_methods(["DELETE"]) |
| 2597 | +def delete_scan_htmx_view(request, project_uuid, package_uuid): |
| 2598 | + template = "product_portfolio/tables/scan_action_cell.html" |
| 2599 | + dataspace = request.user.dataspace |
| 2600 | + package = get_object_or_404(Package, uuid=package_uuid, dataspace=dataspace) |
| 2601 | + |
| 2602 | + if not dataspace.enable_package_scanning: |
| 2603 | + raise Http404 |
| 2604 | + |
| 2605 | + scancodeio = ScanCodeIO(dataspace) |
| 2606 | + scan_list = scancodeio.fetch_scan_list(uuid=str(project_uuid)) |
| 2607 | + |
| 2608 | + if not scan_list or scan_list.get("count") != 1: |
| 2609 | + raise Http404("Scan not found.") |
| 2610 | + |
| 2611 | + scan_detail_url = scancodeio.get_scan_detail_url(project_uuid) |
| 2612 | + deleted = scancodeio.delete_scan(scan_detail_url) |
| 2613 | + |
| 2614 | + if not deleted: |
| 2615 | + raise Http404("Scan could not be deleted.") |
| 2616 | + |
| 2617 | + context = { |
| 2618 | + "package": package, |
| 2619 | + "user": request.user, |
| 2620 | + } |
| 2621 | + return render(request, template, context) |
0 commit comments