parent
16fe53cd32
commit
dc0149560c
6 changed files with 76 additions and 1 deletions
|
|
@ -2,6 +2,7 @@ from django.test import TestCase
|
|||
from django.contrib.auth.models import User
|
||||
from django.core.exceptions import ValidationError
|
||||
from webui.models import BorgRepository
|
||||
from django.test import Client
|
||||
|
||||
|
||||
class BorgRepositoryTestCase(TestCase):
|
||||
|
|
@ -52,3 +53,38 @@ class BorgRepositoryTestCase(TestCase):
|
|||
user=user,
|
||||
)
|
||||
repo.full_clean()
|
||||
|
||||
|
||||
class UserDeleteTestCase(TestCase):
|
||||
def test_user_delete(self):
|
||||
password = "12345"
|
||||
user = User.objects.create_user(username="deleteme", password=password)
|
||||
|
||||
self.assertEqual(
|
||||
BorgRepository.objects.filter(name="test_repo_for_deletion").count(), 0
|
||||
)
|
||||
|
||||
# create a repository
|
||||
BorgRepository.objects.create(
|
||||
name="test_repo_for_deletion",
|
||||
key="ssh-ed25519 lkjasdlkjaslkdjaslkjd",
|
||||
user=user,
|
||||
)
|
||||
|
||||
# create a session for the user
|
||||
c = Client()
|
||||
|
||||
# log in
|
||||
self.assertTrue(c.login(username=user.username, password=password))
|
||||
|
||||
# delete the account
|
||||
|
||||
response = c.post("/delete/", {"confirm": "on"}, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
# check that there is nothing left of the user
|
||||
self.assertEqual(User.objects.filter(username="deleteme").count(), 0)
|
||||
|
||||
self.assertEqual(
|
||||
BorgRepository.objects.filter(name="test_repo_for_deletion").count(), 0
|
||||
)
|
||||
|
|
|
|||
|
|
@ -38,3 +38,7 @@ class RegisterUserForm(UserCreationForm):
|
|||
|
||||
class Meta(UserCreationForm.Meta):
|
||||
fields = ("username", "email")
|
||||
|
||||
|
||||
class DeleteUserForm(forms.Form):
|
||||
confirm = forms.BooleanField(label="I want to delete my account")
|
||||
|
|
|
|||
|
|
@ -58,6 +58,7 @@
|
|||
<button type="submit" class="navbar-item">Logout</button>
|
||||
</form>
|
||||
<a class="navbar-item" href="{% url 'password_change' %}">Change Password</a>
|
||||
<a class="navbar-item" href="{% url 'delete' %}">Delete Account</a>
|
||||
{% if user.is_staff %}
|
||||
<hr class="navbar-divider">
|
||||
<a class="navbar-item" href="{% url 'admin:index' %}">Admin</a>
|
||||
|
|
|
|||
22
community_backup/webui/templates/delete.html
Normal file
22
community_backup/webui/templates/delete.html
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
{% extends "base.html" %}
|
||||
{% load crispy_forms_tags %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% if next %}
|
||||
{% if user.is_authenticated %}
|
||||
<p>Your account doesn't have access to this page. To proceed,
|
||||
please login with an account that has access.</p>
|
||||
{% else %}
|
||||
<p>Please login to see this page.</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<form method="post" action="{% url 'delete' %}">
|
||||
{% csrf_token %}
|
||||
{{ form|crispy }}
|
||||
<input class="button is-danger" type="submit" value="Delete Account">
|
||||
<input type="hidden" name="next" value="{{ next }}">
|
||||
</form>
|
||||
|
||||
{% endblock %}
|
||||
|
|
@ -17,5 +17,6 @@ urlpatterns = [
|
|||
name="borg_delete",
|
||||
),
|
||||
path("register/", views.RegisterUserView.as_view(), name="register"),
|
||||
path("delete/", views.DeleteUserView.as_view(), name="delete"),
|
||||
path("imprint/", views.ImprintView.as_view(), name="imprint"),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ from django.core.exceptions import ValidationError
|
|||
import markdown2
|
||||
|
||||
from .models import BorgRepository, Voucher
|
||||
from .forms import BorgRepositoryForm, RegisterUserForm
|
||||
from .forms import BorgRepositoryForm, RegisterUserForm, DeleteUserForm
|
||||
|
||||
|
||||
class UserOwnsRepositoryMixin(UserPassesTestMixin):
|
||||
|
|
@ -70,6 +70,17 @@ class RegisterUserView(FormView):
|
|||
return super().form_valid(form)
|
||||
|
||||
|
||||
class DeleteUserView(LoginRequiredMixin, FormView):
|
||||
template_name = "delete.html"
|
||||
form_class = DeleteUserForm
|
||||
success_url = "/"
|
||||
|
||||
def form_valid(self, form):
|
||||
user = self.request.user
|
||||
user.delete()
|
||||
return super().form_valid(form)
|
||||
|
||||
|
||||
class BorgRepositoryCreateView(LoginRequiredMixin, CreateView):
|
||||
model = BorgRepository
|
||||
success_url = "/borg/"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue