def get_queryset(self): self.category_slug = self.kwargs.get('category_slug', 'all') all_category_slugs = settings_registry.get_registered_categories( features_enabled=get_licensed_features()).keys() for slug_to_delete in VERSION_SPECIFIC_CATEGORIES_TO_EXCLUDE[ get_request_version(self.request)]: all_category_slugs.remove(slug_to_delete) if self.request.user.is_superuser or getattr( self.request.user, 'is_system_auditor', False): category_slugs = all_category_slugs else: category_slugs = {'user'} if self.category_slug not in all_category_slugs: raise Http404 if self.category_slug not in category_slugs: raise PermissionDenied() registered_settings = settings_registry.get_registered_settings( category_slug=self.category_slug, read_only=False, features_enabled=get_licensed_features(), slugs_to_ignore=VERSION_SPECIFIC_CATEGORIES_TO_EXCLUDE[ get_request_version(self.request)]) if self.category_slug == 'user': return Setting.objects.filter(key__in=registered_settings, user=self.request.user) else: return Setting.objects.filter(key__in=registered_settings, user__isnull=True)
def get_fields(self): fields = super(SettingSingletonSerializer, self).get_fields() try: category_slug = self.context['view'].kwargs.get('category_slug', 'all') except (KeyError, AttributeError): category_slug = '' for key in settings_registry.get_registered_settings(category_slug=category_slug): if self.instance and not hasattr(self.instance, key): continue extra_kwargs = {} # Make LICENSE read-only here; LICENSE is only updated via /api/v2/config/ if key == 'LICENSE': extra_kwargs['read_only'] = True field = settings_registry.get_setting_field(key, mixin_class=SettingFieldMixin, for_user=bool(category_slug == 'user'), **extra_kwargs) fields[key] = field return fields
def post(self, request, *args, **kwargs): defaults = dict() for key in settings_registry.get_registered_settings( category_slug='logging'): try: defaults[key] = settings_registry.get_setting_field( key).get_default() except serializers.SkipField: defaults[key] = None obj = type('Settings', (object, ), defaults)() serializer = self.get_serializer(obj, data=request.data) serializer.is_valid(raise_exception=True) # Special validation specific to logging test. errors = {} for key in ['LOG_AGGREGATOR_TYPE', 'LOG_AGGREGATOR_HOST']: if not request.data.get(key, ''): errors[key] = 'This field is required.' if errors: raise ValidationError(errors) if request.data.get('LOG_AGGREGATOR_PASSWORD', '').startswith('$encrypted$'): serializer.validated_data['LOG_AGGREGATOR_PASSWORD'] = getattr( settings, 'LOG_AGGREGATOR_PASSWORD', '') try: class MockSettings: pass mock_settings = MockSettings() for k, v in serializer.validated_data.items(): setattr(mock_settings, k, v) mock_settings.LOG_AGGREGATOR_LEVEL = 'DEBUG' if mock_settings.LOG_AGGREGATOR_PROTOCOL.upper() == 'UDP': UDPHandler.perform_test(mock_settings) return Response(status=status.HTTP_201_CREATED) else: BaseHTTPSHandler.perform_test(mock_settings) except LoggingConnectivityException as e: return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return Response(status=status.HTTP_200_OK)
def handle(self, *args, **options): self.verbosity = int(options.get('verbosity', 1)) self.dry_run = bool(options.get('dry_run', False)) self.skip_errors = bool(options.get('skip_errors', False)) self.no_comment = bool(options.get('no_comment', False)) self.comment_only = bool(options.get('comment_only', False)) self.backup_suffix = options.get('backup_suffix', '') self.categories = options.get('category', None) or ['all'] self.style.HEADING = self.style.MIGRATE_HEADING self.style.LABEL = self.style.MIGRATE_LABEL self.style.OK = self.style.SQL_FIELD self.style.SKIP = self.style.WARNING self.style.VALUE = self.style.SQL_KEYWORD # Determine if any categories provided are invalid. category_slugs = [] invalid_categories = [] for category in self.categories: category_slug = slugify(category) if category_slug in settings_registry.get_registered_categories(): if category_slug not in category_slugs: category_slugs.append(category_slug) else: if category not in invalid_categories: invalid_categories.append(category) if len(invalid_categories) == 1: raise CommandError('Invalid setting category: {}'.format( invalid_categories[0])) elif len(invalid_categories) > 1: raise CommandError('Invalid setting categories: {}'.format( ', '.join(invalid_categories))) # Build a list of all settings to be migrated. registered_settings = [] for category_slug in category_slugs: for registered_setting in settings_registry.get_registered_settings( category_slug=category_slug, read_only=False): if registered_setting not in registered_settings: registered_settings.append(registered_setting) self._migrate_settings(registered_settings)
def get_object(self): settings_qs = self.get_queryset() registered_settings = settings_registry.get_registered_settings( category_slug=self.category_slug, ) all_settings = {} for setting in settings_qs: all_settings[setting.key] = setting.value for key in registered_settings: if key in all_settings or self.category_slug == 'changed': continue try: field = settings_registry.get_setting_field( key, for_user=bool(self.category_slug == 'user')) all_settings[key] = field.get_default() except serializers.SkipField: all_settings[key] = None all_settings[ 'user'] = self.request.user if self.category_slug == 'user' else None obj = type('Settings', (object, ), all_settings)() self.check_object_permissions(self.request, obj) return obj
def get_queryset(self): self.category_slug = self.kwargs.get('category_slug', 'all') all_category_slugs = list( settings_registry.get_registered_categories().keys()) if self.request.user.is_superuser or getattr( self.request.user, 'is_system_auditor', False): category_slugs = all_category_slugs else: category_slugs = {'user'} if self.category_slug not in all_category_slugs: raise Http404 if self.category_slug not in category_slugs: raise PermissionDenied() registered_settings = settings_registry.get_registered_settings( category_slug=self.category_slug, read_only=False) if self.category_slug == 'user': return Setting.objects.filter(key__in=registered_settings, user=self.request.user) else: return Setting.objects.filter(key__in=registered_settings, user__isnull=True)
def get_object(self): settings_qs = self.get_queryset() registered_settings = settings_registry.get_registered_settings( category_slug=self.category_slug, features_enabled=get_licensed_features(), slugs_to_ignore=VERSION_SPECIFIC_CATEGORIES_TO_EXCLUDE[ get_request_version(self.request)]) all_settings = {} for setting in settings_qs: all_settings[setting.key] = setting.value for key in registered_settings: if key in all_settings or self.category_slug == 'changed': continue try: field = settings_registry.get_setting_field( key, for_user=bool(self.category_slug == 'user')) all_settings[key] = field.get_default() except serializers.SkipField: all_settings[key] = None all_settings[ 'user'] = self.request.user if self.category_slug == 'user' else None obj = type('Settings', (object, ), all_settings)() self.check_object_permissions(self.request, obj) return obj