diff --git a/src/App/ZoneInterface.purs b/src/App/ZoneInterface.purs index 24e10d7..0d2afbe 100644 --- a/src/App/ZoneInterface.purs +++ b/src/App/ZoneInterface.purs @@ -129,7 +129,10 @@ data Action -- Update an already active entry. | UpdateLocalForm RRId Update_Local_Form - | SyncRR RRId + | SyncSRR RRId + | SyncMXRR RRId + | SyncSRVRR RRId + | RemoveRR RRId | TellSomethingWentWrong RRId String @@ -423,13 +426,44 @@ handleAction = case _ of state <- H.get H.modify_ _ { _srvrr = (update_port rr_id val state._srvrr) } - -- 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 + SyncSRR local_rr_id -> do + state <- H.get + let maybe_local_rr = first (\rr -> rr.id == local_rr_id) state._srr + case maybe_local_rr of + Nothing -> H.raise $ Log $ SimpleLog $ "Cannot find simple RR id: " <> show local_rr_id + Just local_rr -> do + let rr = fromLocalSimpleRRRepresentationToResourceRecord local_rr + H.raise $ Log $ SimpleLog $ "Sync a simple RR: " <> show local_rr_id + message <- H.liftEffect + $ DNSManager.serialize + $ DNSManager.MkUpdateRR { domain: state._current_domain, rr: rr } + H.raise $ MessageToSend message + + SyncMXRR local_rr_id -> do + state <- H.get + let maybe_local_rr = first (\rr -> rr.id == local_rr_id) state._mxrr + case maybe_local_rr of + Nothing -> H.raise $ Log $ SimpleLog $ "Cannot find MX RR id: " <> show local_rr_id + Just local_rr -> do + let rr = fromLocalMXRRRepresentationToResourceRecord local_rr + H.raise $ Log $ SimpleLog $ "Sync a MX RR: " <> show local_rr_id + message <- H.liftEffect + $ DNSManager.serialize + $ DNSManager.MkUpdateRR { domain: state._current_domain, rr: rr } + H.raise $ MessageToSend message + + SyncSRVRR local_rr_id -> do + state <- H.get + let maybe_local_rr = first (\rr -> rr.id == local_rr_id) state._srvrr + case maybe_local_rr of + Nothing -> H.raise $ Log $ SimpleLog $ "Cannot find SRV RR id: " <> show local_rr_id + Just local_rr -> do + let rr = fromLocalSRVRRepresentationToResourceRecord local_rr + H.raise $ Log $ SimpleLog $ "Sync a SRV RR: " <> show local_rr_id + message <- H.liftEffect + $ DNSManager.serialize + $ DNSManager.MkUpdateRR { domain: state._current_domain, rr: rr } + H.raise $ MessageToSend message RemoveRR rr_id -> do { _current_domain } <- H.get @@ -613,7 +647,7 @@ render_records records , HH.td_ [ Bulma.input_domain ((UpdateLocalForm rr.id) <<< Update_Local_Form_SRR <<< Update_SRR_Domain) rr.domain rr.valid ] , HH.td_ [ Bulma.input_ttl ((UpdateLocalForm rr.id) <<< Update_Local_Form_SRR <<< Update_SRR_TTL ) rr.ttl rr.valid ] , HH.td_ [ Bulma.input_value ((UpdateLocalForm rr.id) <<< Update_Local_Form_SRR <<< Update_SRR_Value) rr.value rr.valid ] - , HH.td_ [ Bulma.btn_change (SyncRR rr.id) (TellSomethingWentWrong rr.id "cannot update") rr.modified rr.valid ] + , HH.td_ [ Bulma.btn_change (SyncSRR rr.id) (TellSomethingWentWrong rr.id "cannot update") rr.modified rr.valid ] , HH.td_ [ Bulma.btn_delete (\_ -> DeleteRRModal rr.id) ] ] @@ -638,7 +672,7 @@ render_mx_records records , HH.td_ [ Bulma.input_ttl ((UpdateLocalForm rr.id) <<< Update_Local_Form_MXRR <<< Update_MX_TTL) rr.ttl rr.valid ] , HH.td_ [ Bulma.input_priority ((UpdateLocalForm rr.id) <<< Update_Local_Form_MXRR <<< Update_MX_Priority) rr.priority rr.valid ] , HH.td_ [ Bulma.input_value ((UpdateLocalForm rr.id) <<< Update_Local_Form_MXRR <<< Update_MX_Value) rr.value rr.valid ] - , HH.td_ [ Bulma.btn_change (SyncRR rr.id) (TellSomethingWentWrong rr.id "cannot update") rr.modified rr.valid ] + , HH.td_ [ Bulma.btn_change (SyncMXRR rr.id) (TellSomethingWentWrong rr.id "cannot update") rr.modified rr.valid ] , HH.td_ [ Bulma.btn_delete (\_ -> DeleteRRModal rr.id) ] ] @@ -665,7 +699,7 @@ render_srv_records records , HH.td_ [ Bulma.input_weight ((UpdateLocalForm rr.id) <<< Update_Local_Form_SRVRR <<< Update_SRV_Weight ) rr.weight rr.valid ] , HH.td_ [ Bulma.input_port ((UpdateLocalForm rr.id) <<< Update_Local_Form_SRVRR <<< Update_SRV_Port ) rr.port rr.valid ] , HH.td_ [ Bulma.input_value ((UpdateLocalForm rr.id) <<< Update_Local_Form_SRVRR <<< Update_SRV_Value ) rr.value rr.valid ] - , HH.td_ [ Bulma.btn_change (SyncRR rr.id) (TellSomethingWentWrong rr.id "cannot update") rr.modified rr.valid ] + , HH.td_ [ Bulma.btn_change (SyncSRVRR rr.id) (TellSomethingWentWrong rr.id "cannot update") rr.modified rr.valid ] , HH.td_ [ Bulma.btn_delete (\_ -> DeleteRRModal rr.id) ] ] @@ -955,6 +989,9 @@ fromLocalSRVRRepresentationToResourceRecord form , minttl: Nothing } +first :: forall a. (a -> Boolean) -> Array a -> Maybe a +first condition = A.head <<< (A.filter condition) + getNewID :: State -> Int getNewID state = (_ + 1) $ Foldable.foldl max 0 [ maxIDrr