You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
3.4 KiB
101 lines
3.4 KiB
from django.contrib.auth import get_user_model
|
|
from django.contrib import auth
|
|
from django.shortcuts import redirect
|
|
from rest_framework.views import APIView
|
|
from rest_framework.renderers import JSONRenderer
|
|
from rest_framework.response import Response
|
|
|
|
from access.models import Invite
|
|
from access.serializers import UserInitSerializer
|
|
|
|
|
|
class TeacherListView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
status_code = 200
|
|
|
|
def get(self, request):
|
|
return Response([i.email for i in get_user_model().objects.filter(groups__name='teachers')], self.status_code)
|
|
|
|
|
|
class CheckUserView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
status_code = 200
|
|
|
|
def get(self, request):
|
|
if request.user.is_authenticated() and (request.user.is_staff or request.user.is_superuser):
|
|
return Response(True, status=self.status_code)
|
|
return Response(False, status=self.status_code)
|
|
|
|
|
|
class InfoUserView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
status_code = 200
|
|
|
|
def get(self, request):
|
|
if request.user.is_authenticated():
|
|
return Response(UserInitSerializer(request.user).data, status=self.status_code)
|
|
return Response('anonymous', status=self.status_code)
|
|
|
|
|
|
class RegistrationView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
|
|
@staticmethod
|
|
def get(request):
|
|
try:
|
|
invite = Invite.objects.get(hash=request.GET['hash'])
|
|
invite.owner.is_active = True
|
|
invite.owner.save()
|
|
auth.login(request, invite.owner)
|
|
invite.delete()
|
|
return redirect('/')
|
|
except Invite.DoesNotExist:
|
|
return Response('Приглошения не существует возможно оно сгорело', status=404)
|
|
|
|
@staticmethod
|
|
def post(request):
|
|
try:
|
|
get_user_model().objects.get(email=request.JSON['email'].lower())
|
|
return Response('user already exist', status=403)
|
|
except get_user_model().DoesNotExist:
|
|
user = get_user_model().objects.create_student(
|
|
email=request.JSON['email'].lower(),
|
|
password=request.JSON['password']
|
|
)
|
|
return Response(UserInitSerializer(user).data, status=200)
|
|
|
|
|
|
class ChangePasswordView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
|
|
@staticmethod
|
|
def post(request):
|
|
if request.user.is_authenticated() and not request.user.check_password(request.JSON['old_password']):
|
|
return Response("Неверный пароль", status=404)
|
|
request.user.set_password(request.JSON['new_password'])
|
|
request.user.save()
|
|
return Response("Пароль был изменён", status=200)
|
|
|
|
|
|
class LoginView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
|
|
@staticmethod
|
|
def post(request):
|
|
if not request.user.is_authenticated():
|
|
user = auth.authenticate(email=request.JSON.get('email'), password=request.JSON.get('password'))
|
|
try:
|
|
auth.login(request, user)
|
|
except AttributeError:
|
|
return Response("Неверный пароль", status=404)
|
|
return Response(UserInitSerializer(request.user).data, status=200)
|
|
|
|
|
|
class LogoutView(APIView):
|
|
renderer_classes = (JSONRenderer,)
|
|
|
|
@staticmethod
|
|
def post(request):
|
|
if request.user.is_authenticated():
|
|
auth.logout(request)
|
|
return Response(status=204) |