def test_enterprise_elements_inserted(self): settings.apply_settings(self.settings) self.assertIn( 'enterprise.tpa_pipeline.set_data_sharing_consent_record', self.settings.SOCIAL_AUTH_PIPELINE) self.assertIn('enterprise.tpa_pipeline.verify_data_sharing_consent', self.settings.SOCIAL_AUTH_PIPELINE)
def test_apply_settings_prepends_auth_backends(self): self.assertEqual(_ORIGINAL_AUTHENTICATION_BACKENDS, self.settings.AUTHENTICATION_BACKENDS) settings.apply_settings({provider.GoogleOauth2.NAME: {}, provider.MozillaPersona.NAME: {}}, self.settings) self.assertEqual(( provider.GoogleOauth2.AUTHENTICATION_BACKEND, provider.MozillaPersona.AUTHENTICATION_BACKEND) + _ORIGINAL_AUTHENTICATION_BACKENDS, self.settings.AUTHENTICATION_BACKENDS)
def test_can_enable_google_oauth2(self): auth_settings.apply_settings( {'Google': { 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY': 'google_key' }}, settings) self.assertEqual([provider.GoogleOauth2], provider.Registry.enabled()) self.assertEqual('google_key', settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY)
def test_apply_settings_prepends_auth_backends(self): self.assertEqual(_ORIGINAL_AUTHENTICATION_BACKENDS, self.settings.AUTHENTICATION_BACKENDS) settings.apply_settings({provider.GoogleOauth2.NAME: {}, provider.LinkedInOauth2.NAME: {}}, self.settings) self.assertEqual(( provider.GoogleOauth2.get_authentication_backend(), provider.LinkedInOauth2.get_authentication_backend()) + _ORIGINAL_AUTHENTICATION_BACKENDS, self.settings.AUTHENTICATION_BACKENDS)
def _enable_third_party_auth(self): """ Enable the use of third_party_auth, which allows users to sign in to edX using other identity providers. For configuration details, see common/djangoapps/third_party_auth/settings.py. """ from third_party_auth import settings as auth_settings auth_settings.apply_settings(settings)
def configure_runtime(self): """Configures settings details.""" auth_settings.apply_settings( {self.PROVIDER_CLASS.NAME: self.PROVIDER_SETTINGS}, django_settings) # Force settings to propagate into cached members on # social.apps.django_app.utils. reload(social_utils)
def test_can_enable_linkedin_oauth2(self): auth_settings.apply_settings( {'LinkedIn': { 'SOCIAL_AUTH_LINKEDIN_OAUTH2_KEY': 'linkedin_key' }}, settings) self.assertEqual([provider.LinkedInOauth2], provider.Registry.enabled()) self.assertEqual('linkedin_key', settings.SOCIAL_AUTH_LINKEDIN_OAUTH2_KEY)
def test_apply_settings_raises_value_error_if_provider_contains_uninitialized_setting(self): bad_setting_name = 'bad_setting' self.assertNotIn('bad_setting_name', provider.GoogleOauth2.SETTINGS) auth_info = { provider.GoogleOauth2.NAME: { bad_setting_name: None, }, } with self.assertRaisesRegexp(ValueError, '^.*not initialized$'): settings.apply_settings(auth_info, self.settings)
def test_apply_settings_avoids_default_username_check(self): # Avoid the default username check where non-ascii characters are not # allowed when unicode username is enabled settings.apply_settings(self.settings) self.assertTrue(self.settings.SOCIAL_AUTH_CLEAN_USERNAMES ) # verify default behavior with patch.dict('django.conf.settings.FEATURES', {'ENABLE_UNICODE_USERNAME': True}): settings.apply_settings(self.settings) self.assertFalse(self.settings.SOCIAL_AUTH_CLEAN_USERNAMES)
def test_apply_settings_raises_value_error_if_provider_contains_uninitialized_setting( self): bad_setting_name = 'bad_setting' self.assertNotIn('bad_setting_name', provider.GoogleOauth2.SETTINGS) auth_info = { provider.GoogleOauth2.NAME: { bad_setting_name: None, }, } with self.assertRaisesRegexp(ValueError, '^.*not initialized$'): settings.apply_settings(auth_info, self.settings)
def test_apply_settings_initializes_stubs_and_merges_settings_from_auth_info(self): for key in provider.GoogleOauth2.SETTINGS: self.assertFalse(hasattr(self.settings, key)) auth_info = { provider.GoogleOauth2.NAME: { 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY': 'google_oauth2_key', }, } settings.apply_settings(auth_info, self.settings) self.assertEqual('google_oauth2_key', self.settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY) self.assertIsNone(self.settings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET)
def test_apply_settings_prepends_auth_backends(self): self.assertEqual(_ORIGINAL_AUTHENTICATION_BACKENDS, self.settings.AUTHENTICATION_BACKENDS) settings.apply_settings( { provider.GoogleOauth2.NAME: {}, provider.LinkedInOauth2.NAME: {} }, self.settings) self.assertEqual( (provider.GoogleOauth2.get_authentication_backend(), provider.LinkedInOauth2.get_authentication_backend()) + _ORIGINAL_AUTHENTICATION_BACKENDS, self.settings.AUTHENTICATION_BACKENDS)
def test_apply_settings_initializes_stubs_and_merges_settings_from_auth_info( self): for key in provider.GoogleOauth2.SETTINGS: self.assertFalse(hasattr(self.settings, key)) auth_info = { provider.GoogleOauth2.NAME: { 'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY': 'google_oauth2_key', }, } settings.apply_settings(auth_info, self.settings) self.assertEqual('google_oauth2_key', self.settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY) self.assertIsNone(self.settings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET)
def run(): """ Executed during django startup """ django_utils_translation.patch() autostartup() 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()
def test_apply_settings_adds_third_party_auth_to_installed_apps(self): settings.apply_settings(self.settings) self.assertIn('third_party_auth', self.settings.INSTALLED_APPS)
def test_apply_settings_adds_fields_stored_in_session(self): settings.apply_settings(self.settings) self.assertEqual(['auth_entry', 'next'], self.settings.FIELDS_STORED_IN_SESSION)
def test_apply_settings_adds_fields_stored_in_session(self): settings.apply_settings(self.settings) self.assertEqual(settings._FIELDS_STORED_IN_SESSION, self.settings.FIELDS_STORED_IN_SESSION)
def test_apply_settings_turns_off_redirect_sanitization(self): settings.apply_settings(self.settings) self.assertFalse(self.settings.SOCIAL_AUTH_SANITIZE_REDIRECTS)
def test_apply_settings_adds_exception_middleware(self): settings.apply_settings(self.settings) self.assertIn('third_party_auth.middleware.ExceptionMiddleware', self.settings.MIDDLEWARE_CLASSES)
def test_apply_settings_adds_exception_middleware(self): settings.apply_settings({}, self.settings) for middleware_name in settings._MIDDLEWARE_CLASSES: self.assertIn(middleware_name, self.settings.MIDDLEWARE_CLASSES)
def test_apply_settings_adds_third_party_auth_to_installed_apps(self): settings.apply_settings({}, self.settings) self.assertIn('third_party_auth', self.settings.INSTALLED_APPS)
def test_enterprise_elements_inserted(self): settings.apply_settings(self.settings) self.assertIn('enterprise.tpa_pipeline.set_data_sharing_consent_record', self.settings.SOCIAL_AUTH_PIPELINE) self.assertIn('enterprise.tpa_pipeline.verify_data_sharing_consent', self.settings.SOCIAL_AUTH_PIPELINE)
def test_can_enable_mozilla_persona(self): auth_settings.apply_settings({'Mozilla Persona': {}}, settings) self.assertEqual([provider.MozillaPersona], provider.Registry.enabled())
def test_enterprise_elements_inserted(self): settings.apply_settings(self.settings) self.assertIn('enterprise.tpa_pipeline.handle_enterprise_logistration', self.settings.SOCIAL_AUTH_PIPELINE)
def test_apply_settings_enables_no_providers_and_completes_when_app_info_empty( self): settings.apply_settings({}, self.settings) self.assertEqual([], provider.Registry.enabled())
def test_apply_settings_enables_no_providers_by_default(self): # Providers are only enabled via ConfigurationModels in the database settings.apply_settings(self.settings) self.assertEqual([], provider.Registry.enabled())
def configure_runtime(self): """Configures settings details.""" auth_settings.apply_settings({self.PROVIDER_CLASS.NAME: self.PROVIDER_SETTINGS}, django_settings) # Force settings to propagate into cached members on # social.apps.django_app.utils. reload(social_utils)
def test_apply_settings_turns_off_raising_social_exceptions(self): # Guard against submitting a conf change that's convenient in dev but # bad in prod. settings.apply_settings(self.settings) self.assertFalse(self.settings.SOCIAL_AUTH_RAISE_EXCEPTIONS)
def test_can_enable_google_oauth2(self): auth_settings.apply_settings({'Google': {'SOCIAL_AUTH_GOOGLE_OAUTH2_KEY': 'google_key'}}, settings) self.assertEqual([provider.GoogleOauth2], provider.Registry.enabled()) self.assertEqual('google_key', settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY)
def test_apply_settings_adds_fields_stored_in_session(self): settings.apply_settings({}, self.settings) self.assertEqual(settings._FIELDS_STORED_IN_SESSION, self.settings.FIELDS_STORED_IN_SESSION)
def test_can_enable_linkedin_oauth2(self): auth_settings.apply_settings({'LinkedIn': {'SOCIAL_AUTH_LINKEDIN_OAUTH2_KEY': 'linkedin_key'}}, settings) self.assertEqual([provider.LinkedInOauth2], provider.Registry.enabled()) self.assertEqual('linkedin_key', settings.SOCIAL_AUTH_LINKEDIN_OAUTH2_KEY)
def test_apply_settings_enables_no_providers_and_completes_when_app_info_empty(self): settings.apply_settings({}, self.settings) self.assertEqual([], provider.Registry.enabled())
def test_apply_settings_adds_exception_middleware(self): settings.apply_settings(self.settings) for middleware_name in settings._MIDDLEWARE_CLASSES: self.assertIn(middleware_name, self.settings.MIDDLEWARE_CLASSES)
def test_apply_settings_turns_off_raising_social_exceptions(self): # Guard against submitting a conf change that's convenient in dev but # bad in prod. settings.apply_settings({}, self.settings) self.assertFalse(self.settings.SOCIAL_AUTH_RAISE_EXCEPTIONS)