Update project to support Django 2.0

This commit is contained in:
Allisson Azevedo 2018-02-01 14:00:57 -03:00
parent f052f694c9
commit 795ac32257
17 changed files with 80 additions and 42 deletions

View file

@ -10,8 +10,11 @@ env:
- DJANGO=1.9 - DJANGO=1.9
- DJANGO=1.10 - DJANGO=1.10
- DJANGO=1.11 - DJANGO=1.11
- DJANGO=2.0
matrix: matrix:
exclude: exclude:
- python: "2.7"
env: DJANGO=2.0
- python: "3.5" - python: "3.5"
env: DJANGO=1.7 env: DJANGO=1.7
- python: "3.6" - python: "3.6"

View file

@ -2,8 +2,10 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
### [Unreleased] ### [0.5.3] - 2018-02-01
##### Fixed
- Update project to support Django 2.0
### [0.5.2] - 2017-08-22 ### [0.5.2] - 2017-08-22
@ -11,7 +13,6 @@ All notable changes to this project will be documented in this file.
- Fix infinite login loop if "prompt=login" (#198) - Fix infinite login loop if "prompt=login" (#198)
- Fix Django 2.0 deprecation warnings (#185) - Fix Django 2.0 deprecation warnings (#185)
### [0.5.1] - 2017-07-11 ### [0.5.1] - 2017-07-11
##### Changed ##### Changed

View file

@ -29,11 +29,11 @@ MIDDLEWARE_CLASSES = [
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware', 'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware',
'oidc_provider.middleware.SessionManagementMiddleware', 'oidc_provider.middleware.SessionManagementMiddleware',
] ]
MIDDLEWARE = MIDDLEWARE_CLASSES
TEMPLATES = [ TEMPLATES = [
{ {

View file

@ -1,15 +1,16 @@
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from django.conf.urls import include, url try:
from django.urls import include, url
except ImportError:
from django.conf.urls import include, url
from django.contrib import admin from django.contrib import admin
from django.views.generic import TemplateView from django.views.generic import TemplateView
urlpatterns = [ urlpatterns = [
url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'), url(r'^$', TemplateView.as_view(template_name='home.html'), name='home'),
url(r'^accounts/login/$', auth_views.login, { 'template_name': 'login.html' }, name='login'), url(r'^accounts/login/$', auth_views.login, {'template_name': 'login.html'}, name='login'),
url(r'^accounts/logout/$', auth_views.logout, { 'next_page': '/' }, name='logout'), url(r'^accounts/logout/$', auth_views.logout, {'next_page': '/'}, name='logout'),
url(r'^', include('oidc_provider.urls', namespace='oidc_provider')), url(r'^', include('oidc_provider.urls', namespace='oidc_provider')),
url(r'^admin/', admin.site.urls),
url(r'^admin/', include(admin.site.urls)),
] ]

5
oidc_provider/compat.py Normal file
View file

@ -0,0 +1,5 @@
def get_attr_or_callable(obj, name):
target = getattr(obj, name)
if callable(target):
return target()
return target

View file

@ -1,5 +1,8 @@
from django.contrib.auth import views as auth_views from django.contrib.auth import views as auth_views
from django.conf.urls import include, url try:
from django.urls import include, url
except ImportError:
from django.conf.urls import include, url
from django.contrib import admin from django.contrib import admin
from django.views.generic import TemplateView from django.views.generic import TemplateView
@ -11,5 +14,5 @@ urlpatterns = [
url(r'^openid/', include('oidc_provider.urls', namespace='oidc_provider')), url(r'^openid/', include('oidc_provider.urls', namespace='oidc_provider')),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', admin.site.urls),
] ]

View file

@ -13,7 +13,10 @@ from mock import patch, mock
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.core.management import call_command from django.core.management import call_command
from django.core.urlresolvers import reverse try:
from django.urls import reverse
except ImportError:
from django.core.urlresolvers import reverse
from django.test import ( from django.test import (
RequestFactory, RequestFactory,
override_settings, override_settings,

View file

@ -1,5 +1,8 @@
from django.core.management import call_command from django.core.management import call_command
from django.core.urlresolvers import reverse try:
from django.urls import reverse
except ImportError:
from django.core.urlresolvers import reverse
from django.test import TestCase from django.test import TestCase
from oidc_provider.lib.utils.token import ( from oidc_provider.lib.utils.token import (
@ -51,4 +54,3 @@ class EndSessionTestCase(TestCase):
self.client.get(self.url) self.client.get(self.url)
self.assertTrue(hook_function.called, 'OIDC_AFTER_END_SESSION_HOOK should be called') self.assertTrue(hook_function.called, 'OIDC_AFTER_END_SESSION_HOOK should be called')
self.assertTrue(hook_function.call_count == 1, 'OIDC_AFTER_END_SESSION_HOOK should be called once but was {}'.format(hook_function.call_count)) self.assertTrue(hook_function.call_count == 1, 'OIDC_AFTER_END_SESSION_HOOK should be called once but was {}'.format(hook_function.call_count))

View file

@ -1,4 +1,7 @@
from django.conf.urls import url try:
from django.urls import url
except ImportError:
from django.conf.urls import url
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
from django.views.generic import View from django.views.generic import View
from mock import mock from mock import mock

View file

@ -1,4 +1,7 @@
from django.core.urlresolvers import reverse try:
from django.urls import reverse
except ImportError:
from django.core.urlresolvers import reverse
from django.test import RequestFactory from django.test import RequestFactory
from django.test import TestCase from django.test import TestCase

View file

@ -9,7 +9,10 @@ except ImportError:
from urllib import urlencode from urllib import urlencode
from django.core.management import call_command from django.core.management import call_command
from django.core.urlresolvers import reverse try:
from django.urls import reverse
except ImportError:
from django.core.urlresolvers import reverse
from django.test import ( from django.test import (
RequestFactory, RequestFactory,
override_settings, override_settings,

View file

@ -6,7 +6,10 @@ try:
except ImportError: except ImportError:
from urllib import urlencode from urllib import urlencode
from django.core.urlresolvers import reverse try:
from django.urls import reverse
except ImportError:
from django.core.urlresolvers import reverse
from django.test import RequestFactory from django.test import RequestFactory
from django.test import TestCase from django.test import TestCase
from django.utils import timezone from django.utils import timezone

View file

@ -1,4 +1,7 @@
from django.conf.urls import url try:
from django.urls import url
except ImportError:
from django.conf.urls import url
from django.views.decorators.csrf import csrf_exempt from django.views.decorators.csrf import csrf_exempt
from oidc_provider import ( from oidc_provider import (

View file

@ -11,13 +11,10 @@ from django.contrib.auth.views import (
redirect_to_login, redirect_to_login,
logout, logout,
) )
try:
import django
if django.VERSION >= (1, 11):
from django.urls import reverse from django.urls import reverse
else: except ImportError:
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.contrib.auth import logout as django_user_logout from django.contrib.auth import logout as django_user_logout
from django.http import JsonResponse from django.http import JsonResponse
from django.shortcuts import render from django.shortcuts import render
@ -28,6 +25,7 @@ from django.views.decorators.http import require_http_methods
from django.views.generic import View from django.views.generic import View
from jwkest import long_to_base64 from jwkest import long_to_base64
from oidc_provider.compat import get_attr_or_callable
from oidc_provider.lib.claims import StandardScopeClaims from oidc_provider.lib.claims import StandardScopeClaims
from oidc_provider.lib.endpoints.authorize import AuthorizeEndpoint from oidc_provider.lib.endpoints.authorize import AuthorizeEndpoint
from oidc_provider.lib.endpoints.token import TokenEndpoint from oidc_provider.lib.endpoints.token import TokenEndpoint
@ -65,7 +63,7 @@ class AuthorizeView(View):
try: try:
authorize.validate_params() authorize.validate_params()
if request.user.is_authenticated(): if get_attr_or_callable(request.user, 'is_authenticated'):
# Check if there's a hook setted. # Check if there's a hook setted.
hook_resp = settings.get('OIDC_AFTER_USERLOGIN_HOOK', import_str=True)( hook_resp = settings.get('OIDC_AFTER_USERLOGIN_HOOK', import_str=True)(
request=request, user=request.user, request=request, user=request.user,

View file

@ -9,24 +9,30 @@ from django.conf import settings
DEFAULT_SETTINGS = dict( DEFAULT_SETTINGS = dict(
DEBUG = False, DEBUG=False,
DATABASES = { DATABASES={
'default': { 'default': {
'ENGINE': 'django.db.backends.sqlite3', 'ENGINE': 'django.db.backends.sqlite3',
'NAME': ':memory:', 'NAME': ':memory:',
} }
}, },
SITE_ID = 1, SITE_ID=1,
MIDDLEWARE_CLASSES = [ MIDDLEWARE_CLASSES=[
'django.middleware.common.CommonMiddleware', 'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware',
], ],
TEMPLATES = [ MIDDLEWARE=[
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
],
TEMPLATES=[
{ {
'BACKEND': 'django.template.backends.django.DjangoTemplates', 'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], 'DIRS': [],
@ -42,7 +48,7 @@ DEFAULT_SETTINGS = dict(
}, },
], ],
LOGGING = { LOGGING={
'version': 1, 'version': 1,
'disable_existing_loggers': False, 'disable_existing_loggers': False,
'handlers': { 'handlers': {
@ -58,7 +64,7 @@ DEFAULT_SETTINGS = dict(
}, },
}, },
INSTALLED_APPS = [ INSTALLED_APPS=[
'django.contrib.auth', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.contenttypes',
'django.contrib.sessions', 'django.contrib.sessions',
@ -68,20 +74,20 @@ DEFAULT_SETTINGS = dict(
'oidc_provider', 'oidc_provider',
], ],
SECRET_KEY = 'this-should-be-top-secret', SECRET_KEY='this-should-be-top-secret',
ROOT_URLCONF = 'oidc_provider.tests.app.urls', ROOT_URLCONF='oidc_provider.tests.app.urls',
TEMPLATE_DIRS = [ TEMPLATE_DIRS=[
'oidc_provider/tests/templates', 'oidc_provider/tests/templates',
], ],
USE_TZ = True, USE_TZ=True,
# OIDC Provider settings. # OIDC Provider settings.
SITE_URL = 'http://localhost:8000', SITE_URL='http://localhost:8000',
OIDC_USERINFO = 'oidc_provider.tests.app.utils.userinfo', OIDC_USERINFO='oidc_provider.tests.app.utils.userinfo',
) )

View file

@ -10,7 +10,7 @@ os.chdir(os.path.normpath(os.path.join(os.path.abspath(__file__), os.pardir)))
setup( setup(
name='django-oidc-provider', name='django-oidc-provider',
version='0.5.2', version='0.5.3',
packages=find_packages(), packages=find_packages(),
include_package_data=True, include_package_data=True,
license='MIT License', license='MIT License',

View file

@ -3,9 +3,9 @@
envlist= envlist=
clean, clean,
py27-django{17,18,19,110,111}, py27-django{17,18,19,110,111},
py34-django{17,18,19,110,111}, py34-django{17,18,19,110,111,20},
py35-django{18,19,110,111}, py35-django{18,19,110,111,20},
py36-django{18,19,110,111}, py36-django{18,19,110,111,20},
[testenv] [testenv]
@ -15,6 +15,7 @@ deps =
django19: django>=1.9,<1.10 django19: django>=1.9,<1.10
django110: django>=1.10,<1.11 django110: django>=1.10,<1.11
django111: django>=1.11,<1.12 django111: django>=1.11,<1.12
django20: django>=2.0,<2.1
coverage coverage
mock mock