all: implement black as code formatter
This commit is contained in:
@ -5,7 +5,7 @@ from django.apps import AppConfig
|
||||
class PassbookRecoveryConfig(AppConfig):
|
||||
"""passbook Recovery app config"""
|
||||
|
||||
name = 'passbook.recovery'
|
||||
label = 'passbook_recovery'
|
||||
verbose_name = 'passbook Recovery'
|
||||
mountpoint = 'recovery/'
|
||||
name = "passbook.recovery"
|
||||
label = "passbook_recovery"
|
||||
verbose_name = "passbook Recovery"
|
||||
mountpoint = "recovery/"
|
||||
|
||||
@ -17,30 +17,40 @@ LOGGER = get_logger()
|
||||
class Command(BaseCommand):
|
||||
"""Create Nonce used to recover access"""
|
||||
|
||||
help = _('Create a Key which can be used to restore access to passbook.')
|
||||
help = _("Create a Key which can be used to restore access to passbook.")
|
||||
|
||||
def add_arguments(self, parser):
|
||||
parser.add_argument('duration', default=1, action='store',
|
||||
help='How long the token is valid for (in years).')
|
||||
parser.add_argument('user', action='store',
|
||||
help='Which user the Token gives access to.')
|
||||
parser.add_argument(
|
||||
"duration",
|
||||
default=1,
|
||||
action="store",
|
||||
help="How long the token is valid for (in years).",
|
||||
)
|
||||
parser.add_argument(
|
||||
"user", action="store", help="Which user the Token gives access to."
|
||||
)
|
||||
|
||||
def get_url(self, nonce: Nonce) -> str:
|
||||
"""Get full recovery link"""
|
||||
path = reverse('passbook_recovery:use-nonce', kwargs={'uuid': str(nonce.uuid)})
|
||||
path = reverse("passbook_recovery:use-nonce", kwargs={"uuid": str(nonce.uuid)})
|
||||
return f"https://{CONFIG.y('domain')}{path}"
|
||||
|
||||
def handle(self, *args, **options):
|
||||
"""Create Nonce used to recover access"""
|
||||
duration = int(options.get('duration', 1))
|
||||
duration = int(options.get("duration", 1))
|
||||
delta = timedelta(days=duration * 365.2425)
|
||||
_now = now()
|
||||
expiry = _now + delta
|
||||
user = User.objects.get(username=options.get('user'))
|
||||
user = User.objects.get(username=options.get("user"))
|
||||
nonce = Nonce.objects.create(
|
||||
expires=expiry,
|
||||
user=user,
|
||||
description=f'Recovery Nonce generated by {getuser()} on {_now}')
|
||||
self.stdout.write((f"Store this link safely, as it will allow"
|
||||
f" anyone to access passbook as {user}."))
|
||||
description=f"Recovery Nonce generated by {getuser()} on {_now}",
|
||||
)
|
||||
self.stdout.write(
|
||||
(
|
||||
f"Store this link safely, as it will allow"
|
||||
f" anyone to access passbook as {user}."
|
||||
)
|
||||
)
|
||||
self.stdout.write(self.get_url(nonce))
|
||||
|
||||
@ -12,21 +12,22 @@ class TestRecovery(TestCase):
|
||||
"""recovery tests"""
|
||||
|
||||
def setUp(self):
|
||||
self.user = User.objects.create_user(
|
||||
username='recovery-test-user')
|
||||
self.user = User.objects.create_user(username="recovery-test-user")
|
||||
|
||||
def test_create_key(self):
|
||||
"""Test creation of a new key"""
|
||||
out = StringIO()
|
||||
self.assertEqual(len(Nonce.objects.all()), 0)
|
||||
call_command('create_recovery_key', '1', self.user.username, stdout=out)
|
||||
self.assertIn('https://localhost/recovery/use-nonce/', out.getvalue())
|
||||
call_command("create_recovery_key", "1", self.user.username, stdout=out)
|
||||
self.assertIn("https://localhost/recovery/use-nonce/", out.getvalue())
|
||||
self.assertEqual(len(Nonce.objects.all()), 1)
|
||||
|
||||
def test_recovery_view(self):
|
||||
"""Test recovery view"""
|
||||
out = StringIO()
|
||||
call_command('create_recovery_key', '1', self.user.username, stdout=out)
|
||||
call_command("create_recovery_key", "1", self.user.username, stdout=out)
|
||||
nonce = Nonce.objects.first()
|
||||
self.client.get(reverse('passbook_recovery:use-nonce', kwargs={'uuid': str(nonce.uuid)}))
|
||||
self.assertEqual(int(self.client.session['_auth_user_id']), nonce.user.pk)
|
||||
self.client.get(
|
||||
reverse("passbook_recovery:use-nonce", kwargs={"uuid": str(nonce.uuid)})
|
||||
)
|
||||
self.assertEqual(int(self.client.session["_auth_user_id"]), nonce.user.pk)
|
||||
|
||||
@ -5,5 +5,5 @@ from django.urls import path
|
||||
from passbook.recovery.views import UseNonceView
|
||||
|
||||
urlpatterns = [
|
||||
path('use-nonce/<uuid:uuid>/', UseNonceView.as_view(), name='use-nonce'),
|
||||
path("use-nonce/<uuid:uuid>/", UseNonceView.as_view(), name="use-nonce"),
|
||||
]
|
||||
|
||||
@ -18,7 +18,7 @@ class UseNonceView(View):
|
||||
if nonce.is_expired:
|
||||
nonce.delete()
|
||||
raise Http404
|
||||
login(request, nonce.user, backend='django.contrib.auth.backends.ModelBackend')
|
||||
login(request, nonce.user, backend="django.contrib.auth.backends.ModelBackend")
|
||||
nonce.delete()
|
||||
messages.warning(request, _("Used recovery-link to authenticate."))
|
||||
return redirect('passbook_core:overview')
|
||||
return redirect("passbook_core:overview")
|
||||
|
||||
Reference in New Issue
Block a user