DMARC: all useful parameters are now configurable.

display
Philippe PITTOLI 2024-04-13 23:43:14 +02:00
parent 338b3c0811
commit 14477e5a1f
3 changed files with 28 additions and 6 deletions

View File

@ -188,6 +188,9 @@ data Action
-- | Change the temporary report size limit for DMARC. -- | Change the temporary report size limit for DMARC.
| DMARC_mail_limit String | DMARC_mail_limit String
-- | Change the requested report interval.
| DMARC_ri String
-- | Add a new mail address to the DMARC rua list. -- | Add a new mail address to the DMARC rua list.
| DMARC_rua_Add | DMARC_rua_Add
@ -261,6 +264,7 @@ type State =
, dmarc_mail :: String , dmarc_mail :: String
, dmarc_mail_limit :: Maybe Int , dmarc_mail_limit :: Maybe Int
, dmarc_ri :: Maybe Int
, dkim :: DKIM.DKIM , dkim :: DKIM.DKIM
, dmarc :: DMARC.DMARC , dmarc :: DMARC.DMARC
@ -321,6 +325,7 @@ initialState domain =
, dmarc_mail: "" , dmarc_mail: ""
, dmarc_mail_limit: Nothing , dmarc_mail_limit: Nothing
, dmarc_ri: Nothing
, current_tab: Zone , current_tab: Zone
} }
@ -559,14 +564,23 @@ render state
, Bulma.hr , Bulma.hr
, Bulma.selection_field "idDMARCfo" "When to send a report" DMARC_fo DMARC.report_occasions_txt (maybe "-" show state.dmarc.fo) , 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 , 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 "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.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.level [ Bulma.btn "New address for aggregated report" DMARC_rua_Add
, Bulma.btn "New address for specific report" DMARC_ruf_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 current_ruas = case state._currentRR.dmarc of
@ -742,6 +756,7 @@ handleAction = case _ of
, spf_modifier_v = "" , spf_modifier_v = ""
, dmarc_mail = "" , dmarc_mail = ""
, dmarc_mail_limit = Nothing , dmarc_mail_limit = Nothing
, dmarc_ri = Nothing
} }
SaveRR rr -> do SaveRR rr -> do
@ -829,6 +844,7 @@ handleAction = case _ of
DMARC_mail v -> H.modify_ _ { dmarc_mail = v } DMARC_mail v -> H.modify_ _ { dmarc_mail = v }
DMARC_mail_limit v -> H.modify_ _ { dmarc_mail_limit = Just $ fromMaybe 0 $ fromString 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 DMARC_rua_Add -> do
state <- H.get state <- H.get
let current_ruas = case state._currentRR.dmarc of 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) ] , 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 :: forall w. String -> (Int -> Action) -> Array DMARC.DMARCURI -> HH.HTML w Action
display_dmarc_mail_addresses f ms = display_dmarc_mail_addresses t f ms =
Bulma.box_ C.has_background_warning_light 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 where
render_dmarcuri_row :: (Tuple Int DMARC.DMARCURI) -> HH.HTML w Action render_dmarcuri_row :: (Tuple Int DMARC.DMARCURI) -> HH.HTML w Action
render_dmarcuri_row (Tuple i m) = HH.tr_ render_dmarcuri_row (Tuple i m) = HH.tr_

View File

@ -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 :: forall w i. Array (HH.HTML w i)
dkim_default_algorithms = dkim_default_algorithms =

View File

@ -41,7 +41,6 @@ type DMARC
, fo :: Maybe ReportOccasion , fo :: Maybe ReportOccasion
-- | rua= Optional. Addresses to which aggregate feedback is to be sent. -- | rua= Optional. Addresses to which aggregate feedback is to be sent.
-- | **TODO**: A size limit can be provided (in KB).
, rua :: Maybe (Array DMARCURI) , rua :: Maybe (Array DMARCURI)
-- | ruf= Optional. Addresses to which message-specific failure information is to be reported. -- | ruf= Optional. Addresses to which message-specific failure information is to be reported.