44 lines
1.7 KiB
Python
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')
|
|
|