mirror of
https://github.com/ansible/awx.git
synced 2024-11-01 08:21:15 +03:00
Merge pull request #14 from jangsutsr/7256_prevent_db_changes_for_read_only_configs
Prevent db changes for read only configs
This commit is contained in:
commit
19062d1193
@ -116,6 +116,9 @@ class SettingsRegistry(object):
|
|||||||
def is_setting_encrypted(self, setting):
|
def is_setting_encrypted(self, setting):
|
||||||
return bool(self._registry.get(setting, {}).get('encrypted', False))
|
return bool(self._registry.get(setting, {}).get('encrypted', False))
|
||||||
|
|
||||||
|
def is_setting_read_only(self, setting):
|
||||||
|
return bool(self._registry.get(setting, {}).get('read_only', False))
|
||||||
|
|
||||||
def get_setting_field(self, setting, mixin_class=None, for_user=False, **kwargs):
|
def get_setting_field(self, setting, mixin_class=None, for_user=False, **kwargs):
|
||||||
from rest_framework.fields import empty
|
from rest_framework.fields import empty
|
||||||
field_kwargs = {}
|
field_kwargs = {}
|
||||||
|
@ -122,16 +122,18 @@ class SettingSingletonDetail(RetrieveUpdateDestroyAPIView):
|
|||||||
user = self.request.user if self.category_slug == 'user' else None
|
user = self.request.user if self.category_slug == 'user' else None
|
||||||
settings_change_list = []
|
settings_change_list = []
|
||||||
for key, value in serializer.validated_data.items():
|
for key, value in serializer.validated_data.items():
|
||||||
if key == 'LICENSE':
|
if key == 'LICENSE' or settings_registry.is_setting_read_only(key):
|
||||||
continue
|
continue
|
||||||
if settings_registry.is_setting_encrypted(key) and isinstance(value, basestring) and value.startswith('$encrypted$'):
|
if settings_registry.is_setting_encrypted(key) and \
|
||||||
|
isinstance(value, basestring) and \
|
||||||
|
value.startswith('$encrypted$'):
|
||||||
continue
|
continue
|
||||||
setattr(serializer.instance, key, value)
|
setattr(serializer.instance, key, value)
|
||||||
setting = settings_qs.filter(key=key).order_by('pk').first()
|
setting = settings_qs.filter(key=key).order_by('pk').first()
|
||||||
if not setting:
|
if not setting:
|
||||||
setting = Setting.objects.create(key=key, user=user, value=value)
|
setting = Setting.objects.create(key=key, user=user, value=value)
|
||||||
settings_change_list.append(key)
|
settings_change_list.append(key)
|
||||||
elif setting.value != value or type(setting.value) != type(value):
|
elif setting.value != value:
|
||||||
setting.value = value
|
setting.value = value
|
||||||
setting.save(update_fields=['value'])
|
setting.save(update_fields=['value'])
|
||||||
settings_change_list.append(key)
|
settings_change_list.append(key)
|
||||||
|
Loading…
Reference in New Issue
Block a user