From 14477e5a1fdc4e3763712f3f156827890da8716a Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Sat, 13 Apr 2024 23:43:14 +0200 Subject: [PATCH] DMARC: all useful parameters are now configurable. --- src/App/Page/Zone.purs | 27 ++++++++++++++++++++++----- src/App/Text/Explanations.purs | 6 ++++++ src/App/Type/DMARC.purs | 1 - 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/App/Page/Zone.purs b/src/App/Page/Zone.purs index b03389d..6040f09 100644 --- a/src/App/Page/Zone.purs +++ b/src/App/Page/Zone.purs @@ -188,6 +188,9 @@ data Action -- | Change the temporary report size limit for DMARC. | DMARC_mail_limit String + -- | Change the requested report interval. + | DMARC_ri String + -- | Add a new mail address to the DMARC rua list. | DMARC_rua_Add @@ -261,6 +264,7 @@ type State = , dmarc_mail :: String , dmarc_mail_limit :: Maybe Int + , dmarc_ri :: Maybe Int , dkim :: DKIM.DKIM , dmarc :: DMARC.DMARC @@ -321,6 +325,7 @@ initialState domain = , dmarc_mail: "" , dmarc_mail_limit: Nothing + , dmarc_ri: Nothing , current_tab: Zone } @@ -559,14 +564,23 @@ render state , Bulma.hr , Bulma.selection_field "idDMARCfo" "When to send a report" DMARC_fo DMARC.report_occasions_txt (maybe "-" show state.dmarc.fo) + + , Bulma.hr + , Bulma.div_content [Bulma.explanation Explanations.dmarc_contact] + , maybe (Bulma.p "There is no address to send aggregated reports to.") + (display_dmarc_mail_addresses "Addresses to contact for aggregated reports" DMARC_remove_rua) current_ruas + , maybe (Bulma.p "There is no address to send detailed reports to.") + (display_dmarc_mail_addresses "Addresses to contact for detailed reports" DMARC_remove_ruf) current_rufs + , Bulma.hr - , maybe (Bulma.p "There is no address to send aggragated reports to.") (display_dmarc_mail_addresses DMARC_remove_rua) current_ruas - , maybe (Bulma.p "There is no address to send detailed reports to.") (display_dmarc_mail_addresses DMARC_remove_ruf) current_rufs , Bulma.box_input "idDMARCmail" "Address to contact" "admin@example.com" DMARC_mail state.dmarc_mail , Bulma.box_input "idDMARCmaillimit" "Report size limit (in KB)" "2000" DMARC_mail_limit (maybe "0" show state.dmarc_mail_limit) , Bulma.level [ Bulma.btn "New address for aggregated report" DMARC_rua_Add , Bulma.btn "New address for specific report" DMARC_ruf_Add ] [] + + , Bulma.hr + , Bulma.box_input "idDMARCri" "Report interval (in seconds)" "86400" DMARC_ri (maybe "0" show state.dmarc_ri) ] current_ruas = case state._currentRR.dmarc of @@ -742,6 +756,7 @@ handleAction = case _ of , spf_modifier_v = "" , dmarc_mail = "" , dmarc_mail_limit = Nothing + , dmarc_ri = Nothing } SaveRR rr -> do @@ -829,6 +844,7 @@ handleAction = case _ of DMARC_mail v -> H.modify_ _ { dmarc_mail = v } DMARC_mail_limit v -> H.modify_ _ { dmarc_mail_limit = Just $ fromMaybe 0 $ fromString v } + DMARC_ri v -> H.modify_ _ { dmarc_ri = fromString v } DMARC_rua_Add -> do state <- H.get let current_ruas = case state._currentRR.dmarc of @@ -1124,10 +1140,11 @@ display_modifiers ms = , HH.td_ [ Bulma.alert_btn "x" (SPF_remove_modifier i) ] ] -display_dmarc_mail_addresses :: forall w. (Int -> Action) -> Array DMARC.DMARCURI -> HH.HTML w Action -display_dmarc_mail_addresses f ms = +display_dmarc_mail_addresses :: forall w. String -> (Int -> Action) -> Array DMARC.DMARCURI -> HH.HTML w Action +display_dmarc_mail_addresses t f ms = Bulma.box_ C.has_background_warning_light - [ Bulma.table [] [ Bulma.dmarc_dmarcuri_table_header, HH.tbody_ $ map render_dmarcuri_row $ attach_id 0 ms] ] + [ Bulma.h3 t + , Bulma.table [] [ Bulma.dmarc_dmarcuri_table_header, HH.tbody_ $ map render_dmarcuri_row $ attach_id 0 ms] ] where render_dmarcuri_row :: (Tuple Int DMARC.DMARCURI) -> HH.HTML w Action render_dmarcuri_row (Tuple i m) = HH.tr_ diff --git a/src/App/Text/Explanations.purs b/src/App/Text/Explanations.purs index 415a253..c63b088 100644 --- a/src/App/Text/Explanations.purs +++ b/src/App/Text/Explanations.purs @@ -227,6 +227,12 @@ dmarc_aspf = ] ] +dmarc_contact :: forall w i. Array (HH.HTML w i) +dmarc_contact = + [ Bulma.p """ + In case you want to receive error reports, enter email addresses that should receive either an aggregated report or a detailed report of the occurring errors. + """ + ] dkim_default_algorithms :: forall w i. Array (HH.HTML w i) dkim_default_algorithms = diff --git a/src/App/Type/DMARC.purs b/src/App/Type/DMARC.purs index 6c7b482..8360ab5 100644 --- a/src/App/Type/DMARC.purs +++ b/src/App/Type/DMARC.purs @@ -41,7 +41,6 @@ type DMARC , fo :: Maybe ReportOccasion -- | rua= Optional. Addresses to which aggregate feedback is to be sent. - -- | **TODO**: A size limit can be provided (in KB). , rua :: Maybe (Array DMARCURI) -- | ruf= Optional. Addresses to which message-specific failure information is to be reported.