Commit 704baa74868c3cfe4ac0c153e0dd23fd756f5744

Authored by Zambom
1 parent 9fe3158f

Adding function to get function (Updates in requirements were made)

amadeus/settings.py
@@ -273,22 +273,6 @@ EMAIL_HOST_PASSWORD = 'amadeusteste' @@ -273,22 +273,6 @@ EMAIL_HOST_PASSWORD = 'amadeusteste'
273 # SMTP CONFIG 273 # SMTP CONFIG
274 # EMAIL_BACKEND = 'core.smtp.AmadeusEmailBackend' 274 # EMAIL_BACKEND = 'core.smtp.AmadeusEmailBackend'
275 275
276 -#API CONFIG STARTS  
277 -#TELL the rest framework to use a different backend  
278 -REST_FRAMEWORK = {  
279 - 'DEFAULT_AUTHENTICATION_CLASSES':(  
280 - 'oauth2_provider.ext.rest_framework.OAuth2Authentication',),  
281 - 'DEFAULT_PERMISSION_CLASSES':(  
282 - 'rest_framework.permissions.IsAuthenticated',),  
283 - 'PAGE_SIZE': 10, #pagination purposes  
284 -}  
285 -  
286 -OAUTH2_PROVIDER = {  
287 - 'SCOPES':{'read':'Read scope', 'write': 'Write scope'}  
288 -}  
289 -#API CONFIG ENDS  
290 -  
291 -  
292 #For date purposes 276 #For date purposes
293 DATE_INPUT_FORMATS.append('%d/%m/%y') 277 DATE_INPUT_FORMATS.append('%d/%m/%y')
294 DATE_INPUT_FORMATS.append('%m/%d/%y') 278 DATE_INPUT_FORMATS.append('%m/%d/%y')
@@ -314,7 +298,7 @@ S3DIRECT_DESTINATIONS = { @@ -314,7 +298,7 @@ S3DIRECT_DESTINATIONS = {
314 #TELL the rest framework to use a different backend 298 #TELL the rest framework to use a different backend
315 REST_FRAMEWORK = { 299 REST_FRAMEWORK = {
316 'DEFAULT_AUTHENTICATION_CLASSES':( 300 'DEFAULT_AUTHENTICATION_CLASSES':(
317 - 'oauth2_provider.ext.rest_framework.OAuth2Authentication',), 301 + 'oauth2_provider.contrib.rest_framework.OAuth2Authentication',),
318 'DEFAULT_PERMISSION_CLASSES':( 302 'DEFAULT_PERMISSION_CLASSES':(
319 'rest_framework.permissions.IsAuthenticated',), 303 'rest_framework.permissions.IsAuthenticated',),
320 'PAGE_SIZE': 10, #pagination purposes 304 'PAGE_SIZE': 10, #pagination purposes
@@ -9,11 +9,13 @@ from log.views import LogViewSet @@ -9,11 +9,13 @@ from log.views import LogViewSet
9 from . import views 9 from . import views
10 10
11 router = routers.DefaultRouter() 11 router = routers.DefaultRouter()
  12 +
12 router.register(r'logs', LogViewSet) 13 router.register(r'logs', LogViewSet)
13 router.register(r'usersapi', UserViewSet) 14 router.register(r'usersapi', UserViewSet)
  15 +router.register(r'users', views.LoginViewset)
14 16
15 urlpatterns = [ 17 urlpatterns = [
16 #API REST 18 #API REST
17 -  
18 url(r'^', include(router.urls)), 19 url(r'^', include(router.urls)),
  20 + url(r'^token', views.getToken),
19 ] 21 ]
20 \ No newline at end of file 22 \ No newline at end of file
1 -from django.shortcuts import render 1 +import requests
  2 +from django.shortcuts import get_object_or_404, reverse
  3 +from django.contrib.auth import authenticate
  4 +from rest_framework import viewsets
  5 +from rest_framework.response import Response
  6 +from rest_framework.decorators import detail_route
  7 +from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
2 8
  9 +from security.models import Security
  10 +
  11 +from users.serializers import UserSerializer
  12 +from users.models import User
  13 +
  14 +from oauth2_provider.views.generic import ProtectedResourceView
  15 +from oauth2_provider.models import Application
  16 +from django.http import HttpResponse
  17 +
  18 +class LoginViewset(viewsets.ReadOnlyModelViewSet):
  19 + queryset = User.objects.all()
  20 + security = Security.objects.get(id = 1)
  21 + permissions_classes = (IsAuthenticatedOrReadOnly,)
  22 +
  23 + @detail_route(methods = ['post'])
  24 + def login(self, request):
  25 + username = request.DATA['email']
  26 + password = request.DATA['password']
  27 + user = authenticate(username = username, password = password)
  28 +
  29 + if user is not None:
  30 + if not security.maintence or user.is_staff:
  31 + serializer = UserSerializer(user)
  32 +
  33 + return Response(serializer.data)
  34 +
  35 + return Response()
  36 +
  37 +def getToken(request):
  38 + oauth = Application.objects.filter(name = "amadeus-droid")
  39 +
  40 + response = ""
  41 +
  42 + if request.POST:
  43 + username = request.POST['email']
  44 + password = request.POST['password']
  45 +
  46 + user = authenticate(username = username, password = password)
  47 +
  48 + if user is not None:
  49 + if not security.maintence or user.is_staff:
  50 + if oauth.count() > 0:
  51 + oauth = oauth[0]
  52 +
  53 + data = {
  54 + "grant_type": "password",
  55 + "username": username,
  56 + "password": password
  57 + }
  58 +
  59 + auth = (oauth.client_id, oauth.client_secret)
  60 +
  61 + response = requests.post(request.build_absolute_uri(reverse('oauth2_provider:token')), data = data, auth = auth)
  62 +
  63 + return HttpResponse(response)
3 \ No newline at end of file 64 \ No newline at end of file
requirements.txt
@@ -20,7 +20,7 @@ django-crontab==0.7.1 @@ -20,7 +20,7 @@ django-crontab==0.7.1
20 django-discover-runner==1.0 20 django-discover-runner==1.0
21 django-floppyforms==1.7.0 21 django-floppyforms==1.7.0
22 django-modalview==0.1.5 22 django-modalview==0.1.5
23 -django-oauth-toolkit==0.10.0 23 +django-oauth-toolkit==1.0.0
24 django-role-permissions==1.2.1 24 django-role-permissions==1.2.1
25 django-s3direct==0.4.2 25 django-s3direct==0.4.2
26 django-session-security==2.4.0 26 django-session-security==2.4.0
@@ -38,7 +38,7 @@ lxml==3.6.4 @@ -38,7 +38,7 @@ lxml==3.6.4
38 MarkupSafe==0.23 38 MarkupSafe==0.23
39 msgpack-python==0.4.8 39 msgpack-python==0.4.8
40 numpy==1.12.1 40 numpy==1.12.1
41 -oauthlib==1.0.3 41 +oauthlib==2.0.1
42 openpyxl==2.4.5 42 openpyxl==2.4.5
43 pandas==0.19.2 43 pandas==0.19.2
44 Pillow==3.3.1 44 Pillow==3.3.1
@@ -47,7 +47,7 @@ pycpfcnpj==1.0.2 @@ -47,7 +47,7 @@ pycpfcnpj==1.0.2
47 python-dateutil==2.6.0 47 python-dateutil==2.6.0
48 pytz==2016.10 48 pytz==2016.10
49 redis==2.10.5 49 redis==2.10.5
50 -requests==2.11.1 50 +requests==2.13.0
51 six==1.10.0 51 six==1.10.0
52 slugify==0.0.1 52 slugify==0.0.1
53 Twisted==16.6.0 53 Twisted==16.6.0
users/views.py
@@ -40,6 +40,8 @@ import os @@ -40,6 +40,8 @@ import os
40 from rest_framework import viewsets 40 from rest_framework import viewsets
41 from .serializers import UserSerializer 41 from .serializers import UserSerializer
42 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly 42 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly
  43 +from oauth2_provider.contrib.rest_framework.authentication import OAuth2Authentication
  44 +from oauth2_provider.contrib.rest_framework.permissions import IsAuthenticatedOrTokenHasScope
43 45
44 # ================ ADMIN ======================= 46 # ================ ADMIN =======================
45 class UsersListView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequiredMixin, generic.ListView): 47 class UsersListView(braces_mixins.LoginRequiredMixin, braces_mixins.StaffuserRequiredMixin, generic.ListView):
@@ -572,4 +574,5 @@ def logout(request, next_page = None): @@ -572,4 +574,5 @@ def logout(request, next_page = None):
572 class UserViewSet(viewsets.ModelViewSet): 574 class UserViewSet(viewsets.ModelViewSet):
573 queryset = User.objects.all() 575 queryset = User.objects.all()
574 serializer_class = UserSerializer 576 serializer_class = UserSerializer
575 - permissions_classes = (IsAuthenticatedOrReadOnly,) 577 + authentication_classes = [OAuth2Authentication]
  578 + permissions_classes = (IsAuthenticatedOrTokenHasScope,)