Change name of the package.
This commit is contained in:
parent
a88a3567c3
commit
2bac30361e
26 changed files with 146 additions and 46 deletions
|
@ -1,3 +1,3 @@
|
||||||
include LICENSE
|
include LICENSE
|
||||||
include README.rst
|
include README.rst
|
||||||
recursive-include openid_provider/templates *
|
recursive-include oidc_provider/templates *
|
18
README.rst
18
README.rst
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
Django-OIDC-Provider
|
Django OIDC Provider
|
||||||
####################
|
####################
|
||||||
|
|
||||||
**This project is in ALFA version and is rapidly changing. DO NOT USE IT FOR PRODUCTION SITES.**
|
**This project is in ALFA version and is rapidly changing. DO NOT USE IT FOR PRODUCTION SITES.**
|
||||||
|
@ -19,7 +19,7 @@ Install the package using pip.
|
||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
pip install git+https://github.com/juanifioren/django-oidc-provider.git#egg=openid_provider
|
pip install git+https://github.com/juanifioren/django-oidc-provider.git#egg=oidc_provider
|
||||||
|
|
||||||
|
|
||||||
Add it to your apps.
|
Add it to your apps.
|
||||||
|
@ -33,7 +33,7 @@ Add it to your apps.
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
'openid_provider',
|
'oidc_provider',
|
||||||
# ...
|
# ...
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ Add the provider urls.
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
# ...
|
# ...
|
||||||
url(r'^openid/', include('openid_provider.urls', namespace='openid_provider')),
|
url(r'^openid/', include('oidc_provider.urls', namespace='oidc_provider')),
|
||||||
# ...
|
# ...
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ Then let's create a Client. Start django shell: ``python manage.py shell``.
|
||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
>>> from openid_provider.models import Client
|
>>> from oidc_provider.models import Client
|
||||||
>>> c = Client(name='Some Client', client_id='123', client_secret='456', response_type='code', redirect_uris=['http://example.com/'])
|
>>> c = Client(name='Some Client', client_id='123', client_secret='456', response_type='code', redirect_uris=['http://example.com/'])
|
||||||
>>> c.save()
|
>>> c.save()
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ Check out an example:
|
||||||
|
|
||||||
.. code:: python
|
.. code:: python
|
||||||
|
|
||||||
from openid_provider.lib.claims import AbstractScopeClaims
|
from oidc_provider.lib.claims import AbstractScopeClaims
|
||||||
|
|
||||||
class MyAppScopeClaims(AbstractScopeClaims):
|
class MyAppScopeClaims(AbstractScopeClaims):
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ If a field is empty or ``None`` will be cleaned from the response.
|
||||||
Templates
|
Templates
|
||||||
*********
|
*********
|
||||||
|
|
||||||
Add your own templates files inside a folder named ``templates/openid_provider/``.
|
Add your own templates files inside a folder named ``templates/oidc_provider/``.
|
||||||
You can copy the sample html here and edit them with your own styles.
|
You can copy the sample html here and edit them with your own styles.
|
||||||
|
|
||||||
**authorize.html**
|
**authorize.html**
|
||||||
|
@ -191,7 +191,7 @@ You can copy the sample html here and edit them with your own styles.
|
||||||
|
|
||||||
<p>Client <strong>{{ client.name }}</strong> would like to access this information of you ...</p>
|
<p>Client <strong>{{ client.name }}</strong> would like to access this information of you ...</p>
|
||||||
|
|
||||||
<form method="post" action="{% url 'openid_provider:authorize' %}">
|
<form method="post" action="{% url 'oidc_provider:authorize' %}">
|
||||||
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
||||||
|
@ -224,7 +224,7 @@ Just run them as normal Django tests.
|
||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
$ python manage.py test openid_provider
|
$ python manage.py test oidc_provider
|
||||||
|
|
||||||
************
|
************
|
||||||
Contributing
|
Contributing
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from openid_provider.models import UserInfo
|
from oidc_provider.models import UserInfo
|
||||||
|
|
||||||
|
|
||||||
class AbstractScopeClaims(object):
|
class AbstractScopeClaims(object):
|
|
@ -1,10 +1,10 @@
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from openid_provider.lib.errors import *
|
from oidc_provider.lib.errors import *
|
||||||
from openid_provider.lib.utils.params import *
|
from oidc_provider.lib.utils.params import *
|
||||||
from openid_provider.lib.utils.token import *
|
from oidc_provider.lib.utils.token import *
|
||||||
from openid_provider.models import *
|
from oidc_provider.models import *
|
||||||
from openid_provider import settings
|
from oidc_provider import settings
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from openid_provider.lib.errors import *
|
from oidc_provider.lib.errors import *
|
||||||
from openid_provider.lib.utils.params import *
|
from oidc_provider.lib.utils.params import *
|
||||||
from openid_provider.lib.utils.token import *
|
from oidc_provider.lib.utils.token import *
|
||||||
from openid_provider.models import *
|
from oidc_provider.models import *
|
||||||
from openid_provider import settings
|
from oidc_provider import settings
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.http import JsonResponse
|
from django.http import JsonResponse
|
||||||
from openid_provider.lib.errors import *
|
from oidc_provider.lib.errors import *
|
||||||
from openid_provider.lib.claims import *
|
from oidc_provider.lib.claims import *
|
||||||
from openid_provider.lib.utils.params import *
|
from oidc_provider.lib.utils.params import *
|
||||||
from openid_provider.models import *
|
from oidc_provider.models import *
|
||||||
from openid_provider import settings
|
from oidc_provider import settings
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from openid_provider.models import *
|
from oidc_provider.models import *
|
||||||
from openid_provider import settings
|
from oidc_provider import settings
|
||||||
import jwt
|
import jwt
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
100
oidc_provider/migrations/0001_initial.py
Normal file
100
oidc_provider/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('auth', '0001_initial'),
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Client',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
|
('name', models.CharField(default=b'', max_length=100)),
|
||||||
|
('client_id', models.CharField(unique=True, max_length=255)),
|
||||||
|
('client_secret', models.CharField(unique=True, max_length=255)),
|
||||||
|
('response_type', models.CharField(max_length=30, choices=[(b'code', b'code (Authorization Code Flow)'), (b'id_token', b'id_token (Implicit Flow)'), (b'id_token token', b'id_token token (Implicit Flow)')])),
|
||||||
|
('_redirect_uris', models.TextField(default=b'')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
},
|
||||||
|
bases=(models.Model,),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Code',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
|
('code', models.CharField(unique=True, max_length=255)),
|
||||||
|
('expires_at', models.DateTimeField()),
|
||||||
|
('_scope', models.TextField(default=b'')),
|
||||||
|
('client', models.ForeignKey(to='oidc_provider.Client')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
},
|
||||||
|
bases=(models.Model,),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Token',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||||
|
('access_token', models.CharField(unique=True, max_length=255)),
|
||||||
|
('expires_at', models.DateTimeField()),
|
||||||
|
('_scope', models.TextField(default=b'')),
|
||||||
|
('_id_token', models.TextField()),
|
||||||
|
('client', models.ForeignKey(to='oidc_provider.Client')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
},
|
||||||
|
bases=(models.Model,),
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='UserInfo',
|
||||||
|
fields=[
|
||||||
|
('user', models.OneToOneField(primary_key=True, serialize=False, to=settings.AUTH_USER_MODEL)),
|
||||||
|
('given_name', models.CharField(default=b'', max_length=255)),
|
||||||
|
('family_name', models.CharField(default=b'', max_length=255)),
|
||||||
|
('middle_name', models.CharField(default=b'', max_length=255)),
|
||||||
|
('nickname', models.CharField(default=b'', max_length=255)),
|
||||||
|
('preferred_username', models.CharField(default=b'', max_length=255)),
|
||||||
|
('profile', models.URLField(default=b'')),
|
||||||
|
('picture', models.URLField(default=b'')),
|
||||||
|
('website', models.URLField(default=b'')),
|
||||||
|
('email_verified', models.BooleanField(default=False)),
|
||||||
|
('gender', models.CharField(default=b'', max_length=100)),
|
||||||
|
('birthdate', models.DateField(null=True)),
|
||||||
|
('zoneinfo', models.CharField(default=b'', max_length=100)),
|
||||||
|
('locale', models.CharField(default=b'', max_length=100)),
|
||||||
|
('phone_number', models.CharField(default=b'', max_length=255)),
|
||||||
|
('phone_number_verified', models.BooleanField(default=False)),
|
||||||
|
('address_formatted', models.CharField(default=b'', max_length=255)),
|
||||||
|
('address_street_address', models.CharField(default=b'', max_length=255)),
|
||||||
|
('address_locality', models.CharField(default=b'', max_length=255)),
|
||||||
|
('address_region', models.CharField(default=b'', max_length=255)),
|
||||||
|
('address_postal_code', models.CharField(default=b'', max_length=255)),
|
||||||
|
('address_country', models.CharField(default=b'', max_length=255)),
|
||||||
|
('updated_at', models.DateTimeField(auto_now=True, null=True)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
},
|
||||||
|
bases=(models.Model,),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='token',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='code',
|
||||||
|
name='user',
|
||||||
|
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
|
||||||
|
preserve_default=True,
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,5 +1,5 @@
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from openid_provider.lib.claims import AbstractScopeClaims
|
from oidc_provider.lib.claims import AbstractScopeClaims
|
||||||
|
|
||||||
|
|
||||||
# Here goes all the package default settings.
|
# Here goes all the package default settings.
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
<p>Client <strong>{{ client.name }}</strong> would like to access this information of you ...</p>
|
<p>Client <strong>{{ client.name }}</strong> would like to access this information of you ...</p>
|
||||||
|
|
||||||
<form method="post" action="{% url 'openid_provider:authorize' %}">
|
<form method="post" action="{% url 'oidc_provider:authorize' %}">
|
||||||
|
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|
|
@ -3,9 +3,9 @@ from django.contrib.auth.models import AnonymousUser
|
||||||
from django.core.urlresolvers import reverse
|
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 openid_provider import settings
|
from oidc_provider import settings
|
||||||
from openid_provider.tests.utils import *
|
from oidc_provider.tests.utils import *
|
||||||
from openid_provider.views import *
|
from oidc_provider.views import *
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ class CodeFlowTestCase(TestCase):
|
||||||
"""
|
"""
|
||||||
Generate an OpenID Authentication Request using the fake client data.
|
Generate an OpenID Authentication Request using the fake client data.
|
||||||
"""
|
"""
|
||||||
path = reverse('openid_provider:authorize')
|
path = reverse('oidc_provider:authorize')
|
||||||
|
|
||||||
query_str = urllib.urlencode({
|
query_str = urllib.urlencode({
|
||||||
'client_id': self.client.client_id,
|
'client_id': self.client.client_id,
|
||||||
|
@ -42,7 +42,7 @@ class CodeFlowTestCase(TestCase):
|
||||||
|
|
||||||
See: https://tools.ietf.org/html/rfc6749#section-4.1.2.1
|
See: https://tools.ietf.org/html/rfc6749#section-4.1.2.1
|
||||||
"""
|
"""
|
||||||
url = reverse('openid_provider:authorize')
|
url = reverse('oidc_provider:authorize')
|
||||||
request = self.factory.get(url)
|
request = self.factory.get(url)
|
||||||
|
|
||||||
response = AuthorizeView.as_view()(request)
|
response = AuthorizeView.as_view()(request)
|
|
@ -1,5 +1,5 @@
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from openid_provider.models import *
|
from oidc_provider.models import *
|
||||||
|
|
||||||
|
|
||||||
def create_fake_user():
|
def create_fake_user():
|
|
@ -1,6 +1,6 @@
|
||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
from django.views.decorators.csrf import csrf_exempt
|
from django.views.decorators.csrf import csrf_exempt
|
||||||
from openid_provider.views import *
|
from oidc_provider.views import *
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
|
@ -4,10 +4,10 @@ from django.shortcuts import render
|
||||||
from django.template.loader import render_to_string
|
from django.template.loader import render_to_string
|
||||||
from django.views.decorators.http import require_http_methods
|
from django.views.decorators.http import require_http_methods
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
from openid_provider.lib.errors import *
|
from oidc_provider.lib.errors import *
|
||||||
from openid_provider.lib.endpoints.authorize import *
|
from oidc_provider.lib.endpoints.authorize import *
|
||||||
from openid_provider.lib.endpoints.token import *
|
from oidc_provider.lib.endpoints.token import *
|
||||||
from openid_provider.lib.endpoints.userinfo import *
|
from oidc_provider.lib.endpoints.userinfo import *
|
||||||
|
|
||||||
|
|
||||||
class AuthorizeView(View):
|
class AuthorizeView(View):
|
||||||
|
@ -26,7 +26,7 @@ class AuthorizeView(View):
|
||||||
'params': authorize.params,
|
'params': authorize.params,
|
||||||
}
|
}
|
||||||
hidden_inputs = render_to_string(
|
hidden_inputs = render_to_string(
|
||||||
'openid_provider/hidden_inputs.html', context)
|
'oidc_provider/hidden_inputs.html', context)
|
||||||
|
|
||||||
# Remove openid from scope list since we don't need to print it.
|
# Remove openid from scope list since we don't need to print it.
|
||||||
authorize.params.scope.remove('openid')
|
authorize.params.scope.remove('openid')
|
||||||
|
@ -37,7 +37,7 @@ class AuthorizeView(View):
|
||||||
'params': authorize.params,
|
'params': authorize.params,
|
||||||
}
|
}
|
||||||
|
|
||||||
return render(request, 'openid_provider/authorize.html', context)
|
return render(request, 'oidc_provider/authorize.html', context)
|
||||||
else:
|
else:
|
||||||
path = request.get_full_path()
|
path = request.get_full_path()
|
||||||
return redirect_to_login(path)
|
return redirect_to_login(path)
|
||||||
|
@ -48,7 +48,7 @@ class AuthorizeView(View):
|
||||||
'description': error.description,
|
'description': error.description,
|
||||||
}
|
}
|
||||||
|
|
||||||
return render(request, 'openid_provider/error.html', context)
|
return render(request, 'oidc_provider/error.html', context)
|
||||||
|
|
||||||
except (AuthorizeError) as error:
|
except (AuthorizeError) as error:
|
||||||
uri = error.create_uri(
|
uri = error.create_uri(
|
4
setup.py
4
setup.py
|
@ -10,10 +10,10 @@ 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.0.0',
|
version='0.0.0',
|
||||||
packages=['openid_provider'],
|
packages=['oidc_provider'],
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
license='MIT License',
|
license='MIT License',
|
||||||
description='A simple OpenID Connect Provider implementation for Djangonauts.',
|
description='OpenID Connect Provider implementation for Django.',
|
||||||
long_description=README,
|
long_description=README,
|
||||||
url='http://github.com/juanifioren/django-oidc-provider',
|
url='http://github.com/juanifioren/django-oidc-provider',
|
||||||
author='Juan Ignacio Fiorentino',
|
author='Juan Ignacio Fiorentino',
|
||||||
|
|
Loading…
Reference in a new issue