Enable to update the name servers used for delegation.

This commit is contained in:
Philippe Pittoli 2025-10-28 18:55:27 +01:00
parent c13cc441bc
commit bd20767989
4 changed files with 30 additions and 7 deletions

View file

@ -41,7 +41,7 @@ import CSSClasses as C
import App.Text.Explanations as Explanations import App.Text.Explanations as Explanations
import App.Type.ResourceRecord as RR import App.Type.ResourceRecord as RR
import App.Type.Delegation (mkEmptyDelegationForm, update, Form, Field) as Delegation import App.Type.Delegation (mkUpdateDelegationForm, mkEmptyDelegationForm, update, Form, Field) as Delegation
import App.Type.RRModal (RRModal(..)) import App.Type.RRModal (RRModal(..))
import App.Type.ResourceRecord.DKIM as DKIM import App.Type.ResourceRecord.DKIM as DKIM
import App.Type.ResourceRecord.DMARC as DMARC import App.Type.ResourceRecord.DMARC as DMARC
@ -106,6 +106,9 @@ data Action
-- | Delegation modal. -- | Delegation modal.
| CreateDelegationModal | CreateDelegationModal
-- | Update Delegation modal.
| UpdateDelegationModal Delegation
-- | Create modal (a form) for a resource record to update. -- | Create modal (a form) for a resource record to update.
| CreateUpdateRRModal RR.RRId | CreateUpdateRRModal RR.RRId
@ -271,7 +274,9 @@ render state
, Web.ul [ HH.li_ [ Web.btn_ro [C.is_warning] delegation.nameserver1 ] , Web.ul [ HH.li_ [ Web.btn_ro [C.is_warning] delegation.nameserver1 ]
, HH.li_ [ Web.btn_ro [C.is_warning] delegation.nameserver2 ] , HH.li_ [ Web.btn_ro [C.is_warning] delegation.nameserver2 ]
] ]
, Web.p "For now the nameservers cannot be updated (but you can delete the domain and start again)." , Web.level [
Web.btn "Edit the name servers" (UpdateDelegationModal delegation)
] []
] ]
render_zone_records _ = render_zone_records _ =
[ Table.resource_records (sorted state._resources) CreateUpdateRRModal DeleteRRModal NewToken [ Table.resource_records (sorted state._resources) CreateUpdateRRModal DeleteRRModal NewToken
@ -337,6 +342,10 @@ handleAction = case _ of
CreateDelegationModal -> do CreateDelegationModal -> do
H.modify_ _ { rr_modal = DelegationModal, _delegation_form = Delegation.mkEmptyDelegationForm } H.modify_ _ { rr_modal = DelegationModal, _delegation_form = Delegation.mkEmptyDelegationForm }
-- | Delegation modal presents a simple form with two entries (chosen nameservers).
UpdateDelegationModal delegation -> do
H.modify_ _ { rr_modal = DelegationModal, _delegation_form = Delegation.mkUpdateDelegationForm delegation }
-- | Initialize the Zone component: ask for the domain zone to `dnsmanagerd`. -- | Initialize the Zone component: ask for the domain zone to `dnsmanagerd`.
Initialize -> do Initialize -> do
{ _domain } <- H.get { _domain } <- H.get

View file

@ -58,9 +58,9 @@ delegation_modal selected_domain form action_update_form action_validate action_
modal_title = "Delegation for " <> selected_domain modal_title = "Delegation for " <> selected_domain
modal_content :: Array (HH.HTML w i) modal_content :: Array (HH.HTML w i)
modal_content = modal_content =
[ HH.div [HP.classes [C.notification, C.is_warning]] [ if form.new then HH.div [HP.classes [C.notification, C.is_warning]]
[ Web.p "⚠️​ You are about to delegate your domain to another server, you won't be able to manage entries from netlibre." [ Web.p "⚠️​ You are about to delegate your domain to another server, you won't be able to manage entries from netlibre." ]
] else HH.div [] []
, render_errors , render_errors
, Web.box_input "nameserver1" "name server 1" "ns0.example.com" , Web.box_input "nameserver1" "name server 1" "ns0.example.com"
(action_update_form <<< Delegation.NameServer1) (action_update_form <<< Delegation.NameServer1)
@ -71,7 +71,8 @@ delegation_modal selected_domain form action_update_form action_validate action_
] ]
modal_foot :: Array (HH.HTML w i) modal_foot :: Array (HH.HTML w i)
modal_foot = modal_foot =
[ Web.info_btn "Delegate the domain" action_validate [ if form.new then Web.info_btn "Delegate the domain" action_validate
else Web.info_btn "Update the name servers" action_validate
, Web.cancel_button action_cancel_modal , Web.cancel_button action_cancel_modal
] ]
render_errors = if A.length form.errors > 0 render_errors = if A.length form.errors > 0

View file

@ -3,5 +3,5 @@ module App.Type.Delegation
, module App.Type.Error.Delegation , module App.Type.Error.Delegation
) where ) where
import App.Type.Form.Delegation (Form, Field(..), update, mkEmptyDelegationForm) import App.Type.Form.Delegation (Form, Field(..), update, mkEmptyDelegationForm, mkUpdateDelegationForm)
import App.Type.Error.Delegation (Error(..)) import App.Type.Error.Delegation (Error(..))

View file

@ -2,12 +2,15 @@ module App.Type.Form.Delegation where
import App.Type.Error.Delegation (Error) import App.Type.Error.Delegation (Error)
type Delegation = { nameserver1 :: String, nameserver2 :: String }
-- | The required data needed to properly delegate a domain: two name servers. -- | The required data needed to properly delegate a domain: two name servers.
-- | The type also includes potential errors found while validating the data. -- | The type also includes potential errors found while validating the data.
type Form type Form
= { nameserver1 :: String = { nameserver1 :: String
, nameserver2 :: String , nameserver2 :: String
, errors :: Array Error , errors :: Array Error
, new :: Boolean
} }
-- | Empty delegation form, with default inputs. -- | Empty delegation form, with default inputs.
@ -16,6 +19,16 @@ mkEmptyDelegationForm
= { nameserver1: "ns0.example.com" = { nameserver1: "ns0.example.com"
, nameserver2: "ns1.example.com" , nameserver2: "ns1.example.com"
, errors: [] , errors: []
, new: true
}
-- | Empty delegation form, with default inputs.
mkUpdateDelegationForm :: Delegation -> Form
mkUpdateDelegationForm delegation
= { nameserver1: delegation.nameserver1
, nameserver2: delegation.nameserver2
, errors: []
, new: false
} }
-- | What are the **fields** of our delegation form? -- | What are the **fields** of our delegation form?