Skip to content

Commit 2b1483f

Browse files
Updated the login logic for lawyers and applicants.
1 parent 6e7b60d commit 2b1483f

File tree

1 file changed

+60
-5
lines changed

1 file changed

+60
-5
lines changed

api/views.py

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -243,16 +243,71 @@ def create(self, request, *args, **kwargs):
243243
}, status=status.HTTP_201_CREATED)
244244

245245

246+
247+
from django.contrib.auth import authenticate
248+
from rest_framework.views import APIView
249+
from rest_framework.permissions import AllowAny
250+
from rest_framework.response import Response
251+
from rest_framework import status
252+
from rest_framework.authtoken.models import Token
253+
from django.contrib.auth import get_user_model
254+
from django.core.exceptions import ObjectDoesNotExist
255+
from users.models import LawyerProfile
256+
257+
User = get_user_model()
258+
259+
246260
class LoginView(APIView):
247261
permission_classes = [AllowAny]
248262

249263
def post(self, request):
264+
practice_number = request.data.get('practice_number')
250265
email = request.data.get('email') or request.data.get('username')
251266
password = request.data.get('password')
252-
user = authenticate(request, username=email, password=password)
253-
254-
if user is not None:
255-
token, created = Token.objects.get_or_create(user=user)
256-
return Response({'token': token.key, 'email': user.email})
267+
if not password:
268+
return Response({'error': 'Password is required'}, status=status.HTTP_400_BAD_REQUEST)
269+
270+
user = None
271+
if practice_number:
272+
try:
273+
lawyer_profile = LawyerProfile.objects.get(
274+
practice_number__iexact=practice_number.strip()
275+
)
276+
user = lawyer_profile.user
277+
if user.role != 'lawyer':
278+
user = None
279+
except LawyerProfile.DoesNotExist:
280+
user = None
281+
282+
if user and not user.check_password(password):
283+
user = None
284+
285+
286+
elif email:
287+
user = authenticate(request, username=email, password=password)
288+
if user and user.role == 'lawyer':
289+
user = None
290+
257291
else:
292+
return Response({
293+
'error': 'Either practice_number (for lawyers) or email/username (for applicants and lsk_admin) must be provided'
294+
}, status=status.HTTP_400_BAD_REQUEST)
295+
296+
297+
if user is None:
258298
return Response({'error': 'Invalid credentials'}, status=status.HTTP_401_UNAUTHORIZED)
299+
300+
301+
if user.role not in ['applicant', 'lawyer', 'lsk_admin']:
302+
return Response({'error': 'Unauthorized role'}, status=status.HTTP_403_FORBIDDEN)
303+
304+
305+
token, created = Token.objects.get_or_create(user=user)
306+
307+
return Response({
308+
'token': token.key,
309+
'email': user.email,
310+
'role': user.role,
311+
'first_name': user.first_name,
312+
'last_name': user.last_name,
313+
})

0 commit comments

Comments
 (0)