mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-10 04:50:16 +02:00
FAT uses ESI tokens to get character location/ship - closes #564 Pull corp memebrship data from ESI Additional permissions for non-api viewing. - migration to convert permissions from old users. Standardize EVE datasource responses. - allow different sources for EVE data types. Allow empty values for character alliance id and name Allow multiple corps and alliances to be considered 'members'
114 lines
4.7 KiB
Python
114 lines
4.7 KiB
Python
from __future__ import unicode_literals
|
|
from django.contrib.auth import login
|
|
from django.contrib.auth import logout
|
|
from django.contrib.auth import authenticate
|
|
from django.shortcuts import render, redirect
|
|
from django.contrib.auth.decorators import login_required
|
|
from eveonline.managers import EveManager
|
|
from eveonline.models import EveCharacter
|
|
from authentication.models import AuthServicesInfo
|
|
from authentication.forms import LoginForm, RegistrationForm
|
|
from django.contrib.auth.models import User
|
|
from django.contrib import messages
|
|
from esi.decorators import token_required
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def login_user(request):
|
|
logger.debug("login_user called by user %s" % request.user)
|
|
if request.method == 'POST':
|
|
form = LoginForm(request.POST)
|
|
logger.debug("Request of type POST, received form, valid: %s" % form.is_valid())
|
|
if form.is_valid():
|
|
user = authenticate(username=form.cleaned_data['username'], password=form.cleaned_data['password'])
|
|
logger.debug("Authentication attempt with supplied credentials. Received user %s" % user)
|
|
if user is not None:
|
|
if user.is_active:
|
|
logger.info("Successful login attempt from user %s" % user)
|
|
login(request, user)
|
|
redirect_to = request.POST.get('next', request.GET.get('next', ''))
|
|
if not redirect_to:
|
|
redirect_to = 'auth_dashboard'
|
|
return redirect(redirect_to)
|
|
else:
|
|
logger.info("Login attempt failed for user %s: user marked inactive." % user)
|
|
messages.warning(request, 'Your account has been disabled.')
|
|
else:
|
|
logger.info("Failed login attempt: provided username %s" % form.cleaned_data['username'])
|
|
messages.error(request, 'Username/password invalid.')
|
|
return render(request, 'public/login.html', context={'form': form})
|
|
else:
|
|
logger.debug("Providing new login form.")
|
|
form = LoginForm()
|
|
|
|
return render(request, 'public/login.html', context={'form': form})
|
|
|
|
|
|
def logout_user(request):
|
|
logger.debug("logout_user called by user %s" % request.user)
|
|
temp_user = request.user
|
|
logout(request)
|
|
logger.info("Successful logout for user %s" % temp_user)
|
|
return redirect("auth_index")
|
|
|
|
|
|
def register_user_view(request):
|
|
logger.debug("register_user_view called by user %s" % request.user)
|
|
if request.method == 'POST':
|
|
form = RegistrationForm(request.POST)
|
|
logger.debug("Request type POST contains form valid: %s" % form.is_valid())
|
|
if form.is_valid():
|
|
|
|
if not User.objects.filter(username=form.cleaned_data['username']).exists():
|
|
user = User.objects.create_user(form.cleaned_data['username'],
|
|
form.cleaned_data['email'], form.cleaned_data['password'])
|
|
|
|
user.save()
|
|
logger.info("Created new user %s" % user)
|
|
messages.warning(request, 'Add an API key to set up your account.')
|
|
return redirect("auth_dashboard")
|
|
|
|
else:
|
|
logger.error("Unable to register new user: username %s already exists." % form.cleaned_data['username'])
|
|
return render(request, 'public/register.html', context={'form': form, 'error': True})
|
|
else:
|
|
logger.debug("Registration form invalid. Returning for user %s to make corrections." % request.user)
|
|
|
|
else:
|
|
logger.debug("Returning blank registration form.")
|
|
form = RegistrationForm()
|
|
|
|
return render(request, 'public/register.html', context={'form': form})
|
|
|
|
|
|
def index_view(request):
|
|
logger.debug("index_view called by user %s" % request.user)
|
|
return render(request, 'public/index.html')
|
|
|
|
|
|
@login_required
|
|
def help_view(request):
|
|
logger.debug("help_view called by user %s" % request.user)
|
|
return render(request, 'registered/help.html')
|
|
|
|
|
|
@token_required(new=True)
|
|
def sso_login(request, token):
|
|
try:
|
|
char = EveCharacter.objects.get(character_id=token.character_id)
|
|
if char.user:
|
|
if char.user.is_active:
|
|
login(request, char.user)
|
|
token.user = char.user
|
|
token.save()
|
|
return redirect('auth_dashboard')
|
|
else:
|
|
messages.error(request, 'Your account has been disabled.')
|
|
else:
|
|
messages.warning(request, 'Authenticated character has no owning account. Please log in with username and password.')
|
|
except EveCharacter.DoesNotExist:
|
|
messages.error(request, 'No account exists with the authenticated character. Please create an account first.')
|
|
return redirect(login_user)
|