60 lines
2.1 KiB
Python
60 lines
2.1 KiB
Python
from django.contrib.auth import authenticate, login, logout
|
|
from django.shortcuts import render, redirect
|
|
from yaml import serialize
|
|
from api.serializer import MyTokenObtainPairSerializer
|
|
from api.views import MyTokenObtainPairView
|
|
import medinf.settings
|
|
import logging
|
|
import medinf.ldap_backend
|
|
|
|
|
|
def navlogin(request):
|
|
log = logging.getLogger("medinf")
|
|
logout(request)
|
|
error = ""
|
|
if request.POST:
|
|
username = request.POST.get("username", "?")
|
|
password = request.POST.get("password", "?")
|
|
|
|
user = authenticate(username=username, password=password)
|
|
if user is not None:
|
|
if user.is_active:
|
|
login(request, user)
|
|
return redirect(medinf.settings.LOGIN_REDIRECT_URL)
|
|
else:
|
|
log.info("Inactive user {} tried to login".format(username))
|
|
error = "Ihre Benutzerkennung wurde deaktiviert."
|
|
else:
|
|
log.info("Login failed for {}".format(username))
|
|
error = "Benutzername oder Kennwort falsch."
|
|
context = {"error": error}
|
|
return render(request, "index.html", context)
|
|
|
|
|
|
################ New REST Token Auth #########################################
|
|
|
|
from rest_framework_simplejwt.tokens import RefreshToken
|
|
from rest_framework.views import APIView
|
|
from rest_framework.response import Response
|
|
from django.contrib.auth import authenticate
|
|
|
|
|
|
class AuthenticateView(APIView):
|
|
def post(self, request):
|
|
username = request.data.get("username")
|
|
password = request.data.get("password")
|
|
|
|
|
|
user = authenticate(request, username=username, password=password)
|
|
if user is not None:
|
|
login(request, user) #login the user in the backend
|
|
# refresh = RefreshToken.for_user(user)
|
|
serializer = MyTokenObtainPairSerializer(data={"username":username, "password":password})
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
token = serializer.validated_data
|
|
|
|
return Response(token)
|
|
|
|
return Response({"error": "Invalid credentials"}, status=400)
|