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.contrib.auth.models import User
|
||||||
from django.core.exceptions import ValidationError
|
from django.core.exceptions import ValidationError
|
||||||
from webui.models import BorgRepository
|
from webui.models import BorgRepository
|
||||||
|
from django.test import Client
|
||||||
|
|
||||||
|
|
||||||
class BorgRepositoryTestCase(TestCase):
|
class BorgRepositoryTestCase(TestCase):
|
||||||
|
|
@ -52,3 +53,38 @@ class BorgRepositoryTestCase(TestCase):
|
||||||
user=user,
|
user=user,
|
||||||
)
|
)
|
||||||
repo.full_clean()
|
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):
|
class Meta(UserCreationForm.Meta):
|
||||||
fields = ("username", "email")
|
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>
|
<button type="submit" class="navbar-item">Logout</button>
|
||||||
</form>
|
</form>
|
||||||
<a class="navbar-item" href="{% url 'password_change' %}">Change Password</a>
|
<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 %}
|
{% if user.is_staff %}
|
||||||
<hr class="navbar-divider">
|
<hr class="navbar-divider">
|
||||||
<a class="navbar-item" href="{% url 'admin:index' %}">Admin</a>
|
<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",
|
name="borg_delete",
|
||||||
),
|
),
|
||||||
path("register/", views.RegisterUserView.as_view(), name="register"),
|
path("register/", views.RegisterUserView.as_view(), name="register"),
|
||||||
|
path("delete/", views.DeleteUserView.as_view(), name="delete"),
|
||||||
path("imprint/", views.ImprintView.as_view(), name="imprint"),
|
path("imprint/", views.ImprintView.as_view(), name="imprint"),
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ from django.core.exceptions import ValidationError
|
||||||
import markdown2
|
import markdown2
|
||||||
|
|
||||||
from .models import BorgRepository, Voucher
|
from .models import BorgRepository, Voucher
|
||||||
from .forms import BorgRepositoryForm, RegisterUserForm
|
from .forms import BorgRepositoryForm, RegisterUserForm, DeleteUserForm
|
||||||
|
|
||||||
|
|
||||||
class UserOwnsRepositoryMixin(UserPassesTestMixin):
|
class UserOwnsRepositoryMixin(UserPassesTestMixin):
|
||||||
|
|
@ -70,6 +70,17 @@ class RegisterUserView(FormView):
|
||||||
return super().form_valid(form)
|
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):
|
class BorgRepositoryCreateView(LoginRequiredMixin, CreateView):
|
||||||
model = BorgRepository
|
model = BorgRepository
|
||||||
success_url = "/borg/"
|
success_url = "/borg/"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue