Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-openid-auth
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
django-openid-auth
Commits
b78da99c
Commit
b78da99c
authored
Aug 25, 2008
by
James Henstridge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add more tests for the other login modes.
parent
366ca217
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
121 additions
and
12 deletions
+121
-12
django_openid_auth/forms.py
+6
-6
django_openid_auth/templates/openid/login.html
+5
-4
django_openid_auth/tests/test_views.py
+109
-1
django_openid_auth/views.py
+1
-1
No files found.
django_openid_auth/forms.py
View file @
b78da99c
...
@@ -6,17 +6,17 @@ from openid.yadis import xri
...
@@ -6,17 +6,17 @@ from openid.yadis import xri
class
OpenIDLoginForm
(
forms
.
Form
):
class
OpenIDLoginForm
(
forms
.
Form
):
openid_
url
=
forms
.
CharField
(
openid_
identifier
=
forms
.
CharField
(
max_length
=
255
,
max_length
=
255
,
widget
=
forms
.
TextInput
(
attrs
=
{
'class'
:
'required openid'
}))
widget
=
forms
.
TextInput
(
attrs
=
{
'class'
:
'required openid'
}))
def
clean_openid_
url
(
self
):
def
clean_openid_
identifier
(
self
):
if
'openid_
url
'
in
self
.
cleaned_data
:
if
'openid_
identifier
'
in
self
.
cleaned_data
:
openid_
url
=
self
.
cleaned_data
[
'openid_url
'
]
openid_
identifier
=
self
.
cleaned_data
[
'openid_identifier
'
]
if
xri
.
identifierScheme
(
openid_
url
)
==
'XRI'
and
getattr
(
if
xri
.
identifierScheme
(
openid_
identifier
)
==
'XRI'
and
getattr
(
settings
,
'OPENID_DISALLOW_INAMES'
,
False
settings
,
'OPENID_DISALLOW_INAMES'
,
False
):
):
raise
forms
.
ValidationError
(
_
(
'i-names are not supported'
))
raise
forms
.
ValidationError
(
_
(
'i-names are not supported'
))
return
self
.
cleaned_data
[
'openid_
url
'
]
return
self
.
cleaned_data
[
'openid_
identifier
'
]
django_openid_auth/templates/openid/login.html
View file @
b78da99c
...
@@ -17,8 +17,8 @@ input.openid {
...
@@ -17,8 +17,8 @@ input.openid {
<h1>
Sign in with your OpenID
</h1>
<h1>
Sign in with your OpenID
</h1>
{% if form.errors %}
{% if form.errors %}
<p
class=
"errors"
>
{% trans "Please correct errors below:" %}
<br
/>
<p
class=
"errors"
>
{% trans "Please correct errors below:" %}
<br
/>
{% if form.openid_
url
.errors %}
{% if form.openid_
identifier
.errors %}
<span
class=
"error"
>
{{ form.openid_
url
.errors|join:", " }}
</span>
<span
class=
"error"
>
{{ form.openid_
identifier
.errors|join:", " }}
</span>
{% endif %}
{% endif %}
{% if form.next.errors %}
{% if form.next.errors %}
<span
class=
"error"
>
{{ form.next.errors|join:", " }}
</span>
<span
class=
"error"
>
{{ form.next.errors|join:", " }}
</span>
...
@@ -28,8 +28,9 @@ input.openid {
...
@@ -28,8 +28,9 @@ input.openid {
<form
name=
"fopenid"
action=
"{{ action }}"
method=
"post"
>
<form
name=
"fopenid"
action=
"{{ action }}"
method=
"post"
>
<fieldset>
<fieldset>
<legend>
{% trans "Sign In Using Your OpenID" %}
</legend>
<legend>
{% trans "Sign In Using Your OpenID" %}
</legend>
<div
class=
"form-row"
><label
for=
"id_openid_ul"
>
{% trans "OpenId URL :" %}
</label><br
/>
{{ form.openid_url }}
</div>
<div
class=
"form-row"
><label
for=
"id_openid_identifier"
>
{%
<div
class=
"submit-row "
><input
name=
"bsignin"
type=
"submit"
value=
"{% trans "
Sign
in
with
OPENID
"
%}"
></div>
trans "OpenID:" %}
</label><br
/>
{{ form.openid_identifier }}
</div>
<div
class=
"submit-row "
><input
name=
"bsignin"
type=
"submit"
value=
"{% trans "
Sign
in
"
%}"
></div>
{% if next %}
{% if next %}
<input
type=
"hidden"
name=
"next"
value=
"{{ next }}"
/>
<input
type=
"hidden"
name=
"next"
value=
"{{ next }}"
/>
...
...
django_openid_auth/tests/test_views.py
View file @
b78da99c
...
@@ -6,6 +6,7 @@ import unittest
...
@@ -6,6 +6,7 @@ import unittest
from
django.conf
import
settings
from
django.conf
import
settings
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.test
import
TestCase
from
django.test
import
TestCase
from
openid.extensions.sreg
import
SRegRequest
,
SRegResponse
from
openid.fetchers
import
(
from
openid.fetchers
import
(
HTTPFetcher
,
HTTPFetchingError
,
HTTPResponse
,
setDefaultFetcher
)
HTTPFetcher
,
HTTPFetchingError
,
HTTPResponse
,
setDefaultFetcher
)
from
openid.oidutil
import
importElementTree
from
openid.oidutil
import
importElementTree
...
@@ -23,6 +24,7 @@ class StubOpenIDProvider(HTTPFetcher):
...
@@ -23,6 +24,7 @@ class StubOpenIDProvider(HTTPFetcher):
def
__init__
(
self
,
base_url
):
def
__init__
(
self
,
base_url
):
self
.
store
=
MemoryStore
()
self
.
store
=
MemoryStore
()
self
.
identity_url
=
base_url
+
'identity'
self
.
identity_url
=
base_url
+
'identity'
self
.
localid_url
=
base_url
+
'localid'
self
.
endpoint_url
=
base_url
+
'endpoint'
self
.
endpoint_url
=
base_url
+
'endpoint'
self
.
server
=
Server
(
self
.
store
,
self
.
endpoint_url
)
self
.
server
=
Server
(
self
.
store
,
self
.
endpoint_url
)
self
.
last_request
=
None
self
.
last_request
=
None
...
@@ -44,7 +46,7 @@ class StubOpenIDProvider(HTTPFetcher):
...
@@ -44,7 +46,7 @@ class StubOpenIDProvider(HTTPFetcher):
</Service>
</Service>
</XRD>
</XRD>
</xrds:XRDS>
</xrds:XRDS>
"""
%
(
self
.
endpoint_url
,
self
.
identity
_url
))
"""
%
(
self
.
endpoint_url
,
self
.
localid
_url
))
elif
url
.
startswith
(
self
.
endpoint_url
):
elif
url
.
startswith
(
self
.
endpoint_url
):
# Gather query parameters
# Gather query parameters
query
=
{}
query
=
{}
...
@@ -119,6 +121,38 @@ class RelyingPartyTests(TestCase):
...
@@ -119,6 +121,38 @@ class RelyingPartyTests(TestCase):
return
self
.
client
.
get
(
'/openid/complete'
,
return
self
.
client
.
get
(
'/openid/complete'
,
dict
(
cgi
.
parse_qsl
(
redirect_to
.
split
(
'?'
,
1
)[
1
])))
dict
(
cgi
.
parse_qsl
(
redirect_to
.
split
(
'?'
,
1
)[
1
])))
def
test_login
(
self
):
user
=
User
.
objects
.
create_user
(
'someuser'
,
'someone@example.com'
)
useropenid
=
UserOpenID
(
user
=
user
,
claimed_id
=
'http://example.com/identity'
,
display_id
=
'http://example.com/identity'
)
useropenid
.
save
()
# The login form is displayed:
response
=
self
.
client
.
get
(
'/openid/login'
)
self
.
assertTemplateUsed
(
response
,
'openid/login.html'
)
# Posting in an identity URL begins the authentication request:
response
=
self
.
client
.
post
(
'/openid/login'
,
{
'openid_identifier'
:
'http://example.com/identity'
,
'next'
:
'/getuser'
})
self
.
assertContains
(
response
,
'OpenID transaction in progress'
)
openid_request
=
self
.
provider
.
parseFormPost
(
response
.
content
)
self
.
assertEquals
(
openid_request
.
mode
,
'checkid_setup'
)
self
.
assertTrue
(
openid_request
.
return_to
.
startswith
(
'http://testserver/openid/complete'
))
# Complete the request. The user is redirected to the next URL.
openid_response
=
openid_request
.
answer
(
True
)
response
=
self
.
complete
(
openid_response
)
self
.
assertRedirects
(
response
,
'http://testserver/getuser'
)
# And they are now logged in:
response
=
self
.
client
.
get
(
'/getuser'
)
self
.
assertEquals
(
response
.
content
,
'someuser'
)
def
test_login_sso
(
self
):
def
test_login_sso
(
self
):
settings
.
OPENID_SSO_SERVER_URL
=
'http://example.com/identity'
settings
.
OPENID_SSO_SERVER_URL
=
'http://example.com/identity'
user
=
User
.
objects
.
create_user
(
'someuser'
,
'someone@example.com'
)
user
=
User
.
objects
.
create_user
(
'someuser'
,
'someone@example.com'
)
...
@@ -128,6 +162,8 @@ class RelyingPartyTests(TestCase):
...
@@ -128,6 +162,8 @@ class RelyingPartyTests(TestCase):
display_id
=
'http://example.com/identity'
)
display_id
=
'http://example.com/identity'
)
useropenid
.
save
()
useropenid
.
save
()
# Requesting the login form immediately begins an
# authentication request.
response
=
self
.
client
.
get
(
'/openid/login'
,
{
'next'
:
'/getuser'
})
response
=
self
.
client
.
get
(
'/openid/login'
,
{
'next'
:
'/getuser'
})
self
.
assertEquals
(
response
.
status_code
,
200
)
self
.
assertEquals
(
response
.
status_code
,
200
)
self
.
assertContains
(
response
,
'OpenID transaction in progress'
)
self
.
assertContains
(
response
,
'OpenID transaction in progress'
)
...
@@ -146,6 +182,78 @@ class RelyingPartyTests(TestCase):
...
@@ -146,6 +182,78 @@ class RelyingPartyTests(TestCase):
response
=
self
.
client
.
get
(
'/getuser'
)
response
=
self
.
client
.
get
(
'/getuser'
)
self
.
assertEquals
(
response
.
content
,
'someuser'
)
self
.
assertEquals
(
response
.
content
,
'someuser'
)
def
test_login_create_users
(
self
):
settings
.
OPENID_CREATE_USERS
=
True
# Create a user with the same name as we'll pass back via sreg.
User
.
objects
.
create_user
(
'someuser'
,
'someone@example.com'
)
# Posting in an identity URL begins the authentication request:
response
=
self
.
client
.
post
(
'/openid/login'
,
{
'openid_identifier'
:
'http://example.com/identity'
,
'next'
:
'/getuser'
})
self
.
assertContains
(
response
,
'OpenID transaction in progress'
)
# Complete the request, passing back some simple registration
# data. The user is redirected to the next URL.
openid_request
=
self
.
provider
.
parseFormPost
(
response
.
content
)
sreg_request
=
SRegRequest
.
fromOpenIDRequest
(
openid_request
)
openid_response
=
openid_request
.
answer
(
True
)
sreg_response
=
SRegResponse
.
extractResponse
(
sreg_request
,
{
'nickname'
:
'someuser'
,
'fullname'
:
'Some User'
,
'email'
:
'foo@example.com'
})
openid_response
.
addExtension
(
sreg_response
)
response
=
self
.
complete
(
openid_response
)
self
.
assertRedirects
(
response
,
'http://testserver/getuser'
)
# And they are now logged in as a new user (they haven't taken
# over the existing "someuser" user).
response
=
self
.
client
.
get
(
'/getuser'
)
self
.
assertEquals
(
response
.
content
,
'someuser2'
)
# Check the details of the new user.
user
=
User
.
objects
.
get
(
username
=
'someuser2'
)
self
.
assertEquals
(
user
.
first_name
,
'Some'
)
self
.
assertEquals
(
user
.
last_name
,
'User'
)
self
.
assertEquals
(
user
.
email
,
'foo@example.com'
)
def
test_login_update_details
(
self
):
settings
.
OPENID_UPDATE_DETAILS_FROM_SREG
=
True
user
=
User
.
objects
.
create_user
(
'testuser'
,
'someone@example.com'
)
useropenid
=
UserOpenID
(
user
=
user
,
claimed_id
=
'http://example.com/identity'
,
display_id
=
'http://example.com/identity'
)
useropenid
.
save
()
# Posting in an identity URL begins the authentication request:
response
=
self
.
client
.
post
(
'/openid/login'
,
{
'openid_identifier'
:
'http://example.com/identity'
,
'next'
:
'/getuser'
})
self
.
assertContains
(
response
,
'OpenID transaction in progress'
)
# Complete the request, passing back some simple registration
# data. The user is redirected to the next URL.
openid_request
=
self
.
provider
.
parseFormPost
(
response
.
content
)
sreg_request
=
SRegRequest
.
fromOpenIDRequest
(
openid_request
)
openid_response
=
openid_request
.
answer
(
True
)
sreg_response
=
SRegResponse
.
extractResponse
(
sreg_request
,
{
'nickname'
:
'someuser'
,
'fullname'
:
'Some User'
,
'email'
:
'foo@example.com'
})
openid_response
.
addExtension
(
sreg_response
)
response
=
self
.
complete
(
openid_response
)
self
.
assertRedirects
(
response
,
'http://testserver/getuser'
)
# And they are now logged in as testuser (the passed in
# nickname has not caused the username to change).
response
=
self
.
client
.
get
(
'/getuser'
)
self
.
assertEquals
(
response
.
content
,
'testuser'
)
# The user's full name and email have been updated.
user
=
User
.
objects
.
get
(
username
=
'testuser'
)
self
.
assertEquals
(
user
.
first_name
,
'Some'
)
self
.
assertEquals
(
user
.
last_name
,
'User'
)
self
.
assertEquals
(
user
.
email
,
'foo@example.com'
)
def
suite
():
def
suite
():
return
unittest
.
TestLoader
()
.
loadTestsFromName
(
__name__
)
return
unittest
.
TestLoader
()
.
loadTestsFromName
(
__name__
)
django_openid_auth/views.py
View file @
b78da99c
...
@@ -87,7 +87,7 @@ def login_begin(request, template_name='openid/login.html',
...
@@ -87,7 +87,7 @@ def login_begin(request, template_name='openid/login.html',
if
request
.
POST
:
if
request
.
POST
:
login_form
=
OpenIDLoginForm
(
data
=
request
.
POST
)
login_form
=
OpenIDLoginForm
(
data
=
request
.
POST
)
if
login_form
.
is_valid
():
if
login_form
.
is_valid
():
openid_url
=
login_form
.
cleaned_data
[
'openid_
url
'
]
openid_url
=
login_form
.
cleaned_data
[
'openid_
identifier
'
]
else
:
else
:
login_form
=
OpenIDLoginForm
()
login_form
=
OpenIDLoginForm
()
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment