Quote.
This commit is contained in:
parent
3edb7b94cc
commit
dcb0379858
6 changed files with 132 additions and 133 deletions
|
@ -206,16 +206,12 @@ render { current_tab, authenticationForm, passwordRecoveryForm, newPasswordForm,
|
||||||
auth_form = [ Web.h3 "Authentication", render_auth_form ]
|
auth_form = [ Web.h3 "Authentication", render_auth_form ]
|
||||||
passrecovery_form =
|
passrecovery_form =
|
||||||
[ Web.h3 "You forgot your password (or your login)"
|
[ Web.h3 "You forgot your password (or your login)"
|
||||||
, Web.div_content []
|
, Web.quote [ Web.p "Enter either your login or email and you'll receive a recovery token." ]
|
||||||
[ Web.p "Enter either your login or email and you'll receive a recovery token."
|
|
||||||
]
|
|
||||||
, render_password_recovery_form
|
, render_password_recovery_form
|
||||||
]
|
]
|
||||||
newpass_form =
|
newpass_form =
|
||||||
[ Web.h3 "You got the password recovery mail"
|
[ Web.h3 "You got the password recovery mail"
|
||||||
, Web.div_content []
|
, Web.quote [ Web.p "Nice! You get to choose your new password." ]
|
||||||
[ Web.p "Nice! You get to choose your new password."
|
|
||||||
]
|
|
||||||
, render_new_password_form
|
, render_new_password_form
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -67,9 +67,9 @@ render _ = HH.div_
|
||||||
where
|
where
|
||||||
url_linuxfr = "https://linuxfr.org/news/netlibre-un-service-libre-et-un-nom-de-domaine-gratuit"
|
url_linuxfr = "https://linuxfr.org/news/netlibre-un-service-libre-et-un-nom-de-domaine-gratuit"
|
||||||
title = Web.h3
|
title = Web.h3
|
||||||
expl content = Web.div_content [] [ Web.explanation content ]
|
expl content = Web.quote [ Web.explanation content ]
|
||||||
p = Web.p
|
p = Web.p
|
||||||
b x = Web.column_ [ Web.box [ Web.div_content [] x ] ]
|
b x = Web.column_ [ Web.box [ Web.quote x ] ]
|
||||||
|
|
||||||
render_description = Web.columns_ [ render_basics, render_no_expert, render_no_housing ]
|
render_description = Web.columns_ [ render_basics, render_no_expert, render_no_housing ]
|
||||||
render_update_why_and_contact = Web.columns_ [ render_updates, render_why, render_contact ]
|
render_update_why_and_contact = Web.columns_ [ render_updates, render_why, render_contact ]
|
||||||
|
|
|
@ -88,7 +88,7 @@ render { mailValidationForm }
|
||||||
b e = Web.column_ [ Web.box e ]
|
b e = Web.column_ [ Web.box e ]
|
||||||
mail_validation_form
|
mail_validation_form
|
||||||
= [ Web.h3 "Verify your account"
|
= [ Web.h3 "Verify your account"
|
||||||
, Web.div_content [] [Web.explanation [Web.p "Email addresses must be validated within 30 minutes."]]
|
, Web.quote [Web.p "Email addresses must be validated within 30 minutes."]
|
||||||
, render_register_form
|
, render_register_form
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -117,17 +117,17 @@ current_rr_modal selected_domain form rr_modal
|
||||||
|
|
||||||
render_introduction_text :: AcceptedRRTypes -> HH.HTML w i
|
render_introduction_text :: AcceptedRRTypes -> HH.HTML w i
|
||||||
render_introduction_text = case _ of
|
render_introduction_text = case _ of
|
||||||
A -> Web.div_content [] [Web.explanation Explanations.a_introduction]
|
A -> Web.quote Explanations.a_introduction
|
||||||
AAAA -> Web.div_content [] [Web.explanation Explanations.aaaa_introduction]
|
AAAA -> Web.quote Explanations.aaaa_introduction
|
||||||
TXT -> Web.div_content [] [Web.explanation Explanations.txt_introduction]
|
TXT -> Web.quote Explanations.txt_introduction
|
||||||
CNAME -> Web.div_content [] [Web.explanation Explanations.cname_introduction]
|
CNAME -> Web.quote Explanations.cname_introduction
|
||||||
NS -> Web.div_content [] [Web.explanation Explanations.ns_introduction]
|
NS -> Web.quote Explanations.ns_introduction
|
||||||
_ -> HH.p_ []
|
_ -> HH.p_ []
|
||||||
|
|
||||||
modal_content_mx :: Array (HH.HTML w i)
|
modal_content_mx :: Array (HH.HTML w i)
|
||||||
modal_content_mx =
|
modal_content_mx =
|
||||||
[ render_errors
|
[ render_errors
|
||||||
, Web.div_content [] [Web.explanation Explanations.mx_introduction]
|
, Web.quote Explanations.mx_introduction
|
||||||
, side_text_for_name_input "domainMX"
|
, side_text_for_name_input "domainMX"
|
||||||
, Web.input_with_side_text "domainMX" "" "www"
|
, Web.input_with_side_text "domainMX" "" "www"
|
||||||
(action_update_form <<< Field.Domain)
|
(action_update_form <<< Field.Domain)
|
||||||
|
@ -147,7 +147,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
modal_content_caa :: Array (HH.HTML w i)
|
modal_content_caa :: Array (HH.HTML w i)
|
||||||
modal_content_caa =
|
modal_content_caa =
|
||||||
[ render_errors
|
[ render_errors
|
||||||
, Web.div_content [] [Web.explanation Explanations.caa_introduction]
|
, Web.quote Explanations.caa_introduction
|
||||||
, side_text_for_name_input "domainCAA"
|
, side_text_for_name_input "domainCAA"
|
||||||
, Web.input_with_side_text "domainCAA" "" "www"
|
, Web.input_with_side_text "domainCAA" "" "www"
|
||||||
(action_update_form <<< Field.Domain)
|
(action_update_form <<< Field.Domain)
|
||||||
|
@ -172,7 +172,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
|
|
||||||
modal_content_srv :: Array (HH.HTML w i)
|
modal_content_srv :: Array (HH.HTML w i)
|
||||||
modal_content_srv =
|
modal_content_srv =
|
||||||
[ Web.div_content [] [Web.explanation Explanations.srv_introduction]
|
[ Web.quote Explanations.srv_introduction
|
||||||
, render_errors
|
, render_errors
|
||||||
, Web.box_input ("ttlSRV") "TTL" "1800"
|
, Web.box_input ("ttlSRV") "TTL" "1800"
|
||||||
(action_update_form <<< Field.TTL)
|
(action_update_form <<< Field.TTL)
|
||||||
|
@ -188,12 +188,12 @@ current_rr_modal selected_domain form rr_modal
|
||||||
, Web.box_input ("portSRV") "Port of the service" "5061"
|
, Web.box_input ("portSRV") "Port of the service" "5061"
|
||||||
(action_update_form <<< Field.Port)
|
(action_update_form <<< Field.Port)
|
||||||
(maybe "" show form._rr.port)
|
(maybe "" show form._rr.port)
|
||||||
, Web.div_content [] [Web.explanation [Web.p "The priority field is a numeric value that indicates the preference of the server (lower values indicate higher priority)."]]
|
, Web.quote [Web.p "The priority field is a numeric value that indicates the preference of the server (lower values indicate higher priority)."]
|
||||||
, Web.box_input ("prioritySRV") "Priority" "10"
|
, Web.box_input ("prioritySRV") "Priority" "10"
|
||||||
(action_update_form <<< Field.Priority)
|
(action_update_form <<< Field.Priority)
|
||||||
(maybe "" show form._rr.priority)
|
(maybe "" show form._rr.priority)
|
||||||
-- Web.div_content [] [Web.explanation Explanations.spf_introduction], Web.p "Modifiers provide additional instructions, such as explanations for SPF failures or redirecting SPF checks to another domain."
|
-- Web.quote Explanations.spf_introduction, Web.p "Modifiers provide additional instructions, such as explanations for SPF failures or redirecting SPF checks to another domain."
|
||||||
, Web.div_content [] [Web.explanation [Web.p "The weight field is a relative weight used when multiple servers have the same priority, determining how often they should be used."]]
|
, Web.quote [Web.p "The weight field is a relative weight used when multiple servers have the same priority, determining how often they should be used."]
|
||||||
, Web.box_input ("weightSRV") "Weight" "100"
|
, Web.box_input ("weightSRV") "Weight" "100"
|
||||||
(action_update_form <<< Field.Weight)
|
(action_update_form <<< Field.Weight)
|
||||||
(maybe "" show form._rr.weight)
|
(maybe "" show form._rr.weight)
|
||||||
|
@ -201,7 +201,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
|
|
||||||
modal_content_spf :: Array (HH.HTML w i)
|
modal_content_spf :: Array (HH.HTML w i)
|
||||||
modal_content_spf =
|
modal_content_spf =
|
||||||
[ Web.div_content [] [Web.explanation Explanations.spf_introduction]
|
[ Web.quote Explanations.spf_introduction
|
||||||
, render_errors
|
, render_errors
|
||||||
, side_text_for_name_input "domainSPF"
|
, side_text_for_name_input "domainSPF"
|
||||||
, Web.input_with_side_text "domainSPF" "" "Let this alone."
|
, Web.input_with_side_text "domainSPF" "" "Let this alone."
|
||||||
|
@ -216,7 +216,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
-- Just v -> Web.box_input "vSPF" "Version" "spf1" (action_update_form <<< Field.SPF_v) v
|
-- Just v -> Web.box_input "vSPF" "Version" "spf1" (action_update_form <<< Field.SPF_v) v
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.box_with_tag [C.has_background_info_light] tag_mechanisms
|
, Web.box_with_tag [C.has_background_info_light] tag_mechanisms
|
||||||
[ Web.div_content [] [Web.explanation [Web.p "Mechanisms specify which mail servers are allowed to send mail for the domain and how to evaluate the sending mail server’s IP address."] ]
|
[ Web.quote [Web.p "Mechanisms specify which mail servers are allowed to send mail for the domain and how to evaluate the sending mail server’s IP address."]
|
||||||
, maybe (Web.p "You don't have any mechanism.") (Table.display_mechanisms (action_update_rr <<< SPF_remove_mechanism)) form._rr.mechanisms
|
, maybe (Web.p "You don't have any mechanism.") (Table.display_mechanisms (action_update_rr <<< SPF_remove_mechanism)) form._rr.mechanisms
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.h4 "New mechanism"
|
, Web.h4 "New mechanism"
|
||||||
|
@ -229,7 +229,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
]
|
]
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.box_with_tag [C.has_background_success_light] tag_modifiers
|
, Web.box_with_tag [C.has_background_success_light] tag_modifiers
|
||||||
[ Web.div_content [] [Web.explanation [Web.p "Modifiers provide additional instructions, such as explanations for SPF failures or redirecting SPF checks to another domain."] ]
|
[ Web.quote [Web.p "Modifiers provide additional instructions, such as explanations for SPF failures or redirecting SPF checks to another domain."]
|
||||||
, maybe (Web.p "You don't have any modifier.") (Table.display_modifiers (action_update_rr <<< SPF_remove_modifier)) form._rr.modifiers
|
, maybe (Web.p "You don't have any modifier.") (Table.display_modifiers (action_update_rr <<< SPF_remove_modifier)) form._rr.modifiers
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.h4 "New modifier"
|
, Web.h4 "New modifier"
|
||||||
|
@ -242,7 +242,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.box
|
, Web.box
|
||||||
[ Web.h3 "Default behavior"
|
[ Web.h3 "Default behavior"
|
||||||
, Web.div_content [] [Web.explanation Explanations.spf_default_behavior]
|
, Web.quote Explanations.spf_default_behavior
|
||||||
, Web.selection (action_update_rr <<< SPF_Qualifier) qualifier_types (maybe default_qualifier_str show_qualifier form._rr.q)
|
, Web.selection (action_update_rr <<< SPF_Qualifier) qualifier_types (maybe default_qualifier_str show_qualifier form._rr.q)
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -255,7 +255,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
|
|
||||||
modal_content_dkim :: Array (HH.HTML w i)
|
modal_content_dkim :: Array (HH.HTML w i)
|
||||||
modal_content_dkim =
|
modal_content_dkim =
|
||||||
[ Web.div_content [] [Web.explanation Explanations.dkim_introduction]
|
[ Web.quote Explanations.dkim_introduction
|
||||||
, render_errors
|
, render_errors
|
||||||
, side_text_for_name_input "domainDKIM"
|
, side_text_for_name_input "domainDKIM"
|
||||||
, Web.input_with_side_text "domainDKIM" "" "default._domainkey"
|
, Web.input_with_side_text "domainDKIM" "" "default._domainkey"
|
||||||
|
@ -266,7 +266,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
(action_update_form <<< Field.TTL)
|
(action_update_form <<< Field.TTL)
|
||||||
(show form._rr.ttl)
|
(show form._rr.ttl)
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.div_content [] [Web.explanation Explanations.dkim_default_algorithms]
|
, Web.quote Explanations.dkim_default_algorithms
|
||||||
, Web.selection_field "idDKIMSignature" "Signature algo"
|
, Web.selection_field "idDKIMSignature" "Signature algo"
|
||||||
(action_update_rr <<< DKIM_sign_algo)
|
(action_update_rr <<< DKIM_sign_algo)
|
||||||
(map show DKIM.sign_algos)
|
(map show DKIM.sign_algos)
|
||||||
|
@ -281,7 +281,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
|
|
||||||
modal_content_dmarc :: Array (HH.HTML w i)
|
modal_content_dmarc :: Array (HH.HTML w i)
|
||||||
modal_content_dmarc =
|
modal_content_dmarc =
|
||||||
[ Web.div_content [] [Web.explanation Explanations.dmarc_introduction]
|
[ Web.quote Explanations.dmarc_introduction
|
||||||
, render_errors
|
, render_errors
|
||||||
, side_text_for_name_input "domainDMARC"
|
, side_text_for_name_input "domainDMARC"
|
||||||
, Web.input_with_side_text "domainDMARC" "" "_dmarc"
|
, Web.input_with_side_text "domainDMARC" "" "_dmarc"
|
||||||
|
@ -291,27 +291,27 @@ current_rr_modal selected_domain form rr_modal
|
||||||
, Web.box_input "ttlDMARC" "TTL" "1800" (action_update_form <<< Field.TTL) (show form._rr.ttl)
|
, Web.box_input "ttlDMARC" "TTL" "1800" (action_update_form <<< Field.TTL) (show form._rr.ttl)
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_policy]
|
, Web.quote Explanations.dmarc_policy
|
||||||
, Web.selection_field' "idDMARCPolicy" "Policy" (action_update_rr <<< DMARC_policy)
|
, Web.selection_field' "idDMARCPolicy" "Policy" (action_update_rr <<< DMARC_policy)
|
||||||
(A.zip DMARC.policies_txt DMARC.policies_raw)
|
(A.zip DMARC.policies_txt DMARC.policies_raw)
|
||||||
(show form.tmp.dmarc.p)
|
(show form.tmp.dmarc.p)
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_sp_policy]
|
, Web.quote Explanations.dmarc_sp_policy
|
||||||
, Web.selection_field' "idDMARCPolicy_sp" "Policy for subdomains" (action_update_rr <<< DMARC_sp_policy)
|
, Web.selection_field' "idDMARCPolicy_sp" "Policy for subdomains" (action_update_rr <<< DMARC_sp_policy)
|
||||||
(zip_nullable DMARC.policies_txt_with_null DMARC.policies_raw)
|
(zip_nullable DMARC.policies_txt_with_null DMARC.policies_raw)
|
||||||
(maybe "-" show form.tmp.dmarc.sp)
|
(maybe "-" show form.tmp.dmarc.sp)
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_adkim]
|
, Web.quote Explanations.dmarc_adkim
|
||||||
, Web.selection_field' "idDMARCadkim" "Consistency Policy for DKIM" (action_update_rr <<< DMARC_adkim)
|
, Web.selection_field' "idDMARCadkim" "Consistency Policy for DKIM" (action_update_rr <<< DMARC_adkim)
|
||||||
(zip_nullable DMARC.consistency_policies_txt DMARC.consistency_policies_raw)
|
(zip_nullable DMARC.consistency_policies_txt DMARC.consistency_policies_raw)
|
||||||
(maybe "-" show form.tmp.dmarc.adkim)
|
(maybe "-" show form.tmp.dmarc.adkim)
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_aspf]
|
, Web.quote Explanations.dmarc_aspf
|
||||||
, Web.selection_field' "idDMARCaspf" "Consistency Policy for SPF" (action_update_rr <<< DMARC_aspf)
|
, Web.selection_field' "idDMARCaspf" "Consistency Policy for SPF" (action_update_rr <<< DMARC_aspf)
|
||||||
(zip_nullable DMARC.consistency_policies_txt DMARC.consistency_policies_raw)
|
(zip_nullable DMARC.consistency_policies_txt DMARC.consistency_policies_raw)
|
||||||
(maybe "-" show form.tmp.dmarc.aspf)
|
(maybe "-" show form.tmp.dmarc.aspf)
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_pct]
|
, Web.quote Explanations.dmarc_pct
|
||||||
, Web.box_input "idDMARCpct" "Sample rate (between 0 and 100)" "100" (action_update_rr <<< DMARC_pct) (maybe "100" show form.tmp.dmarc.pct)
|
, Web.box_input "idDMARCpct" "Sample rate (between 0 and 100)" "100" (action_update_rr <<< DMARC_pct) (maybe "100" show form.tmp.dmarc.pct)
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
|
@ -320,7 +320,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
(maybe "-" show form.tmp.dmarc.fo)
|
(maybe "-" show form.tmp.dmarc.fo)
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_contact]
|
, Web.quote Explanations.dmarc_contact
|
||||||
, Web.box_with_tag [C.has_background_info_light] tag_aggregated_reports
|
, Web.box_with_tag [C.has_background_info_light] tag_aggregated_reports
|
||||||
[ maybe (Web.p "There is no address to send aggregated reports to.")
|
[ maybe (Web.p "There is no address to send aggregated reports to.")
|
||||||
(Table.display_dmarc_mail_addresses (action_update_rr <<< DMARC_remove_rua))
|
(Table.display_dmarc_mail_addresses (action_update_rr <<< DMARC_remove_rua))
|
||||||
|
@ -341,7 +341,7 @@ current_rr_modal selected_domain form rr_modal
|
||||||
] []
|
] []
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.div_content [] [Web.explanation Explanations.dmarc_ri]
|
, Web.quote Explanations.dmarc_ri
|
||||||
, Web.box_input "idDMARCri" "Report interval (in seconds)" "86400" (action_update_rr <<< DMARC_ri) (maybe "0" show form.tmp.dmarc.ri)
|
, Web.box_input "idDMARCri" "Report interval (in seconds)" "86400" (action_update_rr <<< DMARC_ri) (maybe "0" show form.tmp.dmarc.ri)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -4,10 +4,8 @@ import Halogen.HTML.Properties as HP
|
||||||
import Web as Web
|
import Web as Web
|
||||||
import CSSClasses as C
|
import CSSClasses as C
|
||||||
|
|
||||||
expl' :: forall w i. String -> HH.HTML w i
|
expl :: forall w i. String -> HH.HTML w i
|
||||||
expl' text = expl [Web.p text]
|
expl text = Web.quote [Web.p text]
|
||||||
expl :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
|
||||||
expl content = Web.div_content [] [ Web.explanation content ]
|
|
||||||
expl_txt :: forall w i. String -> HH.HTML w i
|
expl_txt :: forall w i. String -> HH.HTML w i
|
||||||
expl_txt content = Web.explanation [ Web.p content ]
|
expl_txt content = Web.explanation [ Web.p content ]
|
||||||
|
|
||||||
|
@ -17,7 +15,7 @@ col arr = Web.column_ [ Web.box arr ]
|
||||||
tokens :: forall w i. HH.HTML w i
|
tokens :: forall w i. HH.HTML w i
|
||||||
tokens = HH.div_
|
tokens = HH.div_
|
||||||
[ Web.h3 "What are tokens?"
|
[ Web.h3 "What are tokens?"
|
||||||
, expl' """
|
, expl """
|
||||||
Tokens are a simple way to update a resource record (A or AAAA) with your current IP address.
|
Tokens are a simple way to update a resource record (A or AAAA) with your current IP address.
|
||||||
"""
|
"""
|
||||||
, HH.p_ [ HH.text "Let's take an example: you have an A record (IPv4) pointing to your web server at home, "
|
, HH.p_ [ HH.text "Let's take an example: you have an A record (IPv4) pointing to your web server at home, "
|
||||||
|
@ -26,7 +24,8 @@ tokens = HH.div_
|
||||||
, HH.u_ [HH.text "53be0c45-61c4-4d29-8ae9-c2cc8767603d"]
|
, HH.u_ [HH.text "53be0c45-61c4-4d29-8ae9-c2cc8767603d"]
|
||||||
, HH.text ") for this specific entry, then make your server regularly visit the following website."
|
, HH.text ") for this specific entry, then make your server regularly visit the following website."
|
||||||
]
|
]
|
||||||
, expl [ HH.p_ [ HH.text "https://www.netlib.re/token-update/"
|
, Web.quote
|
||||||
|
[ HH.p_ [ HH.text "https://www.netlib.re/token-update/"
|
||||||
, HH.u_ [HH.text "<your-token>"]
|
, HH.u_ [HH.text "<your-token>"]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
@ -34,13 +33,13 @@ tokens = HH.div_
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.h3 "How to automate the update of my IP address?"
|
, Web.h3 "How to automate the update of my IP address?"
|
||||||
, Web.p "On Linux, you can make your computer access the update link with the following command."
|
, Web.p "On Linux, you can make your computer access the update link with the following command."
|
||||||
, expl [ Web.strong "wget https://www.netlib.re/token-update/<your-token>" ]
|
, Web.quote [ Web.strong "wget https://www.netlib.re/token-update/<your-token>" ]
|
||||||
, Web.p """
|
, Web.p """
|
||||||
No need for a more complex program. This works just fine.
|
No need for a more complex program. This works just fine.
|
||||||
And you can run this command every hour.
|
And you can run this command every hour.
|
||||||
For example, in your crontab (Linux and Unix related):
|
For example, in your crontab (Linux and Unix related):
|
||||||
"""
|
"""
|
||||||
, expl [ Web.strong "0 * * * * wget <url>" ]
|
, Web.quote [ Web.strong "0 * * * * wget <url>" ]
|
||||||
, Web.p """
|
, Web.p """
|
||||||
Commands for other operating systems may differ, but you get the idea.
|
Commands for other operating systems may differ, but you get the idea.
|
||||||
"""
|
"""
|
||||||
|
@ -50,7 +49,8 @@ tokens = HH.div_
|
||||||
Make sure to access the website using the related IP address.
|
Make sure to access the website using the related IP address.
|
||||||
To update an IPv6 address (AAAA), force your application to access the URL using an IPv6 address.
|
To update an IPv6 address (AAAA), force your application to access the URL using an IPv6 address.
|
||||||
"""
|
"""
|
||||||
, expl [ HH.p_ [ Web.strong "wget -6 <url>" ]
|
, Web.quote
|
||||||
|
[ HH.p_ [ Web.strong "wget -6 <url>" ]
|
||||||
, HH.p_ [ HH.text "To force the use of an IPv6 address." ]
|
, HH.p_ [ HH.text "To force the use of an IPv6 address." ]
|
||||||
, HH.p_ [ Web.strong "wget -4 <url>" ]
|
, HH.p_ [ Web.strong "wget -4 <url>" ]
|
||||||
, HH.p_ [ HH.text "To force the use of an IPv4 address." ]
|
, HH.p_ [ HH.text "To force the use of an IPv4 address." ]
|
||||||
|
@ -69,7 +69,7 @@ basics = HH.div_
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.h3 "I have something to host (A and AAAA records)."
|
, Web.h3 "I have something to host (A and AAAA records)."
|
||||||
, expl' "Let's assume you have a web server and you host your website somewhere."
|
, expl "Let's assume you have a web server and you host your website somewhere."
|
||||||
, Web.p """
|
, Web.p """
|
||||||
You want an A (IPv4) or AAAA (IPv6) record pointing to your server, named "enigma" for example.
|
You want an A (IPv4) or AAAA (IPv6) record pointing to your server, named "enigma" for example.
|
||||||
"""
|
"""
|
||||||
|
@ -94,7 +94,7 @@ basics = HH.div_
|
||||||
|
|
||||||
, Web.hr
|
, Web.hr
|
||||||
, Web.h3 "I want an email server."
|
, Web.h3 "I want an email server."
|
||||||
, expl' """
|
, expl """
|
||||||
Hosting a mail server is quite complex.
|
Hosting a mail server is quite complex.
|
||||||
This section will focus on the main parts regarding the DNS.
|
This section will focus on the main parts regarding the DNS.
|
||||||
"""
|
"""
|
||||||
|
@ -111,7 +111,7 @@ basics = HH.div_
|
||||||
"""
|
"""
|
||||||
, Web.columns_
|
, Web.columns_
|
||||||
[ col
|
[ col
|
||||||
[ expl' """
|
[ expl """
|
||||||
Spam mitigation 1: tell what are the right mail servers for your domain with Sender Policy Framework (SPF).
|
Spam mitigation 1: tell what are the right mail servers for your domain with Sender Policy Framework (SPF).
|
||||||
"""
|
"""
|
||||||
, expl_txt """
|
, expl_txt """
|
||||||
|
@ -119,7 +119,7 @@ basics = HH.div_
|
||||||
"""
|
"""
|
||||||
]
|
]
|
||||||
, col
|
, col
|
||||||
[ expl' """
|
[ expl """
|
||||||
Spam mitigation 2: prove that the mails come from your mail server with DomainKeys Identified Mail (DKIM).
|
Spam mitigation 2: prove that the mails come from your mail server with DomainKeys Identified Mail (DKIM).
|
||||||
"""
|
"""
|
||||||
, expl_txt """
|
, expl_txt """
|
||||||
|
@ -131,7 +131,7 @@ basics = HH.div_
|
||||||
"""
|
"""
|
||||||
]
|
]
|
||||||
, col
|
, col
|
||||||
[ expl' """
|
[ expl """
|
||||||
Spam mitigation 3: mitigate fraud (impersonators) with Domain-based Message Authentication Reporting and Conformance (DMARC).
|
Spam mitigation 3: mitigate fraud (impersonators) with Domain-based Message Authentication Reporting and Conformance (DMARC).
|
||||||
Tell other mail servers to only accept emails from your domain which actually are coming from your domain (SPF) and sent by your mail server (DKIM).
|
Tell other mail servers to only accept emails from your domain which actually are coming from your domain (SPF) and sent by your mail server (DKIM).
|
||||||
"""
|
"""
|
||||||
|
@ -490,7 +490,8 @@ legal_notice = HH.div_
|
||||||
[ Web.h3 "Legal Notice"
|
[ Web.h3 "Legal Notice"
|
||||||
|
|
||||||
, Web.strong "Website Publisher"
|
, Web.strong "Website Publisher"
|
||||||
, expl [ HH.p_ [ HH.text "You can contact this website's owner and publisher at: "
|
, Web.quote
|
||||||
|
[ HH.p_ [ HH.text "You can contact this website's owner and publisher at: "
|
||||||
, Web.strong website_owner_address
|
, Web.strong website_owner_address
|
||||||
]
|
]
|
||||||
, HH.p_ [ HH.text "For legal matter: "
|
, HH.p_ [ HH.text "For legal matter: "
|
||||||
|
@ -499,7 +500,8 @@ legal_notice = HH.div_
|
||||||
]
|
]
|
||||||
|
|
||||||
, Web.strong "Website Hosting"
|
, Web.strong "Website Hosting"
|
||||||
, expl [ HH.p_ [ HH.text "This website is hosted by "
|
, Web.quote
|
||||||
|
[ HH.p_ [ HH.text "This website is hosted by "
|
||||||
, Web.strong "Alsace Réseau Neutre"
|
, Web.strong "Alsace Réseau Neutre"
|
||||||
, HH.text "."
|
, HH.text "."
|
||||||
, HH.br_
|
, HH.br_
|
||||||
|
@ -512,14 +514,14 @@ legal_notice = HH.div_
|
||||||
]
|
]
|
||||||
|
|
||||||
, Web.strong "Intellectual Property"
|
, Web.strong "Intellectual Property"
|
||||||
, expl' """
|
, expl """
|
||||||
The code of this website is released under the ISC License. You
|
The code of this website is released under the ISC License. You
|
||||||
are free to copy, modify, and distribute the code, provided
|
are free to copy, modify, and distribute the code, provided
|
||||||
that you comply with the terms of the ISC License.
|
that you comply with the terms of the ISC License.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
, Web.strong "Personal Data Collection"
|
, Web.strong "Personal Data Collection"
|
||||||
, expl' """
|
, expl """
|
||||||
This website collects only the personal data necessary for its proper functioning.
|
This website collects only the personal data necessary for its proper functioning.
|
||||||
This includes data such as: a login (arbitrary set of
|
This includes data such as: a login (arbitrary set of
|
||||||
characters), a password (that is stored encrypted), an email
|
characters), a password (that is stored encrypted), an email
|
||||||
|
@ -527,12 +529,12 @@ legal_notice = HH.div_
|
||||||
"""
|
"""
|
||||||
|
|
||||||
, Web.strong "Data Sharing"
|
, Web.strong "Data Sharing"
|
||||||
, expl' """
|
, expl """
|
||||||
None of the collected data will be shared to third parties.
|
None of the collected data will be shared to third parties.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
, Web.strong "Data Retention"
|
, Web.strong "Data Retention"
|
||||||
, expl' """
|
, expl """
|
||||||
The personal data collected on this website will be retained
|
The personal data collected on this website will be retained
|
||||||
for as long as necessary to fulfill the purposes for which it
|
for as long as necessary to fulfill the purposes for which it
|
||||||
was collected, including the management of user accounts.
|
was collected, including the management of user accounts.
|
||||||
|
@ -550,7 +552,7 @@ legal_notice = HH.div_
|
||||||
"""
|
"""
|
||||||
|
|
||||||
, Web.strong "Liability"
|
, Web.strong "Liability"
|
||||||
, expl
|
, Web.quote
|
||||||
[ Web.p
|
[ Web.p
|
||||||
"""
|
"""
|
||||||
The publisher of this website makes every effort to ensure that
|
The publisher of this website makes every effort to ensure that
|
||||||
|
@ -586,7 +588,8 @@ legal_notice = HH.div_
|
||||||
]
|
]
|
||||||
|
|
||||||
, Web.strong "GDPR compliance"
|
, Web.strong "GDPR compliance"
|
||||||
, expl [ HH.p_ [ HH.text """
|
, Web.quote
|
||||||
|
[ HH.p_ [ HH.text """
|
||||||
You have the right to access, correct and delete your personal
|
You have the right to access, correct and delete your personal
|
||||||
data at any time via this website or by contacting us at the
|
data at any time via this website or by contacting us at the
|
||||||
following email address:
|
following email address:
|
||||||
|
|
|
@ -22,13 +22,13 @@ p_ :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
|
||||||
p_ classes str = HH.p [HP.classes classes] [ HH.text str ]
|
p_ classes str = HH.p [HP.classes classes] [ HH.text str ]
|
||||||
|
|
||||||
ul :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
ul :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
ul content = HH.ul_ content
|
ul body = HH.ul_ body
|
||||||
|
|
||||||
li :: forall w i. String -> HH.HTML w i
|
li :: forall w i. String -> HH.HTML w i
|
||||||
li content = li_ [] content
|
li body = li_ [] body
|
||||||
|
|
||||||
li_ :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
|
li_ :: forall w i. Array HH.ClassName -> String -> HH.HTML w i
|
||||||
li_ classes content = HH.li [HP.classes classes] [ HH.text content ]
|
li_ classes body = HH.li [HP.classes classes] [ HH.text body ]
|
||||||
|
|
||||||
strong :: forall w i. String -> HH.HTML w i
|
strong :: forall w i. String -> HH.HTML w i
|
||||||
strong str = HH.strong_ [ HH.text str ]
|
strong str = HH.strong_ [ HH.text str ]
|
||||||
|
@ -37,25 +37,25 @@ hr :: forall w i. HH.HTML w i
|
||||||
hr = HH.hr_
|
hr = HH.hr_
|
||||||
|
|
||||||
div :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
div :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
div content = HH.div_ content
|
div body = HH.div_ body
|
||||||
|
|
||||||
div_ :: forall w i. HH.Node DHI.HTMLdiv w i
|
div_ :: forall w i. HH.Node DHI.HTMLdiv w i
|
||||||
div_ = HH.div
|
div_ = HH.div
|
||||||
|
|
||||||
div_large_content :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
content :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
div_large_content content = HH.div [HP.classes [C.is_large, C.content]] content
|
content body = HH.div [HP.classes [C.content]] body
|
||||||
|
|
||||||
div_content :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
content_ :: forall w i. Array HH.ClassName -> Array (HH.HTML w i) -> HH.HTML w i
|
||||||
div_content classes content = HH.div [HP.classes ([C.content] <> classes)] content
|
content_ classes body = HH.div [HP.classes ([C.content] <> classes)] body
|
||||||
|
|
||||||
explanation :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
explanation :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
explanation content = HH.blockquote [HP.classes [HH.ClassName "justified"]] content
|
explanation body = HH.blockquote [HP.classes [HH.ClassName "justified"]] body
|
||||||
|
|
||||||
quote :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
quote :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
quote content = div_content [] [ explanation content ]
|
quote body = content [ explanation body ]
|
||||||
|
|
||||||
simple_quote :: forall w i. String -> HH.HTML w i
|
simple_quote :: forall w i. String -> HH.HTML w i
|
||||||
simple_quote content = quote [ p content ]
|
simple_quote string = quote [ p string ]
|
||||||
|
|
||||||
article_ :: forall w i. Array HH.ClassName -> HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
article_ :: forall w i. Array HH.ClassName -> HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
||||||
article_ classes head body = HH.article [HP.classes $ [C.message] <> classes]
|
article_ classes head body = HH.article [HP.classes $ [C.message] <> classes]
|
||||||
|
@ -67,7 +67,7 @@ article :: forall w i. HH.HTML w i -> HH.HTML w i -> HH.HTML w i
|
||||||
article head body = article_ [] head body
|
article head body = article_ [] head body
|
||||||
|
|
||||||
container :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
container :: forall w i. Array (HH.HTML w i) -> HH.HTML w i
|
||||||
container = HH.div [HP.classes [C.container, C.is_info]]
|
container body = HH.div [HP.classes [C.container, C.is_info]] body
|
||||||
|
|
||||||
hdiv :: forall (w :: Type) (a :: Type). Array (HH.HTML w a) -> HH.HTML w a
|
hdiv :: forall (w :: Type) (a :: Type). Array (HH.HTML w a) -> HH.HTML w a
|
||||||
hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
|
hdiv = HH.div [ HP.classes [HH.ClassName "mt-5"] ]
|
||||||
|
|
Loading…
Add table
Reference in a new issue