Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx
edx-platform
Commits
b490bd16
Commit
b490bd16
authored
Dec 07, 2015
by
Christine Lytwynec
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #10832 from edx/clytwynec/auto-auth-redirect
Clytwynec/auto auth redirect
parents
10d2e818
df638088
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
74 additions
and
5 deletions
+74
-5
common/djangoapps/student/tests/test_auto_auth.py
+45
-2
common/djangoapps/student/views.py
+29
-3
No files found.
common/djangoapps/student/tests/test_auto_auth.py
View file @
b490bd16
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
Client
from
django.test.client
import
Client
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.conf
import
settings
from
django_comment_common.models
import
(
from
django_comment_common.models
import
(
Role
,
FORUM_ROLE_ADMINISTRATOR
,
FORUM_ROLE_MODERATOR
,
FORUM_ROLE_STUDENT
)
Role
,
FORUM_ROLE_ADMINISTRATOR
,
FORUM_ROLE_MODERATOR
,
FORUM_ROLE_STUDENT
)
from
django_comment_common.utils
import
seed_permissions_roles
from
django_comment_common.utils
import
seed_permissions_roles
...
@@ -175,7 +176,47 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
...
@@ -175,7 +176,47 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
response_data
response_data
)
)
def
_auto_auth
(
self
,
params
=
None
,
**
kwargs
):
@ddt.data
(
*
COURSE_IDS_DDT
)
@ddt.unpack
def
test_redirect_to_course
(
self
,
course_id
,
course_key
):
# Create a user and enroll in a course
response
=
self
.
_auto_auth
({
'username'
:
'test'
,
'course_id'
:
course_id
,
'redirect'
:
True
,
'staff'
:
'true'
,
},
status_code
=
302
)
# Check that a course enrollment was created for the user
self
.
assertEqual
(
CourseEnrollment
.
objects
.
count
(),
1
)
enrollment
=
CourseEnrollment
.
objects
.
get
(
course_id
=
course_key
)
self
.
assertEqual
(
enrollment
.
user
.
username
,
"test"
)
# Check that the redirect was to the course info/outline page
if
settings
.
ROOT_URLCONF
==
'lms.urls'
:
url_pattern
=
'/info'
else
:
url_pattern
=
'/course/{}'
.
format
(
unicode
(
course_key
))
self
.
assertTrue
(
response
.
url
.
endswith
(
url_pattern
))
# pylint: disable=no-member
def
test_redirect_to_main
(
self
):
# Create user and redirect to 'home' (cms) or 'dashboard' (lms)
response
=
self
.
_auto_auth
({
'username'
:
'test'
,
'redirect'
:
True
,
'staff'
:
'true'
,
},
status_code
=
302
)
# Check that the redirect was to either /dashboard or /home
if
settings
.
ROOT_URLCONF
==
'lms.urls'
:
url_pattern
=
'/dashboard'
else
:
url_pattern
=
'/home'
self
.
assertTrue
(
response
.
url
.
endswith
(
url_pattern
))
# pylint: disable=no-member
def
_auto_auth
(
self
,
params
=
None
,
status_code
=
None
,
**
kwargs
):
"""
"""
Make a request to the auto-auth end-point and check
Make a request to the auto-auth end-point and check
that the response is successful.
that the response is successful.
...
@@ -189,7 +230,9 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
...
@@ -189,7 +230,9 @@ class AutoAuthEnabledTestCase(UrlResetMixin, TestCase):
"""
"""
params
=
params
or
{}
params
=
params
or
{}
response
=
self
.
client
.
get
(
self
.
url
,
params
,
**
kwargs
)
response
=
self
.
client
.
get
(
self
.
url
,
params
,
**
kwargs
)
self
.
assertEqual
(
response
.
status_code
,
200
)
expected_status_code
=
status_code
if
status_code
else
200
self
.
assertEqual
(
response
.
status_code
,
expected_status_code
)
# Check that session and CSRF are set in the response
# Check that session and CSRF are set in the response
for
cookie
in
[
'csrftoken'
,
'sessionid'
]:
for
cookie
in
[
'csrftoken'
,
'sessionid'
]:
...
...
common/djangoapps/student/views.py
View file @
b490bd16
...
@@ -21,7 +21,7 @@ from django.contrib.auth.views import password_reset_confirm
...
@@ -21,7 +21,7 @@ from django.contrib.auth.views import password_reset_confirm
from
django.contrib
import
messages
from
django.contrib
import
messages
from
django.core.context_processors
import
csrf
from
django.core.context_processors
import
csrf
from
django.core
import
mail
from
django.core
import
mail
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
,
NoReverseMatch
from
django.core.validators
import
validate_email
,
ValidationError
from
django.core.validators
import
validate_email
,
ValidationError
from
django.db
import
IntegrityError
,
transaction
from
django.db
import
IntegrityError
,
transaction
from
django.http
import
(
HttpResponse
,
HttpResponseBadRequest
,
HttpResponseForbidden
,
from
django.http
import
(
HttpResponse
,
HttpResponseBadRequest
,
HttpResponseForbidden
,
...
@@ -1801,6 +1801,7 @@ def auto_auth(request):
...
@@ -1801,6 +1801,7 @@ def auto_auth(request):
* `course_id`: Enroll the student in the course with `course_id`
* `course_id`: Enroll the student in the course with `course_id`
* `roles`: Comma-separated list of roles to grant the student in the course with `course_id`
* `roles`: Comma-separated list of roles to grant the student in the course with `course_id`
* `no_login`: Define this to create the user but not login
* `no_login`: Define this to create the user but not login
* `redirect`: Set to "true" will redirect to course if course_id is defined, otherwise it will redirect to dashboard
If username, email, or password are not provided, use
If username, email, or password are not provided, use
randomly generated credentials.
randomly generated credentials.
...
@@ -1825,6 +1826,7 @@ def auto_auth(request):
...
@@ -1825,6 +1826,7 @@ def auto_auth(request):
if
course_id
:
if
course_id
:
course_key
=
CourseLocator
.
from_string
(
course_id
)
course_key
=
CourseLocator
.
from_string
(
course_id
)
role_names
=
[
v
.
strip
()
for
v
in
request
.
GET
.
get
(
'roles'
,
''
)
.
split
(
','
)
if
v
.
strip
()]
role_names
=
[
v
.
strip
()
for
v
in
request
.
GET
.
get
(
'roles'
,
''
)
.
split
(
','
)
if
v
.
strip
()]
redirect_when_done
=
request
.
GET
.
get
(
'redirect'
,
''
)
.
lower
()
==
'true'
login_when_done
=
'no_login'
not
in
request
.
GET
login_when_done
=
'no_login'
not
in
request
.
GET
form
=
AccountCreationForm
(
form
=
AccountCreationForm
(
...
@@ -1887,8 +1889,32 @@ def auto_auth(request):
...
@@ -1887,8 +1889,32 @@ def auto_auth(request):
create_comments_service_user
(
user
)
create_comments_service_user
(
user
)
# Provide the user with a valid CSRF token
# Provide the user with a valid CSRF token
# then return a 200 response
# then return a 200 response unless redirect is true
if
request
.
META
.
get
(
'HTTP_ACCEPT'
)
==
'application/json'
:
if
redirect_when_done
:
# Redirect to course info page if course_id is known
if
course_id
:
try
:
# redirect to course info page in LMS
redirect_url
=
reverse
(
'info'
,
kwargs
=
{
'course_id'
:
course_id
}
)
except
NoReverseMatch
:
# redirect to course outline page in Studio
redirect_url
=
reverse
(
'course_handler'
,
kwargs
=
{
'course_key_string'
:
course_id
}
)
else
:
try
:
# redirect to dashboard for LMS
redirect_url
=
reverse
(
'dashboard'
)
except
NoReverseMatch
:
# redirect to home for Studio
redirect_url
=
reverse
(
'home'
)
return
redirect
(
redirect_url
)
elif
request
.
META
.
get
(
'HTTP_ACCEPT'
)
==
'application/json'
:
response
=
JsonResponse
({
response
=
JsonResponse
({
'created_status'
:
u"Logged in"
if
login_when_done
else
"Created"
,
'created_status'
:
u"Logged in"
if
login_when_done
else
"Created"
,
'username'
:
username
,
'username'
:
username
,
...
...
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