Fully embrace ownership management.

This commit is contained in:
Philippe PITTOLI 2024-04-25 23:17:14 +02:00
parent c98de0e4f0
commit 9346e81861
2 changed files with 29 additions and 32 deletions

View File

@ -2,6 +2,8 @@ module App.Message.DNSManagerDaemon where
import Prelude (bind, pure, show, ($))
import App.Type.DomainInfo as DomainInfo
import Effect (Effect)
import Data.Argonaut.Core as J
@ -208,10 +210,10 @@ codecAcceptedDomains ∷ CA.JsonCodec AcceptedDomains
codecAcceptedDomains = CA.object "AcceptedDomains" (CAR.record { domains: CA.array CA.string })
{- 16 -}
type Logged = { accepted_domains :: Array String, my_domains :: Array String, admin :: Boolean }
type Logged = { accepted_domains :: Array String, my_domains :: Array DomainInfo.DomainInfo, admin :: Boolean }
codecLogged ∷ CA.JsonCodec Logged
codecLogged = CA.object "Logged" (CAR.record { accepted_domains: CA.array CA.string
, my_domains: CA.array CA.string
, my_domains: CA.array DomainInfo.codec
, admin: CA.boolean
})

View File

@ -8,7 +8,8 @@
-- | - delete a domain
-- | - ask for confirmation
-- | - switch to the interface to show and modify the content of a Zone
-- | - TODO: validate the domain before sending a message to `dnsmanagerd`
-- | - validate the domain before sending a message to `dnsmanagerd`
-- | - manage ownership of a domain: give, share, take back exclusive ownership.
module App.Page.DomainList where
import Prelude (Unit, bind, discard, map, otherwise, pure, ($), (/=), (<<<), (<>), (>), (==))
@ -91,7 +92,7 @@ data NewDomainFormAction
data Action
= UpdateAcceptedDomains (Array String)
| UpdateMyDomains (Array String)
| UpdateMyDomains (Array DomainInfo)
| HandleNewDomainInput NewDomainFormAction
| AskDomainTransferUUIDInput String
@ -133,7 +134,7 @@ type State =
, accepted_domains :: Array String
, my_domains :: Array DomainInfo
, active_modal :: Maybe String
, deletion_modal :: Maybe String
}
component :: forall m. MonadAff m => H.Component Query Input Output m
@ -154,28 +155,28 @@ component =
default_domain :: String
default_domain = "netlib.re"
debug_domains :: Array DomainInfo
debug_domains
= [ emptyDomainInfo { name = "test.example.com"
, share_key = Just "UUID"
, owners = ["myself", "you"] }
, emptyDomainInfo { name = "my-domain.example.com" }
, emptyDomainInfo { name = "my-other-domain.example.com" }
]
--debug_domains :: Array DomainInfo
--debug_domains
-- = [ emptyDomainInfo { name = "test.example.com"
-- , share_key = Just "UUID"
-- , owners = ["myself", "you"] }
-- , emptyDomainInfo { name = "my-domain.example.com" }
-- , emptyDomainInfo { name = "my-other-domain.example.com" }
-- ]
initialState :: Input -> State
initialState _ =
{ newDomainForm: { new_domain: "", _errors: [], selected_domain: default_domain }
, askDomainTransferForm: { uuid: "", _errors: [] }
, accepted_domains: [ default_domain ]
, my_domains: debug_domains
, active_modal: Nothing
, my_domains: []
, deletion_modal: Nothing
}
render :: forall m. State -> H.ComponentHTML Action () m
render { accepted_domains, my_domains, newDomainForm, askDomainTransferForm, active_modal }
render { accepted_domains, my_domains, newDomainForm, askDomainTransferForm, deletion_modal }
= Bulma.section_small
[ case active_modal of
[ case deletion_modal of
Nothing -> Bulma.columns_
[ Bulma.column_ [ Bulma.h3 "New domain", render_add_domain_form
, Bulma.hr
@ -289,15 +290,13 @@ handleAction = case _ of
H.raise $ StoreState state
CancelModal -> do
H.modify_ _ { active_modal = Nothing }
H.modify_ _ { deletion_modal = Nothing }
UpdateAcceptedDomains domains -> do
H.modify_ _ { accepted_domains = domains }
UpdateMyDomains domains -> do
H.raise $ Log $ SystemLog "TODO: update my domains."
-- TODO
-- H.modify_ _ { my_domains = domains }
H.modify_ _ { my_domains = domains }
HandleNewDomainInput adduserinp -> do
case adduserinp of
@ -323,13 +322,13 @@ handleAction = case _ of
H.raise $ Log $ SystemLog $ "TODO: Unshare domain " <> domain
DeleteDomainModal domain -> do
H.modify_ _ { active_modal = Just domain }
H.modify_ _ { deletion_modal = Just domain }
RemoveDomain domain -> do
message <- H.liftEffect $ DNSManager.serialize $ DNSManager.MkDeleteDomain { domain: domain }
H.raise $ MessageToSend message
H.raise $ Log $ SystemLog $ "Remove domain: " <> domain
H.modify_ _ { active_modal = Nothing }
H.modify_ _ { deletion_modal = Nothing }
NewDomainAttempt ev -> do
H.liftEffect $ Event.preventDefault ev
@ -386,14 +385,11 @@ handleQuery = case _ of
handleAction $ UpdateAcceptedDomains response.accepted_domains
handleAction $ UpdateMyDomains response.my_domains
(DNSManager.MkDomainAdded response) -> do
-- TODO
H.raise $ Log $ SystemLog "TODO: domain added: update my domains."
--{ my_domains } <- H.get
--handleAction $ UpdateMyDomains (my_domains <> [response.domain])
{ my_domains } <- H.get
handleAction $ UpdateMyDomains (my_domains <> [ emptyDomainInfo { name = response.domain } ])
(DNSManager.MkDomainDeleted response) -> do
H.raise $ Log $ SystemLog "TODO: domain deleted: update my domains."
--{ my_domains } <- H.get
--handleAction $ UpdateMyDomains $ A.filter ((/=) response.domain) my_domains
{ my_domains } <- H.get
handleAction $ UpdateMyDomains $ A.filter (\d -> d.name /= response.domain) my_domains
_ -> H.raise $ Log $ ErrorLog $ "Message not handled in DomainListInterface."
pure (Just a)
@ -402,8 +398,7 @@ page_reload s1 message =
case message of
DNSManager.MkLogged response ->
s1 { accepted_domains = response.accepted_domains
-- TODO
-- , my_domains = A.sort response.my_domains
, my_domains = A.sort response.my_domains
}
_ -> s1