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 %}
-
-
- {% endif %}
-{% endfor %}
+
+
+
+
+ Mac Address |
+ Actions |
+
+
+
+ {% for device in unclaimed_devices %}
+ {% has_perm 'zezere.claim_device' user device as can_claim_device %}
+ {% if can_claim_device %}
+
+ {{ device.mac_address }} |
+
+
+ |
+
+
+ |
+
+ {% endif %}
+ {% endfor %}
+
+
+
{% 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):