diff --git a/src/App/RR.purs b/src/App/RR.purs index 9e8cdfd..20af3c5 100644 --- a/src/App/RR.purs +++ b/src/App/RR.purs @@ -123,27 +123,12 @@ mkSRV i c ok p prot w prt t d v , ttl: t, domain: d, value: v } -defaultResourceRecords :: Array (SimpleRR ()) -defaultResourceRecords - = [ mkNS 0 false true "3600" "@" "ns0.truc.fr" - , mkA 1 false true "200" "www" "192.168.10.2" - , mkAAAA 2 false true "610" "www" "fe80::1" - , mkCNAME 3 false true "630" "nom" "autrenom" - , mkTXT 4 false true "600" "txtme" "Ceci est un texte." - ] - -defaultMXResourceRecords :: Array (MXRR ()) -defaultMXResourceRecords - = [ mkMX 5 false true "600" "www" "192.168.10.2" "200" - , mkMX 6 false true "3600" "www" "192.168.10.2" "200" - ] - defaultResourceA :: SimpleRR () defaultResourceA = mkA 0 false true "200" "www" "192.168.10.2" defaultResourceMX :: MXRR () -defaultResourceMX = mkMX 0 false true "500" "www" "192.168.10.2" "200" +defaultResourceMX = mkMX 0 false true "500" "mail" "www" "200" defaultResourceSRV :: SRVRR () -- RRId Modified Valid Priority Protocol Weight Port TTL Domain Value -defaultResourceSRV = mkSRV 0 false true "10" "_tcp" "100" "80" "200" "www" "192.168.10.2" +defaultResourceSRV = mkSRV 0 false true "10" "_tcp" "100" "80" "200" "_sip._tcp.example.com." "sip.example.com." diff --git a/src/App/ZoneInterface.purs b/src/App/ZoneInterface.purs index d7bd7cc..223dbf7 100644 --- a/src/App/ZoneInterface.purs +++ b/src/App/ZoneInterface.purs @@ -410,6 +410,10 @@ handleAction = case _ of -- TODO: network operations SyncRR rr_id -> do H.raise $ Log $ SimpleLog ("TODO: SyncRR: " <> show rr_id) + -- message <- H.liftEffect + -- $ DNSManager.serialize + -- $ DNSManager.MkDeleteRR { domain: _current_domain, rrid: rr_id } + -- H.raise $ MessageToSend message RemoveRR rr_id -> do { _current_domain } <- H.get @@ -653,72 +657,6 @@ render_srv_records records baseRecords :: Array String baseRecords = [ "NS", "A", "AAAA", "CNAME", "TXT" ] -render_new_record :: forall (w :: Type). (SimpleRR ()) -> HH.HTML w Action -render_new_record rr - = Bulma.hdiv [ Bulma.zone_rr_title "New record (NS, A, AAAA, CNAME, TXT)", table ] - - where - table = HH.table [] [ Bulma.simple_table_header, render_record_builder ] - - -- render_record_builder :: forall w. HH.HTML w Action - render_record_builder - = HH.tr_ - [ HH.td_ [ type_selection ] - , HH.td_ [ Bulma.input_domain (UpdateNewSRRForm <<< Update_SRR_Domain) rr.domain rr.valid ] - , HH.td_ [ Bulma.input_ttl (UpdateNewSRRForm <<< Update_SRR_TTL) rr.ttl rr.valid ] - , HH.td_ [ Bulma.input_value (UpdateNewSRRForm <<< Update_SRR_Value) rr.value rr.valid ] - , HH.td_ [ Bulma.btn_add AddSRR (TellSomethingWentWrong rr.id "cannot add") rr.valid ] - ] - - -- type_selection :: forall w i. HH.HTML w i - type_selection = HH.select - [ HE.onSelectedIndexChange (UpdateNewSRRForm <<< Update_SRR_Type) ] - $ map type_option baseRecords - type_option n - = HH.option - [ HP.value n - , HP.selected (n == rr.t) - ] [ HH.text n ] - - -render_mx_new_record :: forall (w :: Type). (MXRR ()) -> HH.HTML w Action -render_mx_new_record rr - = Bulma.hdiv [ Bulma.zone_rr_title "New MX record", table ] - - where - table = HH.table [] [ Bulma.mx_table_header, render_record_builder ] - - -- render_record_builder :: forall w. HH.HTML w Action - render_record_builder - = HH.tr_ - [ HH.td_ [ Bulma.input_domain (UpdateNewMXForm <<< Update_MX_Domain) rr.domain rr.valid ] - , HH.td_ [ Bulma.input_ttl (UpdateNewMXForm <<< Update_MX_TTL) rr.ttl rr.valid ] - , HH.td_ [ Bulma.input_priority (UpdateNewMXForm <<< Update_MX_Priority) rr.priority rr.valid ] - , HH.td_ [ Bulma.input_value (UpdateNewMXForm <<< Update_MX_Value) rr.value rr.valid ] - , HH.td_ [ Bulma.btn_add AddMX (TellSomethingWentWrong rr.id "cannot add") rr.valid ] - ] - - -render_srv_new_record :: forall (w :: Type). (SRVRR ()) -> HH.HTML w Action -render_srv_new_record rr - = Bulma.hdiv [ Bulma.zone_rr_title "New SRV record", table ] - where - table = HH.table [] [ Bulma.srv_table_header, render_record_builder ] - - -- render_record_builder :: forall w. HH.HTML w Action - render_record_builder - = HH.tr_ - [ HH.td_ [ Bulma.input_domain (UpdateNewSRVForm <<< Update_SRV_Domain) rr.domain rr.valid ] - , HH.td_ [ Bulma.input_ttl (UpdateNewSRVForm <<< Update_SRV_TTL) rr.ttl rr.valid ] - , HH.td_ [ Bulma.input_priority (UpdateNewSRVForm <<< Update_SRV_Priority) rr.priority rr.valid ] - , HH.td_ [ Bulma.input_protocol (UpdateNewSRVForm <<< Update_SRV_Protocol) rr.protocol rr.valid ] - , HH.td_ [ Bulma.input_weight (UpdateNewSRVForm <<< Update_SRV_Weight) rr.weight rr.valid ] - , HH.td_ [ Bulma.input_port (UpdateNewSRVForm <<< Update_SRV_Port) rr.port rr.valid ] - , HH.td_ [ Bulma.input_value (UpdateNewSRVForm <<< Update_SRV_Value) rr.value rr.valid ] - , HH.td_ [ Bulma.btn_add AddSRV (TellSomethingWentWrong rr.id "cannot add") rr.valid ] - ] - - -- Component definition and initial state render_new_records :: forall (w :: Type). State -> HH.HTML w Action @@ -857,6 +795,15 @@ update f rr_id records = map doSmth records | rr_id == rr.id = f rr | otherwise = rr +fromLocalToRR :: forall (l :: Row Type). SRVRR (|l) -> Either String ResourceRecord +fromLocalToRR new_rr = do + case new_rr.t, (A.elem new_rr.t baseRecords) of + _, true -> Right $ fromLocalSimpleRRRepresentationToResourceRecord new_rr + "MX", _ -> Right $ fromLocalMXRRRepresentationToResourceRecord new_rr + "SRV", _ -> Right $ fromLocalSRVRRepresentationToResourceRecord new_rr + -- "SOA" resource record shouldn't be useful in this context. + _, _ -> Left $ "TODO: cannot convert RR type '" <> new_rr.t <> "' to ResourceRecord representation." + fromResourceRecordToLocalRepresentationSimpleRR :: ResourceRecord -> Maybe (SimpleRR ()) fromResourceRecordToLocalRepresentationSimpleRR new_rr = Just { t: new_rr.rrtype @@ -929,7 +876,7 @@ fromResourceRecordToLocalRepresentationSOARR new_rr = do , minttl: show minttl -- :: RR (Maybe Int) Local (String) } -fromLocalSimpleRRRepresentationToResourceRecord :: SimpleRR () -> ResourceRecord +fromLocalSimpleRRRepresentationToResourceRecord :: forall l. SimpleRR (|l) -> ResourceRecord fromLocalSimpleRRRepresentationToResourceRecord form = { rrtype: form.t , rrid: form.id @@ -950,7 +897,7 @@ fromLocalSimpleRRRepresentationToResourceRecord form , minttl: Nothing } -fromLocalMXRRRepresentationToResourceRecord :: MXRR () -> ResourceRecord +fromLocalMXRRRepresentationToResourceRecord :: forall l. MXRR (|l) -> ResourceRecord fromLocalMXRRRepresentationToResourceRecord form = { rrtype: form.t , rrid: form.id @@ -971,7 +918,7 @@ fromLocalMXRRRepresentationToResourceRecord form , minttl: Nothing } -fromLocalSRVRRepresentationToResourceRecord :: SRVRR () -> ResourceRecord +fromLocalSRVRRepresentationToResourceRecord :: forall l. SRVRR (|l) -> ResourceRecord fromLocalSRVRRepresentationToResourceRecord form = { rrtype: form.t , rrid: form.id