From 615df55b186cac51fb4330eea0e946d75adf191f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Vlastimil=20Z=C3=ADma?=
Date: Tue, 12 Dec 2017 16:47:27 +0100
Subject: Clean djopenid and run its tests
---
examples/djopenid/consumer/urls.py | 16 +++---
examples/djopenid/consumer/views.py | 25 ++++------
examples/djopenid/manage.py | 30 +++++++----
examples/djopenid/server/tests.py | 15 ++++--
examples/djopenid/server/urls.py | 23 +++++----
examples/djopenid/server/views.py | 69 ++++++++------------------
examples/djopenid/settings.py | 65 ++++--------------------
examples/djopenid/templates/index.html | 4 +-
examples/djopenid/templates/server/idPage.html | 4 +-
examples/djopenid/templates/server/index.html | 2 +-
examples/djopenid/templates/server/trust.html | 2 +-
examples/djopenid/urls.py | 15 +++---
examples/djopenid/util.py | 53 ++------------------
examples/djopenid/views.py | 15 ------
14 files changed, 111 insertions(+), 227 deletions(-)
delete mode 100644 examples/djopenid/views.py
(limited to 'examples')
diff --git a/examples/djopenid/consumer/urls.py b/examples/djopenid/consumer/urls.py
index 7190093..9b37b1a 100644
--- a/examples/djopenid/consumer/urls.py
+++ b/examples/djopenid/consumer/urls.py
@@ -1,8 +1,10 @@
-from django.conf.urls.defaults import patterns
+"""Consumer URLs."""
+from django.conf.urls import url
-urlpatterns = patterns(
- 'djopenid.consumer.views',
- (r'^$', 'startOpenID'),
- (r'^finish/$', 'finishOpenID'),
- (r'^xrds/$', 'rpXRDS'),
-)
+from djopenid.consumer.views import finishOpenID, rpXRDS, startOpenID
+
+urlpatterns = [
+ url(r'^$', startOpenID, name='index'),
+ url(r'^finish/$', finishOpenID, name='return_to'),
+ url(r'^xrds/$', rpXRDS, name='xrds'),
+]
diff --git a/examples/djopenid/consumer/views.py b/examples/djopenid/consumer/views.py
index bbc0ff8..c92208b 100644
--- a/examples/djopenid/consumer/views.py
+++ b/examples/djopenid/consumer/views.py
@@ -1,5 +1,6 @@
from django.http import HttpResponseRedirect
-from django.views.generic.simple import direct_to_template
+from django.shortcuts import render
+from django.urls import reverse
from openid.consumer import consumer
from openid.consumer.discover import DiscoveryFailure
@@ -36,12 +37,11 @@ def getConsumer(request):
def renderIndexPage(request, **template_args):
- template_args['consumer_url'] = util.getViewURL(request, startOpenID)
+ template_args['consumer_url'] = request.build_absolute_uri(reverse('consumer:index'))
template_args['pape_policies'] = POLICY_PAIRS
- response = direct_to_template(
- request, 'consumer/index.html', template_args)
- response[YADIS_HEADER_NAME] = util.getViewURL(request, rpXRDS)
+ response = render(request, 'consumer/index.html', template_args)
+ response[YADIS_HEADER_NAME] = request.build_absolute_uri(reverse('consumer:xrds'))
return response
@@ -114,8 +114,8 @@ def startOpenID(request):
# Compute the trust root and return URL values to build the
# redirect information.
- trust_root = util.getViewURL(request, startOpenID)
- return_to = util.getViewURL(request, finishOpenID)
+ trust_root = util.request.build_absolute_uri(reverse('consumer:index'))
+ return_to = util.request.build_absolute_uri(reverse('consumer:return_to'))
# Send the browser to the server either by sending a redirect
# URL or by generating a POST form.
@@ -130,8 +130,7 @@ def startOpenID(request):
form_id = 'openid_message'
form_html = auth_request.formMarkup(trust_root, return_to,
False, {'id': form_id})
- return direct_to_template(
- request, 'consumer/request_form.html', {'html': form_html})
+ return render(request, 'consumer/request_form.html', {'html': form_html})
return renderIndexPage(request)
@@ -159,7 +158,7 @@ def finishOpenID(request):
# Get a response object indicating the result of the OpenID
# protocol.
- return_to = util.getViewURL(request, finishOpenID)
+ return_to = request.build_absolute_uri(reverse('consumer:return_to'))
response = c.complete(request_args, return_to)
# Get a Simple Registration response object if response
@@ -218,7 +217,5 @@ def rpXRDS(request):
"""
Return a relying party verification XRDS document
"""
- return util.renderXRDS(
- request,
- [RP_RETURN_TO_URL_TYPE],
- [util.getViewURL(request, finishOpenID)])
+ return_to = request.build_absolute_uri(reverse('consumer:return_to'))
+ return util.renderXRDS(request, [RP_RETURN_TO_URL_TYPE], [return_to])
diff --git a/examples/djopenid/manage.py b/examples/djopenid/manage.py
index 45a1ee6..fb88042 100644
--- a/examples/djopenid/manage.py
+++ b/examples/djopenid/manage.py
@@ -1,14 +1,22 @@
#!/usr/bin/env python
-from django.core.management import execute_manager
-
-try:
- import settings # Assumed to be in the same directory.
-except ImportError:
- import sys
- sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've "
- "customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n(If "
- "the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
- sys.exit(1)
+import os
+import sys
if __name__ == "__main__":
- execute_manager(settings)
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "djopenid.settings")
+ try:
+ from django.core.management import execute_from_command_line
+ except ImportError:
+ # The above import may fail for some other reason. Ensure that the
+ # issue is really that Django is missing to avoid masking other
+ # exceptions on Python 2.
+ try:
+ import django # noqa: F401
+ except ImportError:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ )
+ raise
+ execute_from_command_line(sys.argv)
diff --git a/examples/djopenid/server/tests.py b/examples/djopenid/server/tests.py
index 6cae547..8d0b8de 100644
--- a/examples/djopenid/server/tests.py
+++ b/examples/djopenid/server/tests.py
@@ -1,7 +1,9 @@
+from urlparse import urljoin
-from django.contrib.sessions.middleware import SessionWrapper
+import django
from django.http import HttpRequest
from django.test.testcases import TestCase
+from django.urls import reverse
from openid.message import Message
from openid.server.server import CheckIDRequest
@@ -11,11 +13,14 @@ from openid.yadis.services import applyFilter
from .. import util
from ..server import views
+# Allow django tests to run through discover
+django.setup()
+
def dummyRequest():
request = HttpRequest()
- request.session = SessionWrapper("test")
- request.META['HTTP_HOST'] = 'example.invalid'
+ request.session = {}
+ request.META['HTTP_HOST'] = 'example.cz'
request.META['SERVER_PROTOCOL'] = 'HTTP'
return request
@@ -24,7 +29,7 @@ class TestProcessTrustResult(TestCase):
def setUp(self):
self.request = dummyRequest()
- id_url = util.getViewURL(self.request, views.idPage)
+ id_url = urljoin('http://example.cz/', reverse('server:local_id'))
# Set up the OpenID request we're responding to.
op_endpoint = 'http://127.0.0.1:8080/endpoint'
@@ -65,7 +70,7 @@ class TestShowDecidePage(TestCase):
def test_unreachableRealm(self):
self.request = dummyRequest()
- id_url = util.getViewURL(self.request, views.idPage)
+ id_url = urljoin('http://example.cz/', reverse('server:local_id'))
# Set up the OpenID request we're responding to.
op_endpoint = 'http://127.0.0.1:8080/endpoint'
diff --git a/examples/djopenid/server/urls.py b/examples/djopenid/server/urls.py
index 6763d85..2eff514 100644
--- a/examples/djopenid/server/urls.py
+++ b/examples/djopenid/server/urls.py
@@ -1,11 +1,14 @@
-from django.conf.urls.defaults import patterns
+"""Server URLs."""
+from django.conf.urls import url
+from django.views.generic import TemplateView
-urlpatterns = patterns(
- 'djopenid.server.views',
- (r'^$', 'server'),
- (r'^xrds/$', 'idpXrds'),
- (r'^processTrustResult/$', 'processTrustResult'),
- (r'^user/$', 'idPage'),
- (r'^endpoint/$', 'endpoint'),
- (r'^trust/$', 'trustPage'),
-)
+from djopenid.server.views import endpoint, idPage, idpXrds, processTrustResult, server
+
+urlpatterns = [
+ url(r'^$', server, name='index'),
+ url(r'^xrds/$', idpXrds, name='xrds'),
+ url(r'^user/$', idPage, name='local_id'),
+ url(r'^endpoint/$', endpoint, name='endpoint'),
+ url(r'^trust/$', TemplateView.as_view(template_name='server/trust.html'), name='confirmation'),
+ url(r'^processTrustResult/$', processTrustResult, name='process-confirmation'),
+]
diff --git a/examples/djopenid/server/views.py b/examples/djopenid/server/views.py
index bbb9468..0701ab3 100644
--- a/examples/djopenid/server/views.py
+++ b/examples/djopenid/server/views.py
@@ -18,7 +18,8 @@ Some code conventions used here:
import cgi
from django import http
-from django.views.generic.simple import direct_to_template
+from django.shortcuts import render
+from django.urls import reverse
from openid.consumer.discover import OPENID_IDP_2_0_TYPE
from openid.extensions import pape, sreg
@@ -28,7 +29,6 @@ from openid.server.trustroot import verifyReturnTo
from openid.yadis.discover import DiscoveryFailure
from .. import util
-from ..util import getViewURL
def getOpenIDStore():
@@ -43,7 +43,8 @@ def getServer(request):
"""
Get a Server object to perform OpenID authentication.
"""
- return Server(getOpenIDStore(), getViewURL(request, endpoint))
+ endpoint_url = request.build_absolute_uri(reverse('server:endpoint'))
+ return Server(getOpenIDStore(), endpoint_url)
def setRequest(request, openid_request):
@@ -67,12 +68,10 @@ def server(request):
"""
Respond to requests for the server's primary web page.
"""
- return direct_to_template(
- request,
- 'server/index.html',
- {'user_url': getViewURL(request, idPage),
- 'server_xrds_url': getViewURL(request, idpXrds),
- })
+ local_id = request.build_absolute_uri(reverse('server:local_id'))
+ server_xrds_url = request.build_absolute_uri(reverse('server:xrds'))
+ context = {'local_id': local_id, 'server_xrds_url': server_xrds_url}
+ return render(request, 'server/index.html', context)
def idpXrds(request):
@@ -80,29 +79,16 @@ def idpXrds(request):
Respond to requests for the IDP's XRDS document, which is used in
IDP-driven identifier selection.
"""
- return util.renderXRDS(
- request, [OPENID_IDP_2_0_TYPE], [getViewURL(request, endpoint)])
+ endpoint_url = request.build_absolute_uri(reverse('server:endpoint'))
+ return util.renderXRDS(request, [OPENID_IDP_2_0_TYPE], [endpoint_url])
def idPage(request):
"""
Serve the identity page for OpenID URLs.
"""
- return direct_to_template(
- request,
- 'server/idPage.html',
- {'server_url': getViewURL(request, endpoint)})
-
-
-def trustPage(request):
- """
- Display the trust page template, which allows the user to decide
- whether to approve the OpenID verification.
- """
- return direct_to_template(
- request,
- 'server/trust.html',
- {'trust_handler_url': getViewURL(request, processTrustResult)})
+ endpoint_url = request.build_absolute_uri(reverse('server:endpoint'))
+ return render(request, 'server/idPage.html', {'endpoint_url': endpoint_url})
def endpoint(request):
@@ -119,18 +105,12 @@ def endpoint(request):
openid_request = s.decodeRequest(query)
except ProtocolError as why:
# This means the incoming request was invalid.
- return direct_to_template(
- request,
- 'server/endpoint.html',
- {'error': str(why)})
+ return render(request, 'server/endpoint.html', {'error': str(why)})
# If we did not get a request, display text indicating that this
# is an endpoint.
if openid_request is None:
- return direct_to_template(
- request,
- 'server/endpoint.html',
- {})
+ return render(request, 'server/endpoint.html')
# We got a request; if the mode is checkid_*, we will handle it by
# getting feedback from the user or by checking the session.
@@ -157,7 +137,7 @@ def handleCheckIDRequest(request, openid_request):
# what URL should be sent.
if not openid_request.idSelect():
- id_url = getViewURL(request, idPage)
+ id_url = request.build_absolute_uri(reverse('server:local_id'))
# Confirm that this server can actually vouch for that
# identifier
@@ -204,14 +184,10 @@ def showDecidePage(request, openid_request):
pape_request = pape.Request.fromOpenIDRequest(openid_request)
- return direct_to_template(
- request,
- 'server/trust.html',
- {'trust_root': trust_root,
- 'trust_handler_url': getViewURL(request, processTrustResult),
- 'trust_root_valid': trust_root_valid,
- 'pape_request': pape_request,
- })
+ context = {'trust_root': trust_root,
+ 'trust_root_valid': trust_root_valid,
+ 'pape_request': pape_request}
+ return render(request, 'server/trust.html', context)
def processTrustResult(request):
@@ -224,7 +200,7 @@ def processTrustResult(request):
openid_request = getRequest(request)
# The identifier that this server can vouch for
- response_identity = getViewURL(request, idPage)
+ response_identity = request.build_absolute_uri(reverse('server:local_id'))
# If the decision was to allow the verification, respond
# accordingly.
@@ -274,10 +250,7 @@ def displayResponse(request, openid_response):
except EncodingError as why:
# If it couldn't be encoded, display an error.
text = why.response.encodeToKVForm()
- return direct_to_template(
- request,
- 'server/endpoint.html',
- {'error': cgi.escape(text)})
+ return render(request, 'server/endpoint.html', {'error': cgi.escape(text)})
# Construct the appropriate django framework response.
r = http.HttpResponse(webresponse.body)
diff --git a/examples/djopenid/settings.py b/examples/djopenid/settings.py
index 1ba3ff4..fc2a2b1 100644
--- a/examples/djopenid/settings.py
+++ b/examples/djopenid/settings.py
@@ -1,5 +1,4 @@
-# Django settings for djopenid project.
-
+"""Example Django settings for djopenid project."""
import os
import sys
import warnings
@@ -13,60 +12,26 @@ else:
del openid
DEBUG = True
-TEMPLATE_DEBUG = DEBUG
-
-ADMINS = (
- # ('Your Name', 'your_email@domain.com'),
-)
-
-MANAGERS = ADMINS
+ALLOWED_HOSTS = ['*']
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': '/tmp/test.db', # Or path to database file if using sqlite3.
- 'USER': '', # Not used with sqlite3.
- 'PASSWORD': '', # Not used with sqlite3.
- 'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '', # Set to empty string for default. Not used with sqlite3.
+ 'NAME': ':memory:',
}
}
-# Local time zone for this installation. All choices can be found here:
-# http://www.postgresql.org/docs/current/static/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE
-TIME_ZONE = 'America/Chicago'
-
-# Language code for this installation. All choices can be found here:
-# http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes
-# http://blogs.law.harvard.edu/tech/stories/storyReader$15
-LANGUAGE_CODE = 'en-us'
-
-SITE_ID = 1
-
-# Absolute path to the directory that holds media.
-# Example: "/home/media/media.lawrence.com/"
-MEDIA_ROOT = ''
-
-# URL that handles the media served from MEDIA_ROOT.
-# Example: "http://media.lawrence.com"
-MEDIA_URL = ''
-
-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
-# trailing slash.
-# Examples: "http://foo.com/media/", "/media/".
-ADMIN_MEDIA_PREFIX = '/media/'
-
-# Make this unique, and don't share it with anybody.
SECRET_KEY = 'u^bw6lmsa6fah0$^lz-ct$)y7x7#ag92-z+y45-8!(jk0lkavy'
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
- # 'django.template.loaders.eggs.load_template_source',
-)
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'DIRS': [os.path.abspath(os.path.join(os.path.dirname(__file__), 'templates'))],
+ 'APP_DIRS': True,
+ }
+]
-MIDDLEWARE_CLASSES = (
+MIDDLEWARE = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
@@ -75,16 +40,8 @@ MIDDLEWARE_CLASSES = (
ROOT_URLCONF = 'djopenid.urls'
-TEMPLATE_CONTEXT_PROCESSORS = ()
-
-TEMPLATE_DIRS = (
- os.path.abspath(os.path.join(os.path.dirname(__file__), 'templates')),
-)
-
INSTALLED_APPS = (
- 'django.contrib.contenttypes',
'django.contrib.sessions',
-
'djopenid.consumer',
'djopenid.server',
)
diff --git a/examples/djopenid/templates/index.html b/examples/djopenid/templates/index.html
index 62691ec..2757bfc 100644
--- a/examples/djopenid/templates/index.html
+++ b/examples/djopenid/templates/index.html
@@ -15,8 +15,8 @@
diff --git a/examples/djopenid/templates/server/idPage.html b/examples/djopenid/templates/server/idPage.html
index 06eb582..b63ea8f 100644
--- a/examples/djopenid/templates/server/idPage.html
+++ b/examples/djopenid/templates/server/idPage.html
@@ -3,8 +3,8 @@
{% block head %}
-
-
+
+
{% endblock %}
{% block body %}
diff --git a/examples/djopenid/templates/server/index.html b/examples/djopenid/templates/server/index.html
index 01108d0..8655ba9 100644
--- a/examples/djopenid/templates/server/index.html
+++ b/examples/djopenid/templates/server/index.html
@@ -41,7 +41,7 @@
application. The OpenID it serves is
-{{ user_url }}
+{{ local_id }}
diff --git a/examples/djopenid/templates/server/trust.html b/examples/djopenid/templates/server/trust.html
index 815ab85..ee098e2 100644
--- a/examples/djopenid/templates/server/trust.html
+++ b/examples/djopenid/templates/server/trust.html
@@ -39,7 +39,7 @@