70 lines
2.1 KiB
Python
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') |