diff --git a/cms/envs/npoed.py b/cms/envs/npoed.py new file mode 100644 index 000000000000..53b6b6bf59f4 --- /dev/null +++ b/cms/envs/npoed.py @@ -0,0 +1,51 @@ +import datetime + +from .aws import * + + +SSO_NPOED_URL = ENV_TOKENS.get('SSO_NPOED_URL') #'http://sso.rnoep.raccoongang.com' + +SSO_API_URL = "%s/api-edx/" % SSO_NPOED_URL #'http://sso.rnoep.raccoongang.com/api-edx/' +SSO_API_TOKEN = AUTH_TOKENS.get('SSO_API_TOKEN') #'b4c2b895087d457b86fc9096f344a687947b70fb' + + +SOCIAL_AUTH_EXCLUDE_URL_PATTERN = r'^/admin' +SOCIAL_AUTH_LOGOUT_URL = "%s/logout/" % SSO_NPOED_URL #'http://sso.rnoep.raccoongang.com/logout/' +SOCIAL_AUTH_RAISE_EXCEPTIONS = True + +MIDDLEWARE_CLASSES += ('sso_edx_npoed.middleware.SeamlessAuthorization', ) + +# We should login always with npoed-sso. There is specific backend for cms +# from sso_edx_npoed.backends.npoed import NpoedBackendCMS +# NpoedBackendCMS.name +SSO_NPOED_BACKEND_NAME = 'sso_npoed_cms-oauth2' +LOGIN_URL = '/auth/login/%s/' % SSO_NPOED_BACKEND_NAME + +# Add extra dir for mako templates finder +# '/edx/app/edxapp/venvs/edxapp/src/npoed-sso-edx-client/sso_edx_npoed/templates') +NPOED_MAKO_TEMPLATES = ENV_TOKENS.get('NPOED_MAKO_TEMPLATES', []) + +#TEMPLATE_DIRS.insert(0, '/edx/app/edxapp/venvs/edxapp/src/npoed-sso-edx-client/sso_edx_npoed') +MAKO_TEMPLATES['main'] = NPOED_MAKO_TEMPLATES + MAKO_TEMPLATES['main'] + + +CELERYBEAT_SCHEDULE = {} + +##### Third-party auth options ################################################ copied from lms/aws.py +if FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): + THIRD_PARTY_AUTH_BACKENDS = ENV_TOKENS.get('THIRD_PARTY_AUTH_BACKENDS') + + if THIRD_PARTY_AUTH_BACKENDS: + AUTHENTICATION_BACKENDS = THIRD_PARTY_AUTH_BACKENDS + list(AUTHENTICATION_BACKENDS) + + # The reduced session expiry time during the third party login pipeline. (Value in seconds) + SOCIAL_AUTH_PIPELINE_TIMEOUT = ENV_TOKENS.get('SOCIAL_AUTH_PIPELINE_TIMEOUT', 600) + + # third_party_auth config moved to ConfigurationModels. This is for data migration only: + THIRD_PARTY_AUTH_OLD_CONFIG = AUTH_TOKENS.get('THIRD_PARTY_AUTH', None) + + if ENV_TOKENS.get('THIRD_PARTY_AUTH_SAML_FETCH_PERIOD_HOURS', 24) is not None: + CELERYBEAT_SCHEDULE['refresh-saml-metadata'] = { + 'task': 'third_party_auth.fetch_saml_metadata', + 'schedule': datetime.timedelta(hours=ENV_TOKENS.get('THIRD_PARTY_AUTH_SAML_FETCH_PERIOD_HOURS', 24)), + } \ No newline at end of file diff --git a/cms/startup.py b/cms/startup.py index bff8af0077ab..9b2eea2955df 100644 --- a/cms/startup.py +++ b/cms/startup.py @@ -21,6 +21,10 @@ def run(): add_mimetypes() + if settings.FEATURES.get('ENABLE_THIRD_PARTY_AUTH', False): + from third_party_auth import settings as auth_settings + auth_settings.apply_settings(settings) + if settings.FEATURES.get('USE_CUSTOM_THEME', False): enable_theme() diff --git a/cms/urls.py b/cms/urls.py index 14a0fee56ad6..1f17cba1ead1 100644 --- a/cms/urls.py +++ b/cms/urls.py @@ -205,3 +205,13 @@ url(r'404', handler404), url(r'500', handler500), ) + +# Third-party auth. +if settings.FEATURES.get('ENABLE_THIRD_PARTY_AUTH'): + urlpatterns += ( + url(r'', include('third_party_auth.urls')), + # NOTE: The following login_oauth_token endpoint is DEPRECATED. + # Please use the exchange_access_token endpoint instead. + url(r'^login_oauth_token/(?P[^/]+)/$', 'student.views.login_oauth_token'), + url(r'^social-logout', 'sso_edx_npoed.views.logout', name='social-logout'), + ) \ No newline at end of file diff --git a/lms/envs/npoed.py b/lms/envs/npoed.py new file mode 100644 index 000000000000..cdd586a387d2 --- /dev/null +++ b/lms/envs/npoed.py @@ -0,0 +1,34 @@ +from .aws import * + + +SSO_NPOED_URL = ENV_TOKENS.get('SSO_NPOED_URL') #'http://sso.rnoep.raccoongang.com' + +SSO_API_URL = "%s/api-edx/" % SSO_NPOED_URL #'http://sso.rnoep.raccoongang.com/api-edx/' +SSO_API_TOKEN = AUTH_TOKENS.get('SSO_API_TOKEN') #'b4c2b895087d457b86fc9096f344a687947b70fb' + + +SOCIAL_AUTH_EXCLUDE_URL_PATTERN = r'^/admin' +SOCIAL_AUTH_LOGOUT_URL = "%s/logout/" % SSO_NPOED_URL #'http://sso.rnoep.raccoongang.com/logout/' +SOCIAL_AUTH_RAISE_EXCEPTIONS = True + +MIDDLEWARE_CLASSES += ('sso_edx_npoed.middleware.PLPRedirection', + 'sso_edx_npoed.middleware.SeamlessAuthorization') + +PLP_URL = ENV_TOKENS.get('PLP_URL') + +# We should login always with npoed-sso +# from sso_edx_npoed.backends.npoed import NpoedBackend +# NpoedBackend.name +SSO_NPOED_BACKEND_NAME = 'sso_npoed-oauth2' +LOGIN_URL = '/auth/login/%s/' % SSO_NPOED_BACKEND_NAME + +# Add extra dir for mako templates finder +# '/edx/app/edxapp/venvs/edxapp/src/npoed-sso-edx-client/sso_edx_npoed/templates') +NPOED_MAKO_TEMPLATES = ENV_TOKENS.get('NPOED_MAKO_TEMPLATES', []) + +#TEMPLATE_DIRS.insert(0, '/edx/app/edxapp/venvs/edxapp/src/npoed-sso-edx-client/sso_edx_npoed') +MAKO_TEMPLATES['main'] = NPOED_MAKO_TEMPLATES + MAKO_TEMPLATES['main'] + + + +#OAUTH_OIDC_ISSUER = "https://rnoep.raccoongang.com/oauth2" diff --git a/lms/urls.py b/lms/urls.py index 819964165371..d9ccaff65b88 100644 --- a/lms/urls.py +++ b/lms/urls.py @@ -722,3 +722,9 @@ url(r'^404$', handler404), url(r'^500$', handler500), ) + +urlpatterns += ( + # Extend API + url(r'^api/extended/', include('open_edx_api_extension.urls', namespace='api_extension')), + url(r'^social-logout', 'sso_edx_npoed.views.logout', name='social-logout'), +) diff --git a/requirements/edx/github.txt b/requirements/edx/github.txt index 9fbcf423af59..35b80a6c2c2b 100644 --- a/requirements/edx/github.txt +++ b/requirements/edx/github.txt @@ -58,3 +58,7 @@ git+https://github.com/edx/ecommerce-api-client.git@1.0.0#egg=ecommerce-api-clie # Third Party XBlocks -e git+https://github.com/mitodl/edx-sga@172a90fd2738f8142c10478356b2d9ed3e55334a#egg=edx-sga -e git+https://github.com/open-craft/xblock-poll@v1.0#egg=xblock-poll + +# Npoed specific repos: +-e git+https://github.com/raccoongang/open_edx_api_extension.git#egg=open_edx_api_extension +-e git+https://github.com/miptliot/npoed-sso-edx-client.git#egg=sso_edx_npoed