Files
NoN-Site/nonpacks/profiles/views.py
T
2026-08-03 10:39:19 -05:00

70 lines
2.1 KiB
Python

import secrets
from django.contrib import messages
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.shortcuts import redirect, render
from .models import ApiToken, UserProfile
def register(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
user = form.save()
UserProfile.objects.get_or_create(user=user)
login(request, user)
messages.success(request, 'Registration successful.')
return redirect('home')
else:
form = UserCreationForm()
return render(request, 'profiles/register.html', {'form': form})
def user_login(request):
if request.method == 'POST':
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
return redirect('home')
else:
form = AuthenticationForm(request)
return render(request, 'profiles/login.html', {'form': form})
def user_logout(request):
if request.method == 'POST':
logout(request)
return redirect('home')
return redirect('home')
@login_required
def settings_page(request):
tokens = request.user.api_tokens.all()
context = {'tokens': tokens}
return render(request, 'profiles/settings.html', context)
@login_required
def token_create(request):
if request.method == 'POST':
label = request.POST.get('label', '').strip() or 'API token'
token = secrets.token_urlsafe(48)
ApiToken.objects.create(
user=request.user,
token=token,
key_prefix=token[:8],
label=label,
)
messages.success(request, 'Token created.')
return redirect('profiles:settings')
@login_required
def token_delete(request, token_id):
ApiToken.objects.filter(id=token_id, user=request.user).delete()
return redirect('profiles:settings')