From 71f89c1a4f1a58b4315ce33973946a428bc6960a Mon Sep 17 00:00:00 2001 From: Eduardo Trujillo <ed@chromabits.com> Date: Sun, 7 Jun 2020 19:02:59 -0700 Subject: [PATCH] Make CSP directives more Yaml/Json friendly --- src/Network/Http/Csp.hs | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/src/Network/Http/Csp.hs b/src/Network/Http/Csp.hs index 838f2d3..e39ebde 100644 --- a/src/Network/Http/Csp.hs +++ b/src/Network/Http/Csp.hs @@ -2,6 +2,7 @@ {-# LANGUAGE ApplicativeDo #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE DeriveGeneric #-} +{-# LANGUAGE DuplicateRecordFields #-} -- | -- @@ -40,15 +41,21 @@ type Parser = Parsec Void Text data SchemePart = SchemePart Text deriving (Show, Eq, Generic) data PortPart = SpecificPort Integer | AnyPort deriving (Show, Eq, Generic) -data HostPart = AnyHostPart | DomainHostPart Bool Text deriving (Show, Eq, Generic) +data HostPart + = AnyHostPart + | DomainHostPart + { wildcard :: Bool + , domain :: Text + } + deriving (Show, Eq, Generic) data PathPart = PathPart Text deriving (Show, Eq, Generic) instance ToCSP SchemePart where - toCSP (SchemePart scheme) = scheme + toCSP (SchemePart scheme_) = scheme_ instance FromJSON SchemePart instance ToCSP PortPart where - toCSP (SpecificPort port) = T.pack . show $ port + toCSP (SpecificPort port_) = T.pack . show $ port_ toCSP AnyPort = "*" instance FromJSON PortPart @@ -60,7 +67,7 @@ instance ToCSP HostPart where instance FromJSON HostPart instance ToCSP PathPart where - toCSP (PathPart path) = path + toCSP (PathPart path_) = path_ instance FromJSON PathPart alphaChar :: Parser Char @@ -198,7 +205,12 @@ pHashAlgorithm = choice data SourceExpression = SchemeSource SchemePart - | HostSource (Maybe SchemePart) HostPart (Maybe PortPart) (Maybe PathPart) + | HostSource + { scheme :: Maybe SchemePart + , host :: HostPart + , port :: Maybe PortPart + , path :: Maybe PathPart + } | KeywordSource Keyword | NonceSource Text | HashSource HashAlgorithm Text @@ -247,7 +259,12 @@ pSourceExpression = choice data AncestorSource = AncestorSchemeSource SchemePart - | AncestorHostSource (Maybe SchemePart) HostPart (Maybe PortPart) (Maybe PathPart) + | AncestorHostSource + { scheme :: Maybe SchemePart + , host :: HostPart + , port :: Maybe PortPart + , path :: Maybe PathPart + } | AncestorSelfSource deriving (Show, Eq, Generic) -- GitLab