diff --git a/cms/djangoapps/contentstore/views/public.py b/cms/djangoapps/contentstore/views/public.py index 63f95084aab3865c91b89d898e6d6d936c05adbe..da805a7bd71b0107d42e83a865f402b85bc53d40 100644 --- a/cms/djangoapps/contentstore/views/public.py +++ b/cms/djangoapps/contentstore/views/public.py @@ -44,6 +44,10 @@ def login_page(request): # to course now that the user is authenticated via # the decorator. return redirect('/course') + if settings.FEATURES.get('AUTH_USE_CAS'): + # If CAS is enabled, redirect auth handling to there + return redirect(reverse('cas-login')) + return render_to_response( 'login.html', { diff --git a/cms/envs/aws.py b/cms/envs/aws.py index 3147ad3cd7b8ce34dcac25bcf06f173dfcf4f9f0..383d6925e00cbc27e307317fe112cdaa65d2f072 100644 --- a/cms/envs/aws.py +++ b/cms/envs/aws.py @@ -181,6 +181,16 @@ PLATFORM_NAME = ENV_TOKENS.get('PLATFORM_NAME', 'edX') if "TRACKING_IGNORE_URL_PATTERNS" in ENV_TOKENS: TRACKING_IGNORE_URL_PATTERNS = ENV_TOKENS.get("TRACKING_IGNORE_URL_PATTERNS") +# Django CAS external authentication settings +CAS_EXTRA_LOGIN_PARAMS = ENV_TOKENS.get("CAS_EXTRA_LOGIN_PARAMS", None) +if FEATURES.get('AUTH_USE_CAS'): + CAS_SERVER_URL = ENV_TOKENS.get("CAS_SERVER_URL", None) + AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', + 'django_cas.backends.CASBackend', + ) + INSTALLED_APPS += ('django_cas',) + MIDDLEWARE_CLASSES += ('django_cas.middleware.CASMiddleware',) ################ SECURE AUTH ITEMS ############################### # Secret things: passwords, access keys, etc. diff --git a/cms/urls.py b/cms/urls.py index 65d19e83f7a0d42b5f98f9a33b127cfaad4cdeee..063995117ef2025bf863445ff16444b4a129e9fa 100644 --- a/cms/urls.py +++ b/cms/urls.py @@ -115,6 +115,12 @@ if settings.FEATURES.get('ENABLE_SERVICE_STATUS'): url(r'^status/', include('service_status.urls')), ) +if settings.FEATURES.get('AUTH_USE_CAS'): + urlpatterns += ( + url(r'^cas-auth/login/$', 'external_auth.views.cas_login', name="cas-login"), + url(r'^cas-auth/logout/$', 'django_cas.views.logout', {'next_page': '/'}, name="cas-logout"), + ) + urlpatterns += patterns('', url(r'^admin/', include(admin.site.urls)),) # enable automatic login diff --git a/common/djangoapps/student/views.py b/common/djangoapps/student/views.py index 2c802d3f4fdc140723d36ffea6ecef1d28005329..eacad70210f619db6e4aa4aaf2ea2af8af97b6b1 100644 --- a/common/djangoapps/student/views.py +++ b/common/djangoapps/student/views.py @@ -344,6 +344,9 @@ def signin_user(request): # branding and allow that to process the login if it # is enabled and the header is in the request. return redirect(reverse('root')) + if settings.FEATURES.get('AUTH_USE_CAS'): + # If CAS is enabled, redirect auth handling to there + return redirect(reverse('cas-login')) if request.user.is_authenticated(): return redirect(reverse('dashboard')) diff --git a/lms/envs/aws.py b/lms/envs/aws.py index ee424f84cc9dae142a379c60d5cc9f5460a5248c..373704b5e26fa90b3f86e36b36581edf8e59077e 100644 --- a/lms/envs/aws.py +++ b/lms/envs/aws.py @@ -258,6 +258,17 @@ SSL_AUTH_EMAIL_DOMAIN = ENV_TOKENS.get("SSL_AUTH_EMAIL_DOMAIN", "MIT.EDU") SSL_AUTH_DN_FORMAT_STRING = ENV_TOKENS.get("SSL_AUTH_DN_FORMAT_STRING", "/C=US/ST=Massachusetts/O=Massachusetts Institute of Technology/OU=Client CA v1/CN={0}/emailAddress={1}") +# Django CAS external authentication settings +CAS_EXTRA_LOGIN_PARAMS = ENV_TOKENS.get("CAS_EXTRA_LOGIN_PARAMS", None) +if FEATURES.get('AUTH_USE_CAS'): + CAS_SERVER_URL = ENV_TOKENS.get("CAS_SERVER_URL", None) + AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', + 'django_cas.backends.CASBackend', + ) + INSTALLED_APPS += ('django_cas',) + MIDDLEWARE_CLASSES += ('django_cas.middleware.CASMiddleware',) + HOSTNAME_MODULESTORE_DEFAULT_MAPPINGS = ENV_TOKENS.get('HOSTNAME_MODULESTORE_DEFAULT_MAPPINGS',{}) ############################## SECURE AUTH ITEMS ############### diff --git a/lms/envs/common.py b/lms/envs/common.py index 623c03098b4c3e79d19c75141a6878a91f52d653..10287904b87eef1775858d34ef86d8aec0b84718 100644 --- a/lms/envs/common.py +++ b/lms/envs/common.py @@ -1196,17 +1196,6 @@ FEATURES['CLASS_DASHBOARD'] = False if FEATURES.get('CLASS_DASHBOARD'): INSTALLED_APPS += ('class_dashboard',) -######################## CAS authentication ########################### - -if FEATURES.get('AUTH_USE_CAS'): - CAS_SERVER_URL = 'https://provide_your_cas_url_here' - AUTHENTICATION_BACKENDS = ( - 'django.contrib.auth.backends.ModelBackend', - 'django_cas.backends.CASBackend', - ) - INSTALLED_APPS += ('django_cas',) - MIDDLEWARE_CLASSES += ('django_cas.middleware.CASMiddleware',) - ###################### Registration ################################## # For each of the fields, give one of the following values: