S2S: Project: Accept: When removing a child, revoke extensions to teams
This commit is contained in:
parent
4f5954de7e
commit
3fb5e92f44
1 changed files with 66 additions and 42 deletions
|
@ -82,11 +82,31 @@ import Vervis.Web.Collab
|
||||||
|
|
||||||
-- Meaning: An actor accepted something
|
-- Meaning: An actor accepted something
|
||||||
-- Behavior:
|
-- Behavior:
|
||||||
-- * Check if I know the activity that's being Accepted:
|
-- * == Collab mode ==
|
||||||
-- * Is it an Invite to be a collaborator in me?
|
-- * Is it an Invite to be a collaborator in me?
|
||||||
-- * Verify the Accept is by the Invite target
|
-- * Verify the Accept is by the Invite target
|
||||||
-- * Is it a Join to be a collaborator in me?
|
-- * Is it a Join to be a collaborator in me?
|
||||||
-- * Verify the Accept is authorized
|
-- * Verify the Accept is authorized
|
||||||
|
--
|
||||||
|
-- * In collab mode, verify the Collab isn't enabled yet
|
||||||
|
--
|
||||||
|
-- * Insert the Accept to my inbox
|
||||||
|
--
|
||||||
|
-- * In collab mode, record the Accept and enable the Collab in DB
|
||||||
|
--
|
||||||
|
-- * Forward the Accept to my followers
|
||||||
|
--
|
||||||
|
-- * Possibly send a Grant/Accept:
|
||||||
|
-- * For Invite-collab mode:
|
||||||
|
-- * Regular collaborator-Grant
|
||||||
|
-- * To: Accepter (i.e. Invite target)
|
||||||
|
-- * CC: Invite sender, Accepter's followers, my followers
|
||||||
|
-- * For Join-as-collab mode:
|
||||||
|
-- * Regular collaborator-Grant
|
||||||
|
-- * To: Join sender
|
||||||
|
-- * CC: Accept sender, Join sender's followers, my followers
|
||||||
|
--
|
||||||
|
-- * == Component mode ==
|
||||||
-- * Is it an Invite to be a component of me?
|
-- * Is it an Invite to be a component of me?
|
||||||
-- * Nothing to check at this point
|
-- * Nothing to check at this point
|
||||||
-- * Is it an Add to be a component of me?
|
-- * Is it an Add to be a component of me?
|
||||||
|
@ -96,6 +116,40 @@ import Vervis.Web.Collab
|
||||||
-- * Verify I've seen the component-Accept for this Add
|
-- * Verify I've seen the component-Accept for this Add
|
||||||
-- * Verify the new Accept is authorized
|
-- * Verify the new Accept is authorized
|
||||||
--
|
--
|
||||||
|
-- * In component mode, verify the Component isn't enabled yet
|
||||||
|
--
|
||||||
|
-- * Insert the Accept to my inbox
|
||||||
|
--
|
||||||
|
-- * In Invite-component mode,
|
||||||
|
-- * If sender is component, record the Accept and enable the Component
|
||||||
|
-- in DB
|
||||||
|
-- * Otherwise, nothing at this point
|
||||||
|
-- * In Add-component mode,
|
||||||
|
-- * If the sender is the component, record the Accept into the
|
||||||
|
-- Component record in DB
|
||||||
|
-- * Otherwise, i.e. sender isn't the component, record the Accept and
|
||||||
|
-- enable the Component in DB
|
||||||
|
--
|
||||||
|
-- * Forward the Accept to my followers
|
||||||
|
--
|
||||||
|
-- * Possibly send a Grant/Accept:
|
||||||
|
-- * For Invite-component mode:
|
||||||
|
-- * Only if sender is the component
|
||||||
|
-- * delegator-Grant
|
||||||
|
-- * To: Component
|
||||||
|
-- * CC:
|
||||||
|
-- - Component's followers
|
||||||
|
-- - My followers
|
||||||
|
-- * For Add-component mode:
|
||||||
|
-- * Only if sender isn't the component
|
||||||
|
-- * delegator-Grant
|
||||||
|
-- * To: Component
|
||||||
|
-- * CC:
|
||||||
|
-- - Component's followers
|
||||||
|
-- - My followers
|
||||||
|
-- - The Accept's sender
|
||||||
|
--
|
||||||
|
-- * == Child-parent mode ==
|
||||||
-- * Give me a new child active SourceOriginUs
|
-- * Give me a new child active SourceOriginUs
|
||||||
-- * Verify we haven't yet seen child's Accept
|
-- * Verify we haven't yet seen child's Accept
|
||||||
-- * Give me a new child passive SourceOriginThem
|
-- * Give me a new child passive SourceOriginThem
|
||||||
|
@ -113,24 +167,8 @@ import Vervis.Web.Collab
|
||||||
-- * Verify the accept is authorized
|
-- * Verify the accept is authorized
|
||||||
-- * Otherwise respond with error, no Accept is needed
|
-- * Otherwise respond with error, no Accept is needed
|
||||||
--
|
--
|
||||||
-- * If it's none of these, respond with error
|
|
||||||
--
|
|
||||||
-- * In collab mode, verify the Collab isn't enabled yet
|
|
||||||
-- * In component mode, verify the Component isn't enabled yet
|
|
||||||
--
|
|
||||||
-- * Insert the Accept to my inbox
|
-- * Insert the Accept to my inbox
|
||||||
--
|
--
|
||||||
-- * In collab mode, record the Accept and enable the Collab in DB
|
|
||||||
-- * In Invite-component mode,
|
|
||||||
-- * If sender is component, record the Accept and enable the Component
|
|
||||||
-- in DB
|
|
||||||
-- * Otherwise, nothing at this point
|
|
||||||
-- * In Add-component mode,
|
|
||||||
-- * If the sender is the component, record the Accept into the
|
|
||||||
-- Component record in DB
|
|
||||||
-- * Otherwise, i.e. sender isn't the component, record the Accept and
|
|
||||||
-- enable the Component in DB
|
|
||||||
--
|
|
||||||
-- * In child-active mode,
|
-- * In child-active mode,
|
||||||
-- * If sender is the child, record the Accept into the Source record
|
-- * If sender is the child, record the Accept into the Source record
|
||||||
-- * Prepare to send degelator-Grant
|
-- * Prepare to send degelator-Grant
|
||||||
|
@ -147,30 +185,6 @@ import Vervis.Web.Collab
|
||||||
-- * Forward the Accept to my followers
|
-- * Forward the Accept to my followers
|
||||||
--
|
--
|
||||||
-- * Possibly send a Grant/Accept:
|
-- * Possibly send a Grant/Accept:
|
||||||
-- * For Invite-collab mode:
|
|
||||||
-- * Regular collaborator-Grant
|
|
||||||
-- * To: Accepter (i.e. Invite target)
|
|
||||||
-- * CC: Invite sender, Accepter's followers, my followers
|
|
||||||
-- * For Join-as-collab mode:
|
|
||||||
-- * Regular collaborator-Grant
|
|
||||||
-- * To: Join sender
|
|
||||||
-- * CC: Accept sender, Join sender's followers, my followers
|
|
||||||
-- * For Invite-component mode:
|
|
||||||
-- * Only if sender is the component
|
|
||||||
-- * delegator-Grant
|
|
||||||
-- * To: Component
|
|
||||||
-- * CC:
|
|
||||||
-- - Component's followers
|
|
||||||
-- - My followers
|
|
||||||
-- * For Add-component mode:
|
|
||||||
-- * Only if sender isn't the component
|
|
||||||
-- * delegator-Grant
|
|
||||||
-- * To: Component
|
|
||||||
-- * CC:
|
|
||||||
-- - Component's followers
|
|
||||||
-- - My followers
|
|
||||||
-- - The Accept's sender
|
|
||||||
--
|
|
||||||
-- * Child-active
|
-- * Child-active
|
||||||
-- * If sender is the child
|
-- * If sender is the child
|
||||||
-- * delegator-Grant
|
-- * delegator-Grant
|
||||||
|
@ -1212,6 +1226,7 @@ projectAccept now projectID (Verse authorIdMsig body) accept = do
|
||||||
-- Grab extension-Grants that I'm about to revoke
|
-- Grab extension-Grants that I'm about to revoke
|
||||||
gathers <- selectList [SourceUsGatherSource ==. sendID] []
|
gathers <- selectList [SourceUsGatherSource ==. sendID] []
|
||||||
leafs <- selectList [SourceUsLeafSource ==. sendID] []
|
leafs <- selectList [SourceUsLeafSource ==. sendID] []
|
||||||
|
conveys <- selectList [SourceUsConveySource ==. sendID] []
|
||||||
|
|
||||||
-- Delete the whole Source record
|
-- Delete the whole Source record
|
||||||
deleteWhere [SourceRemoveSend ==. sendID]
|
deleteWhere [SourceRemoveSend ==. sendID]
|
||||||
|
@ -1225,6 +1240,10 @@ projectAccept now projectID (Verse authorIdMsig body) accept = do
|
||||||
deleteWhere [SourceUsLeafToLocalLeaf <-. leafIDs]
|
deleteWhere [SourceUsLeafToLocalLeaf <-. leafIDs]
|
||||||
deleteWhere [SourceUsLeafToRemoteLeaf <-. leafIDs]
|
deleteWhere [SourceUsLeafToRemoteLeaf <-. leafIDs]
|
||||||
deleteWhere [SourceUsLeafId <-. leafIDs]
|
deleteWhere [SourceUsLeafId <-. leafIDs]
|
||||||
|
let conveyIDs = map entityKey conveys
|
||||||
|
deleteWhere [SourceUsConveyFromLocalConvey <-. conveyIDs]
|
||||||
|
deleteWhere [SourceUsConveyFromRemoteConvey <-. conveyIDs]
|
||||||
|
deleteWhere [SourceUsConveyId <-. conveyIDs]
|
||||||
case child of
|
case child of
|
||||||
Left (localID, _) -> do
|
Left (localID, _) -> do
|
||||||
acceptID <- getKeyByJust $ UniqueSourceThemAcceptLocal localID
|
acceptID <- getKeyByJust $ UniqueSourceThemAcceptLocal localID
|
||||||
|
@ -1297,7 +1316,12 @@ projectAccept now projectID (Verse authorIdMsig body) accept = do
|
||||||
recip
|
recip
|
||||||
, grantID
|
, grantID
|
||||||
)
|
)
|
||||||
revokes <- for (revokesG ++ revokesL) $ \ (actor, grantID) -> do
|
revokesC <- for conveys $ \ (Entity _ (SourceUsConvey _ startID grantID)) -> do
|
||||||
|
SquadUsStart acceptID _ <- getJust startID
|
||||||
|
SquadUsAccept squadID _ <- getJust acceptID
|
||||||
|
team <- bimap (LocalActorGroup . snd) snd <$> getSquadTeam squadID
|
||||||
|
return (team, grantID)
|
||||||
|
revokes <- for (revokesG ++ revokesL ++ revokesC) $ \ (actor, grantID) -> do
|
||||||
ext@(actionExt, _, _, _) <- prepareExtRevoke actor grantID
|
ext@(actionExt, _, _, _) <- prepareExtRevoke actor grantID
|
||||||
let recipByKey = LocalActorProject projectID
|
let recipByKey = LocalActorProject projectID
|
||||||
extID <- insertEmptyOutboxItem' (actorOutbox actorRecip) now
|
extID <- insertEmptyOutboxItem' (actorOutbox actorRecip) now
|
||||||
|
|
Loading…
Reference in a new issue