diff --git a/awx/api/serializers.py b/awx/api/serializers.py index d652e61095..2c359a0af3 100644 --- a/awx/api/serializers.py +++ b/awx/api/serializers.py @@ -2124,6 +2124,10 @@ class NotifierSerializer(BaseSerializer): incorrect_type_fields = [] if 'notification_configuration' not in attrs: return attrs + if self.context['view'].kwargs: + object_actual = self.context['view'].get_object() + else: + object_actual = None for field in notification_class.init_parameters: if field not in attrs['notification_configuration']: missing_fields.append(field) @@ -2134,8 +2138,8 @@ class NotifierSerializer(BaseSerializer): if not type(field_val) in expected_types: incorrect_type_fields.append((field, field_type)) continue - if field_type == "password" and field_val.startswith('$encrypted$'): - missing_fields.append(field) + if field_type == "password" and field_val == "$encrypted$" and object_actual is not None: + attrs['notification_configuration'][field] = object_actual.notification_configuration[field] error_list = [] if missing_fields: error_list.append("Missing required fields for Notification Configuration: {}".format(missing_fields)) diff --git a/awx/api/urls.py b/awx/api/urls.py index 1cb8b4ad4e..5d496188d1 100644 --- a/awx/api/urls.py +++ b/awx/api/urls.py @@ -286,7 +286,8 @@ v1_urls = patterns('awx.api.views', url(r'^me/$', 'user_me_list'), url(r'^dashboard/$', 'dashboard_view'), url(r'^dashboard/graphs/jobs/$','dashboard_jobs_graph_view'), - url(r'^settings/', include(settings_urls)), + # TODO: Uncomment aftger 3.0 when we bring database settings endpoints back + # url(r'^settings/', include(settings_urls)), url(r'^schedules/', include(schedule_urls)), url(r'^organizations/', include(organization_urls)), url(r'^users/', include(user_urls)), diff --git a/awx/api/views.py b/awx/api/views.py index a2e5037e38..4cfcb3b4ab 100644 --- a/awx/api/views.py +++ b/awx/api/views.py @@ -112,7 +112,8 @@ class ApiV1RootView(APIView): data['authtoken'] = reverse('api:auth_token_view') data['ping'] = reverse('api:api_v1_ping_view') data['config'] = reverse('api:api_v1_config_view') - data['settings'] = reverse('api:settings_list') + # TODO: Uncomment after 3.0 when we bring database settings endpoints back + # data['settings'] = reverse('api:settings_list') data['me'] = reverse('api:user_me_list') data['dashboard'] = reverse('api:dashboard_view') data['organizations'] = reverse('api:organization_list') diff --git a/awx/main/models/notifications.py b/awx/main/models/notifications.py index 29a51cf9ac..40dcba67ac 100644 --- a/awx/main/models/notifications.py +++ b/awx/main/models/notifications.py @@ -68,6 +68,8 @@ class Notifier(CommonModel): update_fields = kwargs.get('update_fields', []) for field in filter(lambda x: self.notification_class.init_parameters[x]['type'] == "password", self.notification_class.init_parameters): + if self.notification_configuration[field].startswith("$encrypted$"): + continue if new_instance: value = self.notification_configuration[field] setattr(self, '_saved_{}_{}'.format("config", field), value) @@ -84,7 +86,6 @@ class Notifier(CommonModel): self.notification_class.init_parameters): saved_value = getattr(self, '_saved_{}_{}'.format("config", field), '') self.notification_configuration[field] = saved_value - #setattr(self.notification_configuration, field, saved_value) if 'notification_configuration' not in update_fields: update_fields.append('notification_configuration') self.save(update_fields=update_fields) diff --git a/awx/main/tests/old/settings.py b/awx/main/tests/old/settings.py index f0d7cf63ac..93ce2963a1 100644 --- a/awx/main/tests/old/settings.py +++ b/awx/main/tests/old/settings.py @@ -46,7 +46,8 @@ TEST_TOWER_SETTINGS_MANIFEST = { } @override_settings(TOWER_SETTINGS_MANIFEST=TEST_TOWER_SETTINGS_MANIFEST) -class SettingsTest(BaseTest): +@pytest.mark.skip(reason="Settings deferred to 3.1") +class SettingsPlaceholder(BaseTest): def setUp(self): super(SettingsTest, self).setUp() diff --git a/awx/main/tests/unit/api/test_views.py b/awx/main/tests/unit/api/test_views.py index 6a7668c472..a5d63906c5 100644 --- a/awx/main/tests/unit/api/test_views.py +++ b/awx/main/tests/unit/api/test_views.py @@ -16,7 +16,7 @@ class TestApiV1RootView: 'authtoken', 'ping', 'config', - 'settings', + #'settings', 'me', 'dashboard', 'organizations',