public static string ToFormatedString(this CommonPolicyDirective.Directive directive) { return(directive switch { CommonPolicyDirective.Directive.AllowAll => AllowAll, CommonPolicyDirective.Directive.AllowSelf => AllowSelf, CommonPolicyDirective.Directive.AllowSrc => AllowSrc, CommonPolicyDirective.Directive.DenyAll => DenyAll, CommonPolicyDirective.Directive.AllowOrigin => AllowOrigin, _ => DenyAll, });
/// <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); }
/// <summary> /// Adds a list of content security to which the provided directive is applied. /// </summary> /// <param name="directive">Directive to apply.</param> /// <param name="fetchDirective">Content security fetch directive.</param> /// <param name="hostSources">List of uri if the directive requires one.</param> /// <param name="schemeSources">List of scheme source authorized.</param> /// <param name="reportOnly">Indicates whether the rules are only there to generate a report.</param> /// <returns></returns> public SecurityHeadersBuilder AddContentSecurityPolicy(CommonPolicyDirective.Directive directive, ContentSecurityPolicyConstants.FetchDirectives fetchDirective, CommonPolicySchemeSource.SchemeSources schemeSources, IList <Uri> hostSources = null, bool reportOnly = true) { if (reportOnly && _reportUri == null) { throw new ReportUriMissingException(); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ChildSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ChildSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ConnectSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ConnectSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.DefaultSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.DefaultSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.FontSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.FontSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.FrameSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.FrameSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ImgSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ImgSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ManifestSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ManifestSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.MediaSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.MediaSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ObjectSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ObjectSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.PrefetchSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.PrefetchSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ScriptSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ScriptSrc, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ScriptSrcAttr)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ScriptSrcAttr, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.ScriptSrcElem)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.ScriptSrcElem, directive); } if (fetchDirective.HasFlag(ContentSecurityPolicyConstants.FetchDirectives.WorkerSrc)) { _directives.TryAdd(ContentSecurityPolicyConstants.FetchDirectives.WorkerSrc, directive); } string header = ContentSecurityToString(hostSources); header += SchemeSourceToString(schemeSources); if (_reportUri != null) { header += "; " + CommonPolicyDirective.ReportUri + " " + _reportUri.AbsoluteUri; } if (reportOnly) { _policy.SetHeaders[ContentSecurityPolicyConstants.HeaderReportOnly] = header; } else { _policy.SetHeaders[ContentSecurityPolicyConstants.Header] = header; } return(this); }