From 4181c86c821660d5e34b084ebb3403596c354d2d Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Wed, 24 Apr 2024 22:33:05 +0200 Subject: [PATCH] DMARC: better text in selections. --- src/App/Page/Zone.purs | 21 ++++++++++++++------- src/App/Type/DMARC.purs | 20 ++++++++++++++++++-- src/App/Type/ResourceRecord.purs | 4 ++-- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/src/App/Page/Zone.purs b/src/App/Page/Zone.purs index e51cfeb..59f430e 100644 --- a/src/App/Page/Zone.purs +++ b/src/App/Page/Zone.purs @@ -55,7 +55,7 @@ import App.Type.ResourceRecord (ResourceRecord, emptyRR , show_qualifier, show_qualifier_char , show_mechanism_type, show_mechanism, to_mechanism , show_modifier_type, show_modifier, to_modifier - , all_qualifiers + , qualifiers , mechanism_types, qualifier_types, modifier_types) import App.Type.ResourceRecord (Mechanism, Modifier, Qualifier(..)) as RR import App.Type.DKIM as DKIM @@ -552,16 +552,23 @@ render state , Bulma.hr , Bulma.div_content [Bulma.explanation Explanations.dmarc_policy] - , Bulma.selection_field "idDMARCPolicy" "Policy" DMARC_policy (map show DMARC.policies) (show state.dmarc.p) + , Bulma.selection_field' "idDMARCPolicy" "Policy" DMARC_policy + (A.zip DMARC.policies_txt DMARC.policies_raw) + (show state.dmarc.p) , Bulma.div_content [Bulma.explanation Explanations.dmarc_sp_policy] - , Bulma.selection_field "idDMARCPolicy_sp" "Policy for subdomains" DMARC_sp_policy - (["do not provide policy advice"] <> map show DMARC.policies) (maybe "-" show state.dmarc.sp) + , Bulma.selection_field' "idDMARCPolicy_sp" "Policy for subdomains" DMARC_sp_policy + (zip_nullable DMARC.policies_txt_with_null DMARC.policies_raw) + (maybe "-" show state.dmarc.sp) , Bulma.hr , Bulma.div_content [Bulma.explanation Explanations.dmarc_adkim] - , Bulma.selection_field "idDMARCadkim" "Consistency Policy for DKIM" DMARC_adkim DMARC.consistency_policies_txt (maybe "-" show state.dmarc.adkim) + , Bulma.selection_field' "idDMARCadkim" "Consistency Policy for DKIM" DMARC_adkim + (zip_nullable DMARC.consistency_policies_txt DMARC.consistency_policies_raw) + (maybe "-" show state.dmarc.adkim) , Bulma.div_content [Bulma.explanation Explanations.dmarc_aspf] - , Bulma.selection_field "idDMARCaspf" "Consistency Policy for SPF" DMARC_aspf DMARC.consistency_policies_txt (maybe "-" show state.dmarc.aspf) + , Bulma.selection_field' "idDMARCaspf" "Consistency Policy for SPF" DMARC_aspf + (zip_nullable DMARC.consistency_policies_txt DMARC.consistency_policies_raw) + (maybe "-" show state.dmarc.aspf) , Bulma.hr , Bulma.div_content [Bulma.explanation Explanations.dmarc_pct] @@ -822,7 +829,7 @@ handleAction = case _ of SPF_Mechanism_v v -> H.modify_ _ { spf_mechanism_v = v } SPF_Modifier_t v -> H.modify_ _ { spf_modifier_t = maybe "redirect" id $ modifier_types A.!! v } SPF_Modifier_v v -> H.modify_ _ { spf_modifier_v = v } - SPF_Qualifier v -> H.modify_ _ { _currentRR { q = all_qualifiers A.!! v } } + SPF_Qualifier v -> H.modify_ _ { _currentRR { q = qualifiers A.!! v } } SPF_remove_mechanism i -> H.modify_ \s -> s { _currentRR { mechanisms = case s._currentRR.mechanisms of Just ms -> Just (remove_id i $ attach_id 0 ms) diff --git a/src/App/Type/DMARC.purs b/src/App/Type/DMARC.purs index d3a820b..10ac8b3 100644 --- a/src/App/Type/DMARC.purs +++ b/src/App/Type/DMARC.purs @@ -170,10 +170,13 @@ consistency_policies = [Strict, Relaxed] consistency_policies_txt :: Array String consistency_policies_txt = [ "Do not provide policy advice" - , "Strict" - , "Relaxed" + , "Strict: same domain" + , "Relaxed: same organizational domain" ] +consistency_policies_raw :: Array String +consistency_policies_raw = map show consistency_policies + -- | Codec for just encoding a single value of type `ConsistencyPolicy`. codecConsistencyPolicy :: CA.JsonCodec ConsistencyPolicy codecConsistencyPolicy @@ -235,6 +238,19 @@ data Policy policies :: Array Policy policies = [None, Quarantine, Reject] +policies_raw :: Array String +policies_raw = map show policies + +policies_txt :: Array String +policies_txt = + [ "None (let the receiver decide)" + , "Quarantine (high spam score, flag, etc.)" + , "Reject" + ] + +policies_txt_with_null :: Array String +policies_txt_with_null = [ "Do not provide policy advice" ] <> policies_txt + -- | Codec for just encoding a single value of type `Policy`. codecPolicy :: CA.JsonCodec Policy codecPolicy = CA.prismaticCodec "Policy" str_to_policy generic_serialization CA.string diff --git a/src/App/Type/ResourceRecord.purs b/src/App/Type/ResourceRecord.purs index 0ae8978..647f168 100644 --- a/src/App/Type/ResourceRecord.purs +++ b/src/App/Type/ResourceRecord.purs @@ -232,8 +232,8 @@ emptyRR } data Qualifier = Pass | Neutral | SoftFail | HardFail -all_qualifiers :: Array Qualifier -all_qualifiers = [Pass, Neutral, SoftFail, HardFail] +qualifiers :: Array Qualifier +qualifiers = [Pass, Neutral, SoftFail, HardFail] qualifier_types :: Array String qualifier_types = ["pass", "neutral", "soft_fail", "hard_fail"]