miclave/users/views.py

44 lines
1.7 KiB
Python

from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth.hashers import make_password
from .forms import PasswordSelectionForm
from .password_utils import generate_random_password, generate_pronounceable_password, generate_passphrase
def generate_passwords(strategy):
if strategy == 'random':
return [generate_random_password() for _ in range(5)]
elif strategy == 'pronounceable':
return [generate_pronounceable_password() for _ in range(5)]
elif strategy == 'passphrase':
return [generate_passphrase() for _ in range(5)]
else:
return []
def select_password(request):
if request.method == 'POST' and 'generate' not in request.POST:
form = PasswordSelectionForm(request.POST)
if form.is_valid():
password = form.cleaned_data['password']
generated_passwords = request.session.get('generated_passwords', [])
if password not in generated_passwords:
form.add_error('password', 'Invalid password selected.')
else:
user = request.user
user.password = make_password(password)
user.save()
return redirect('success')
else:
strategy = request.GET.get('strategy', 'random')
passwords = generate_passwords(strategy)
request.session['generated_passwords'] = passwords # Store generated passwords in session
form = PasswordSelectionForm(passwords=passwords, initial={'strategy': strategy})
return render(request, 'users/select_password.html', {'form': form})
# @login_required
def success(request):
return render(request, 'users/success.html')