File tree Expand file tree Collapse file tree 3 files changed +29
-5
lines changed Expand file tree Collapse file tree 3 files changed +29
-5
lines changed Original file line number Diff line number Diff line change @@ -456,3 +456,15 @@ let securityHeadersFactory = SecurityHeadersFactory().with(referrerPolicy: refer
456456``` http
457457referrer-policy: no-referrer
458458```
459+
460+ You can also [ set a fallback policy] ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy#specify_a_fallback_policy ) .
461+
462+ ``` swift
463+ let referrerPolicyConfig = ReferrerPolicyConfiguration ([.noReferrer , .strictOriginWhenCrossOrigin ])
464+
465+ let securityHeadersFactory = SecurityHeadersFactory ().with (referrerPolicy : referrerPolicyConfig)
466+ ```
467+
468+ ``` http
469+ referrer-policy: no-referrer, strict-origin-when-cross-origin
470+ ```
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ import Vapor
22
33public struct ReferrerPolicyConfiguration : SecurityHeaderConfiguration {
44
5- public enum Options : String {
5+ public enum Directive : String {
66 case empty = " "
77 case noReferrer = " no-referrer "
88 case noReferrerWhenDowngrade = " no-referrer-when-downgrade "
@@ -14,13 +14,17 @@ public struct ReferrerPolicyConfiguration: SecurityHeaderConfiguration {
1414 case unsafeUrl = " unsafe-url "
1515 }
1616
17- private let option : Options
17+ private let directives : [ Directive ]
1818
19- public init ( _ option: Options ) {
20- self . option = option
19+ public init ( _ directive: Directive ) {
20+ self . directives = [ directive]
21+ }
22+
23+ public init ( _ directives: [ Directive ] ) {
24+ self . directives = directives
2125 }
2226
2327 func setHeader( on response: Response , from request: Request ) {
24- response. headers. replaceOrAdd ( name: . referrerPolicy, value: option . rawValue)
28+ response. headers. replaceOrAdd ( name: . referrerPolicy, value: directives . map ( { $0 . rawValue } ) . joined ( separator : " , " ) )
2529 }
2630}
Original file line number Diff line number Diff line change @@ -433,6 +433,14 @@ class HeaderTests: XCTestCase {
433433 XCTAssertEqual ( expected, response. headers [ . referrerPolicy] . first)
434434 }
435435
436+ func testHeadersWithReferrerPolicyFallbacks( ) throws {
437+ let expected = " no-referrer, strict-origin-when-cross-origin "
438+ let referrerConfig = ReferrerPolicyConfiguration ( [ . noReferrer, . strictOriginWhenCrossOrigin] )
439+ let factory = SecurityHeadersFactory ( ) . with ( referrerPolicy: referrerConfig)
440+ let response = try makeTestResponse ( for: request, securityHeadersToAdd: factory)
441+ XCTAssertEqual ( expected, response. headers [ . referrerPolicy] . first)
442+ }
443+
436444 func testApiPolicyWithAddedReferrerPolicy( ) throws {
437445 let expected = " strict-origin "
438446 let referrerConfig = ReferrerPolicyConfiguration ( . strictOrigin)
You can’t perform that action at this time.
0 commit comments