public static string ToFormatedString(this FeaturePolicyConstants.HttpFeatures directive) { return(directive switch { FeaturePolicyConstants.HttpFeatures.Accelerometer => Accelerometer, FeaturePolicyConstants.HttpFeatures.AmbientLightSensor => AmbientLightSensor, FeaturePolicyConstants.HttpFeatures.Autoplay => Autoplay, FeaturePolicyConstants.HttpFeatures.Battery => Battery, FeaturePolicyConstants.HttpFeatures.Camera => Camera, FeaturePolicyConstants.HttpFeatures.DisplayCapture => DisplayCapture, FeaturePolicyConstants.HttpFeatures.DocumentDomain => DocumentDomain, FeaturePolicyConstants.HttpFeatures.EncryptedMedia => EncryptedMedia, FeaturePolicyConstants.HttpFeatures.ExecutionWhileNotRendered => ExecutionWhileNotRendered, FeaturePolicyConstants.HttpFeatures.ExecutionWhileOutOfViewport => ExecutionWhileOutOfViewport, FeaturePolicyConstants.HttpFeatures.Fullscreen => Fullscreen, FeaturePolicyConstants.HttpFeatures.Geolocation => Geolocation, FeaturePolicyConstants.HttpFeatures.Gyroscope => Gyroscope, FeaturePolicyConstants.HttpFeatures.LayoutAnimations => LayoutAnimations, FeaturePolicyConstants.HttpFeatures.LegacyImageFormats => LegacyImageFormats, FeaturePolicyConstants.HttpFeatures.NavigationOverride => NavigationOverride, FeaturePolicyConstants.HttpFeatures.Magnetometer => Magnetometer, FeaturePolicyConstants.HttpFeatures.Microphone => Microphone, FeaturePolicyConstants.HttpFeatures.Midi => Midi, FeaturePolicyConstants.HttpFeatures.OversizedImages => OversizedImages, FeaturePolicyConstants.HttpFeatures.Payment => Payment, FeaturePolicyConstants.HttpFeatures.PictureInPicture => PictureInPicture, FeaturePolicyConstants.HttpFeatures.PublickeyCredentials => PublickeyCredentials, FeaturePolicyConstants.HttpFeatures.Speaker => Speaker, FeaturePolicyConstants.HttpFeatures.SyncXhr => SyncXhr, FeaturePolicyConstants.HttpFeatures.Usb => Usb, FeaturePolicyConstants.HttpFeatures.WakeLock => WakeLock, FeaturePolicyConstants.HttpFeatures.XrSpatialTracking => XrSpatialTracking, _ => Accelerometer });
/// <summary> /// Adds a list of features to which the provided directive is applied. /// </summary> /// <param name="directive">Directive to apply.</param> /// <param name="features">Features.</param> /// <param name="hostSources">List of source uri if the directive requires one.</param> /// <returns></returns> public SecurityHeadersBuilder AddFeaturePolicy(CommonPolicyDirective.Directive directive, FeaturePolicyConstants.HttpFeatures features, IList <Uri> hostSources = null) { if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Accelerometer)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Accelerometer, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.AmbientLightSensor)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.AmbientLightSensor, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Autoplay)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Autoplay, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Battery)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Battery, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Camera)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Camera, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.DisplayCapture)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.DisplayCapture, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.DocumentDomain)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.DocumentDomain, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.EncryptedMedia)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.EncryptedMedia, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.ExecutionWhileNotRendered)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.ExecutionWhileNotRendered, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.ExecutionWhileOutOfViewport)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.ExecutionWhileOutOfViewport, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Fullscreen)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Fullscreen, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Geolocation)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Geolocation, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Gyroscope)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Gyroscope, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Magnetometer)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Magnetometer, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Microphone)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Microphone, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Midi)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Midi, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Payment)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Payment, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.PictureInPicture)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.PictureInPicture, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.PublickeyCredentials)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.PublickeyCredentials, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Speaker)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Speaker, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.SyncXhr)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.SyncXhr, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.Usb)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.Usb, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.WakeLock)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.WakeLock, directive); } if (features.HasFlag(FeaturePolicyConstants.HttpFeatures.XrSpatialTracking)) { _features.TryAdd(FeaturePolicyConstants.HttpFeatures.XrSpatialTracking, directive); } _policy.SetHeaders[FeaturePolicyConstants.Header] = FeaturesToString(hostSources); return(this); }