diff --git a/zezere/models.py b/zezere/models.py index 731113d..e1eafc3 100644 --- a/zezere/models.py +++ b/zezere/models.py @@ -158,6 +158,7 @@ class Meta: "delete": rules.owns_device, "provision": rules.owns_device, "claim": rules.can_claim, + "remove_unclaimed": rules.can_claim, } def __str__(self): diff --git a/zezere/templates/portal/claim.html b/zezere/templates/portal/claim.html index 7c30c33..0d7b2f1 100644 --- a/zezere/templates/portal/claim.html +++ b/zezere/templates/portal/claim.html @@ -6,20 +6,42 @@ {% block content %} {% if super %} -Unowned devices: +

Unowned devices:

{% else %} -Unowned devices from this IP address: +

Unowned devices from this IP address:

{% endif %} -{% for device in unclaimed_devices %} - {% has_perm 'zezere.claim_device' user device as can_claim_device %} - {% if can_claim_device %} -
- MAC address: {{ device.mac_address }} - {% csrf_token %} - - -
-
- {% endif %} -{% endfor %} +
+ + + + + + + + + {% for device in unclaimed_devices %} + {% has_perm 'zezere.claim_device' user device as can_claim_device %} + {% if can_claim_device %} + + + + + + {% endif %} + {% endfor %} + +
Mac AddressActions
{{ device.mac_address }} +
+ {% csrf_token %} + + +
+
+
+ {% csrf_token %} + + +
+
+
{% endblock %} diff --git a/zezere/urls.py b/zezere/urls.py index e9ea298..62fce52 100644 --- a/zezere/urls.py +++ b/zezere/urls.py @@ -22,6 +22,7 @@ # Portal path("portal/", views_portal.index, name="portal_index"), path("portal/claim/", views_portal.claim, name="portal_claim"), + path("portal/claim/remove/", views_portal.remove_unclaimed, name="portal_remove_unclamed"), path("portal/devices/", views_portal.devices, name="portal_devices"), path( "portal/devices/delete/", diff --git a/zezere/views_portal.py b/zezere/views_portal.py index 19ed12e..406a7ee 100644 --- a/zezere/views_portal.py +++ b/zezere/views_portal.py @@ -37,6 +37,18 @@ def claim(request): return render(request, "portal/claim.html", context) +@login_required +@require_POST +def remove_unclaimed(request): + device_id = request.POST.get("device_id") + device = get_object_or_404(Device, id=device_id) + if not request.user.has_perm(Device.get_perm("remove_unclaimed"), device): + raise PermissionDenied() + + device.delete() + return redirect("/portal/claim/") + + @login_required @require_POST def unclaim(request):