Enable domain reset (to remove a delegation).

This commit is contained in:
Philippe Pittoli 2025-10-28 19:18:13 +01:00
parent bd20767989
commit 49adaba0aa
4 changed files with 61 additions and 9 deletions

View file

@ -601,6 +601,9 @@ act_on_page_event page_event = case page_event of
PageZone.AskSaveDelegation domain nameserver1 nameserver2 -> do
message <- H.liftEffect $ DNSManager.serialize $ DNSManager.MkDelegateDomain { domain, nameserver1, nameserver2 }
H.tell _ws_dns unit (WS.ToSend message)
PageZone.AskResetDelegation domain -> do
message <- H.liftEffect $ DNSManager.serialize $ DNSManager.MkResetDelegation { domain }
H.tell _ws_dns unit (WS.ToSend message)
PageZone.AskAddRR domain rr -> do
message <- H.liftEffect $ DNSManager.serialize $ DNSManager.MkAddRR { domain, rr }
H.tell _ws_dns unit (WS.ToSend message)

View file

@ -66,6 +66,7 @@ data Output
| AskDeleteRR String Int
| AskSaveRR String RR.ResourceRecord
| AskSaveDelegation String String String
| AskResetDelegation String
| AskAddRR String RR.ResourceRecord
| AskGetZone String
@ -109,6 +110,9 @@ data Action
-- | Update Delegation modal.
| UpdateDelegationModal Delegation
-- | Reset Delegation modal.
| DisplayResetDelegationModal
-- | Create modal (a form) for a resource record to update.
| CreateUpdateRRModal RR.RRId
@ -133,6 +137,9 @@ data Action
-- | Save the delegation.
| SaveDelegation
-- | Reset the delegation.
| ResetDelegation
-- | Validate a new resource record before adding it.
| ValidateRR RR.AcceptedRRTypes
@ -255,12 +262,16 @@ render state
= Modal.delegation_modal state._domain state._delegation_form
UpdateDelegationForm ValidateDelegation CancelModal
reset_delegation_modal
= Modal.reset_delegation_modal state._domain ResetDelegation CancelModal
render_zone =
case state.rr_modal of
RemoveRRModal rr_id -> Modal.modal_rr_delete rr_id RemoveRR CancelModal
NewRRModal _ -> call_to_current_rr_modal
UpdateRRModal -> call_to_current_rr_modal
DelegationModal -> delegation_modal
RemoveRRModal rr_id -> Modal.modal_rr_delete rr_id RemoveRR CancelModal
NewRRModal _ -> call_to_current_rr_modal
UpdateRRModal -> call_to_current_rr_modal
DelegationModal -> delegation_modal
ResetDelegationModal -> reset_delegation_modal
NoModal -> HH.div_ $
[ Web.level [ Web.btn_ [C.is_large, C.is_info] "Back to the domain list" ReturnToDomainList
, Web.h1 state._domain
@ -277,6 +288,9 @@ render state
, Web.level [
Web.btn "Edit the name servers" (UpdateDelegationModal delegation)
] []
, Web.level [
Web.btn "Reset this domain, forget about delegation" DisplayResetDelegationModal
] []
]
render_zone_records _ =
[ Table.resource_records (sorted state._resources) CreateUpdateRRModal DeleteRRModal NewToken
@ -346,6 +360,10 @@ handleAction = case _ of
UpdateDelegationModal delegation -> do
H.modify_ _ { rr_modal = DelegationModal, _delegation_form = Delegation.mkUpdateDelegationForm delegation }
-- | Delegation modal presents a simple form with two entries (chosen nameservers).
DisplayResetDelegationModal -> do
H.modify_ _ { rr_modal = ResetDelegationModal }
-- | Initialize the Zone component: ask for the domain zone to `dnsmanagerd`.
Initialize -> do
{ _domain } <- H.get
@ -483,6 +501,13 @@ handleAction = case _ of
H.raise $ AskSaveDelegation state._domain df.nameserver1 df.nameserver2
H.modify_ _ { rr_modal = NoModal }
-- | Save the delegation of the domain.
ResetDelegation -> do
state <- H.get
H.raise $ Log $ SystemLog $ "Reset the delegation for domain '" <> state._domain <> "'"
H.raise $ AskResetDelegation state._domain
H.modify_ _ { rr_modal = NoModal }
NewToken rr_id -> do
{ _domain } <- H.get
H.raise $ Log $ SystemLog $ "Ask a token for rrid " <> show rr_id

View file

@ -47,6 +47,28 @@ modal_rr_delete rr_id action_remove_rr action_cancel_modal = Web.modal "Deleting
zip_nullable :: forall a. Array a -> Array String -> Array (Tuple a String)
zip_nullable txt raw = A.zip txt ([""] <> raw)
type ActionResetDelegation :: forall i. i -> i
type ActionResetDelegation i = i
reset_delegation_modal :: forall w i. Domain -> ActionResetDelegation i -> ActionCancelModal i -> HH.HTML w i
reset_delegation_modal selected_domain action_reset_delegation action_cancel_modal =
Web.modal modal_title modal_content modal_foot
where
modal_title = "Reset delegation for " <> selected_domain
modal_content :: Array (HH.HTML w i)
modal_content =
[ HH.div [HP.classes [C.notification, C.is_warning]]
[ Web.p "⚠️​ You are about to remove delegation for this domain."
, Web.p """
The domain will be reset to the default values from a template, you'll be able to modify the domain as a new domain.
"""
]
]
modal_foot :: Array (HH.HTML w i)
modal_foot =
[ Web.info_btn "Reset this domain" action_reset_delegation
, Web.cancel_button action_cancel_modal
]
type ActionValidate :: forall i. i -> i
type ActionValidate i = i
type ActionUpdateDelegationForm i = (Delegation.Field -> i)
@ -398,9 +420,10 @@ current_rr_modal selected_domain form rr_modal
template content foot_ = Web.modal title content foot
where
title = case rr_modal of
NoModal -> "Error: no modal should be displayed"
DelegationModal -> "Error: the delegation modal should be displayed"
NewRRModal t_ -> "New " <> show t_ <> " resource record"
UpdateRRModal -> "Update " <> form._rr.rrtype <> " Resource Record"
RemoveRRModal rr_id -> "Error: should display removal modal instead (for resource record " <> show rr_id <> ")"
NoModal -> "Error: no modal should be displayed"
DelegationModal -> "Error: the delegation modal should be displayed"
ResetDelegationModal -> "Error: the reset delegation modal should be displayed"
NewRRModal t_ -> "New " <> show t_ <> " resource record"
UpdateRRModal -> "Update " <> form._rr.rrtype <> " Resource Record"
RemoveRRModal rr_id -> "Error: should display removal modal instead (for resource record " <> show rr_id <> ")"
foot = foot_ <> [Web.cancel_button action_cancel_modal]

View file

@ -14,3 +14,4 @@ data RRModal
| UpdateRRModal
| RemoveRRModal RR.RRId
| DelegationModal
| ResetDelegationModal