Makes logistration available at /login and /register as well as /accounts/login/ and /accounts/register/. In addition: - Adds support for redirect URLs in third party auth for combined login/registration page - Adds support for external auth on the combined login/registration page - Removes old login and registration acceptance tests - Adds deprecation warnings to old login and register views - Moves third party auth util to student_account - Adds exception for microsites (theming)
78 lines
3.0 KiB
Python
78 lines
3.0 KiB
Python
"""Helper functions for the student account app. """
|
|
from django.core.urlresolvers import reverse
|
|
from opaque_keys.edx.keys import CourseKey
|
|
from course_modes.models import CourseMode
|
|
from third_party_auth import ( # pylint: disable=W0611
|
|
pipeline, provider,
|
|
is_enabled as third_party_auth_enabled
|
|
)
|
|
|
|
|
|
def auth_pipeline_urls(auth_entry, redirect_url=None, course_id=None, email_opt_in=None):
|
|
"""Retrieve URLs for each enabled third-party auth provider.
|
|
|
|
These URLs are used on the "sign up" and "sign in" buttons
|
|
on the login/registration forms to allow users to begin
|
|
authentication with a third-party provider.
|
|
|
|
Optionally, we can redirect the user to an arbitrary
|
|
url after auth completes successfully. We use this
|
|
to redirect the user to a page that required login,
|
|
or to send users to the payment flow when enrolling
|
|
in a course.
|
|
|
|
Args:
|
|
auth_entry (string): Either `pipeline.AUTH_ENTRY_LOGIN` or `pipeline.AUTH_ENTRY_REGISTER`
|
|
|
|
Keyword Args:
|
|
redirect_url (unicode): If provided, send users to this URL
|
|
after they successfully authenticate.
|
|
|
|
course_id (unicode): The ID of the course the user is enrolling in.
|
|
We use this to send users to the track selection page
|
|
if the course has a payment option.
|
|
Note that `redirect_url` takes precedence over the redirect
|
|
to the track selection page.
|
|
|
|
email_opt_in (unicode): The user choice to opt in for organization wide emails. If set to 'true'
|
|
(case insensitive), user will be opted into organization-wide email. All other values will
|
|
be treated as False, and the user will be opted out of organization-wide email.
|
|
|
|
Returns:
|
|
dict mapping provider names to URLs
|
|
|
|
"""
|
|
if not third_party_auth_enabled():
|
|
return {}
|
|
|
|
if redirect_url is not None:
|
|
pipeline_redirect = redirect_url
|
|
elif course_id is not None:
|
|
# If the course is white-label (paid), then we send users
|
|
# to the shopping cart. (There is a third party auth pipeline
|
|
# step that will add the course to the cart.)
|
|
if CourseMode.is_white_label(CourseKey.from_string(course_id)):
|
|
pipeline_redirect = reverse("shoppingcart.views.show_cart")
|
|
|
|
# Otherwise, send the user to the track selection page.
|
|
# The track selection page may redirect the user to the dashboard
|
|
# (if the only available mode is honor), or directly to verification
|
|
# (for professional ed).
|
|
else:
|
|
pipeline_redirect = reverse(
|
|
"course_modes_choose",
|
|
kwargs={'course_id': unicode(course_id)}
|
|
)
|
|
else:
|
|
pipeline_redirect = None
|
|
|
|
return {
|
|
provider.NAME: pipeline.get_login_url(
|
|
provider.NAME, auth_entry,
|
|
enroll_course_id=course_id,
|
|
email_opt_in=email_opt_in,
|
|
redirect_url=pipeline_redirect
|
|
)
|
|
for provider in provider.Registry.enabled()
|
|
}
|