stat part 1

remotes/origin/jwt_auth
Andrey 8 years ago
parent b1fd168302
commit 302622b675
  1. 7
      access/urls.py
  2. 2
      access/views.py
  3. 2
      api_v1/urls.py
  4. 42
      lms/settings.py
  5. 3
      lms/urls.py
  6. 25
      lms/utils.py
  7. 1
      requirements.txt

@ -1,7 +1,8 @@
from django.conf.urls import url from django.conf.urls import url, include
import progress.views import progress.views
from access import views from access import views
from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token
urlpatterns = [ urlpatterns = [
url(r'progress_detail/(?P<token>[0-9A-Fa-f-]+)/$', progress.views.CourseProgressUserView.as_view()), url(r'progress_detail/(?P<token>[0-9A-Fa-f-]+)/$', progress.views.CourseProgressUserView.as_view()),
@ -12,7 +13,9 @@ urlpatterns = [
url(r'find/$', views.FindUserView.as_view()), url(r'find/$', views.FindUserView.as_view()),
url(r'registration/$', views.RegistrationView.as_view()), url(r'registration/$', views.RegistrationView.as_view()),
url(r'change_password/$', views.ChangePasswordView.as_view()), url(r'change_password/$', views.ChangePasswordView.as_view()),
url(r'login/$', views.LoginView.as_view(), name='login'), url(r'^login/', obtain_jwt_token),
url(r'^token-refresh/', refresh_jwt_token),
# url(r'login/$', views.LoginView.as_view(), name='login'),
url(r'logout/$', views.LogoutView.as_view()), url(r'logout/$', views.LogoutView.as_view()),
url(r'reset/$', views.ResetPasswordView.as_view()), url(r'reset/$', views.ResetPasswordView.as_view()),
url(r'progress_detail/upload/(?P<token>[0-9A-Fa-f-]+)/$', progress.views.UploadCourseProgressUserView.as_view()), url(r'progress_detail/upload/(?P<token>[0-9A-Fa-f-]+)/$', progress.views.UploadCourseProgressUserView.as_view()),

@ -128,7 +128,7 @@ class FindUserView(APIView):
class DetailUserView(APIView): class DetailUserView(APIView):
renderer_classes = (JSONRenderer,) renderer_classes = (JSONRenderer,)
permission_classes = (permissions.IsAuthenticated,) # permission_classes = (permissions.IsAuthenticated,)
@staticmethod @staticmethod
def post(request, out_key=None): def post(request, out_key=None):

@ -10,5 +10,5 @@ urlpatterns = [
url(r'finance/', include('finance.urls')), url(r'finance/', include('finance.urls')),
url(r'storage/', include('storage.urls')), url(r'storage/', include('storage.urls')),
url(r'progress/', include('progress.urls')), url(r'progress/', include('progress.urls')),
url(r'^docs/$', schema_view, name='api-docs'), # url(r'^docs/$', schema_view, name='api-docs'),
] ]

@ -1,6 +1,7 @@
# coding=utf-8 # coding=utf-8
import os import os
import datetime
import raven import raven
import environ import environ
import socket import socket
@ -130,9 +131,9 @@ REST_FRAMEWORK = {
'rest_framework.authentication.SessionAuthentication', 'rest_framework.authentication.SessionAuthentication',
), ),
'DEFAULT_PARSER_CLASSES': [ 'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.FormParser', 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.parsers.MultiPartParser', 'rest_framework.authentication.SessionAuthentication',
'rest_framework.parsers.JSONParser', 'rest_framework.authentication.BasicAuthentication',
], ],
} }
@ -257,6 +258,41 @@ LOGGING = {
}, },
} }
JWT_AUTH = {
'JWT_ENCODE_HANDLER':
'rest_framework_jwt.utils.jwt_encode_handler',
'JWT_DECODE_HANDLER':
'rest_framework_jwt.utils.jwt_decode_handler',
'JWT_PAYLOAD_HANDLER':
'lms.utils.custom_jwt_payload_handler',
'JWT_PAYLOAD_GET_USER_ID_HANDLER':
'rest_framework_jwt.utils.jwt_get_user_id_from_payload_handler',
'JWT_RESPONSE_PAYLOAD_HANDLER':
'rest_framework_jwt.utils.jwt_response_payload_handler',
'JWT_SECRET_KEY': SECRET_KEY,
'JWT_GET_USER_SECRET_KEY': None,
'JWT_PUBLIC_KEY': None,
'JWT_PRIVATE_KEY': None,
'JWT_ALGORITHM': 'HS256',
'JWT_VERIFY': True,
'JWT_VERIFY_EXPIRATION': True,
'JWT_LEEWAY': 0,
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=300),
'JWT_AUDIENCE': 'Skillbox_Login',
'JWT_ISSUER': 'LMS',
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
'JWT_AUTH_HEADER_PREFIX': 'JWT',
'JWT_AUTH_COOKIE': 'skillbox_token',
}
# Configure loggers for all local apps # Configure loggers for all local apps
LOCAL_APPS_LOGGERS = {} LOCAL_APPS_LOGGERS = {}
for app in apps: for app in apps:

@ -12,7 +12,6 @@ urlpatterns = [
url(r'^static/(?P<path>.*)/$', serve, {'document_root': settings.STATIC_ROOT}), url(r'^static/(?P<path>.*)/$', serve, {'document_root': settings.STATIC_ROOT}),
url(r'^wallet/pay/check/$', YandexCheckView.as_view(), name='yandex_money_check'), url(r'^wallet/pay/check/$', YandexCheckView.as_view(), name='yandex_money_check'),
url(r'^wallet/pay/result/$', YandexAvisoView.as_view(), name='yandex_money_notice'), url(r'^wallet/pay/result/$', YandexAvisoView.as_view(), name='yandex_money_notice'),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^yandex-money/check/$', DemoYandexCheckView.as_view()), url(r'^yandex-money/check/$', DemoYandexCheckView.as_view()),
url(r'^yandex-money/aviso/$', DemoYandexAvisoView.as_view()) url(r'^yandex-money/aviso/$', DemoYandexAvisoView.as_view()),
] ]

@ -0,0 +1,25 @@
from datetime import datetime
from calendar import timegm
from rest_framework_jwt.settings import api_settings
def custom_jwt_payload_handler(user):
payload = {
'exp': datetime.utcnow() + api_settings.JWT_EXPIRATION_DELTA,
'out_key': str(user.out_key),
'email': user.email,
}
if api_settings.JWT_ALLOW_REFRESH:
payload['orig_iat'] = timegm(
datetime.utcnow().utctimetuple()
)
if api_settings.JWT_AUDIENCE is not None:
payload['aud'] = api_settings.JWT_AUDIENCE
if api_settings.JWT_ISSUER is not None:
payload['iss'] = api_settings.JWT_ISSUER
return payload

@ -18,6 +18,7 @@ Unidecode==0.4.21
PyJWT==1.5.3 PyJWT==1.5.3
dicttoxml==1.7.4 dicttoxml==1.7.4
gunicorn==19.7.1 gunicorn==19.7.1
djangorestframework-jwt-1.11.0
# testing # testing
flake8==3.5.0 flake8==3.5.0

Loading…
Cancel
Save