diff --git a/src/App/Page/Zone.purs b/src/App/Page/Zone.purs index ca88c48..6fe6090 100644 --- a/src/App/Page/Zone.purs +++ b/src/App/Page/Zone.purs @@ -18,7 +18,7 @@ module App.Page.Zone where import Prelude (Unit, unit, void , bind, pure , not, comparing, discard, map, show, class Show - , (+), (&&), ($), (/=), (<<<), (<>), (==), (>), (#), (=<<)) + , (+), (&&), ($), (/=), (<<<), (<>), (==), (>), (#), (=<<), (-)) import Data.Generic.Rep (class Generic) import Data.Show.Generic (genericShow) @@ -183,6 +183,8 @@ data Action | SPF_Modifier_Add | DMARC_policy Int + | DMARC_adkim Int + | DMARC_aspf Int | DKIM_hash_algo Int | DKIM_sign_algo Int @@ -514,6 +516,9 @@ render state (show state._currentRR.ttl) , Bulma.hr , Bulma.selection_field "idDMARCPolicy" "Policy" DMARC_policy (map show DMARC.policies) (show state.dmarc.p) + , Bulma.hr + , Bulma.selection_field "idDMARCadkim" "Consistency Policy for DKIM" DMARC_adkim DMARC.consistency_policies_txt_dkim (maybe "-" show state.dmarc.adkim) + , Bulma.selection_field "idDMARCaspf" "Consistency Policy for SPF" DMARC_aspf DMARC.consistency_policies_txt_spf (maybe "-" show state.dmarc.aspf) ] display_domain_side = (if state._currentRR.name == (state._domain <> ".") then "" else "." <> state._domain) @@ -765,7 +770,9 @@ handleAction = case _ of H.modify_ _ { _currentRR { modifiers = new_value }} handleAction $ ResetSPF - DMARC_policy v -> H.modify_ _ { dmarc { p = fromMaybe DMARC.None $ DMARC.policies A.!! v } } + DMARC_policy v -> H.modify_ _ { dmarc { p = fromMaybe DMARC.None $ DMARC.policies A.!! v } } + DMARC_adkim v -> H.modify_ _ { dmarc { adkim = DMARC.consistency_policies A.!! (v - 1) } } + DMARC_aspf v -> H.modify_ _ { dmarc { aspf = DMARC.consistency_policies A.!! (v - 1) } } DKIM_hash_algo v -> H.modify_ _ { dkim { h = DKIM.hash_algos A.!! v } } DKIM_sign_algo v -> H.modify_ _ { dkim { k = DKIM.sign_algos A.!! v } } diff --git a/src/App/Type/DMARC.purs b/src/App/Type/DMARC.purs index 63d0977..7d59b76 100644 --- a/src/App/Type/DMARC.purs +++ b/src/App/Type/DMARC.purs @@ -145,6 +145,24 @@ data ConsistencyPolicy -- | See https://publicsuffix.org/ for a list of organizational domains. | Relaxed +consistency_policies :: Array ConsistencyPolicy +consistency_policies = [Strict, Relaxed] + +consistency_policies_txt_spf :: Array String +consistency_policies_txt_spf + = [ "do not provide policy advice" + , "strict: \"From:\" and SPF domain must be identical" + , "relaxed: \"From:\" and SPF domain must be in the same organizational domain" + ] + +consistency_policies_txt_dkim :: Array String +consistency_policies_txt_dkim + = [ "do not provide policy advice" + , "strict: \"From:\" and DKIM domain (\"d:\") must be identical" + , "relaxed: \"From:\" and DKIM domain (\"d:\") must be in the same organizational domain" + ] + + -- | Codec for just encoding a single value of type `ConsistencyPolicy`. codecConsistencyPolicy :: CA.JsonCodec ConsistencyPolicy codecConsistencyPolicy