mirror of
https://code.sup39.dev/repos/Wqawg
synced 2024-12-27 19:54:53 +09:00
Person: Port Reject{Follow} handler
This commit is contained in:
parent
9b0622cd7a
commit
552ef760e6
2 changed files with 63 additions and 1 deletions
|
@ -230,7 +230,7 @@ personAccept
|
||||||
-> LocalURI
|
-> LocalURI
|
||||||
-> AP.Accept URIMode
|
-> AP.Accept URIMode
|
||||||
-> ActE (Text, Act (), Next)
|
-> ActE (Text, Act (), Next)
|
||||||
personAccept now recipPersonID author body mfwd luAccept accept = do
|
personAccept now recipPersonID author body _mfwd luAccept accept = do
|
||||||
|
|
||||||
-- Check input
|
-- Check input
|
||||||
acceptee <- parseAccept accept
|
acceptee <- parseAccept accept
|
||||||
|
@ -280,6 +280,61 @@ personAccept now recipPersonID author body mfwd luAccept accept = do
|
||||||
}
|
}
|
||||||
tryFollow _ (Right _) _ = mzero
|
tryFollow _ (Right _) _ = mzero
|
||||||
|
|
||||||
|
-- Meaning: A remote actor rejected something
|
||||||
|
-- Behavior:
|
||||||
|
-- * Insert to my inbox
|
||||||
|
-- * If it's a Follow I sent to them, remove record from my DB
|
||||||
|
personReject
|
||||||
|
:: UTCTime
|
||||||
|
-> PersonId
|
||||||
|
-> RemoteAuthor
|
||||||
|
-> ActivityBody
|
||||||
|
-> Maybe (RecipientRoutes, ByteString)
|
||||||
|
-> LocalURI
|
||||||
|
-> AP.Reject URIMode
|
||||||
|
-> ActE (Text, Act (), Next)
|
||||||
|
personReject now recipPersonID author body _mfwd luReject reject = do
|
||||||
|
|
||||||
|
-- Check input
|
||||||
|
rejectee <- parseReject reject
|
||||||
|
|
||||||
|
maybeReject <- withDBExcept $ do
|
||||||
|
|
||||||
|
-- Grab recipient person from DB
|
||||||
|
(personRecip, actorRecip) <- lift $ do
|
||||||
|
p <- getJust recipPersonID
|
||||||
|
(p,) <$> getJust (personActor p)
|
||||||
|
|
||||||
|
mractid <- lift $ insertToInbox now author body (actorInbox actorRecip) luReject True
|
||||||
|
for mractid $ \ rejectID -> runMaybeT $ do
|
||||||
|
|
||||||
|
-- Find the rejected activity in our DB
|
||||||
|
rejecteeDB <- MaybeT $ getActivity rejectee
|
||||||
|
|
||||||
|
tryFollow rejecteeDB
|
||||||
|
|
||||||
|
case maybeReject of
|
||||||
|
Nothing -> done "I already have this activity in my inbox"
|
||||||
|
Just Nothing -> done "Not my Follow; Just inserted to my inbox"
|
||||||
|
Just (Just ()) ->
|
||||||
|
done "Recorded this Reject on the Follow request I sent"
|
||||||
|
|
||||||
|
where
|
||||||
|
|
||||||
|
tryFollow (Left (_, _, outboxItemID)) = do
|
||||||
|
Entity key val <-
|
||||||
|
MaybeT $ lift $
|
||||||
|
getBy $ UniqueFollowRemoteRequestActivity outboxItemID
|
||||||
|
guard $ followRemoteRequestPerson val == recipPersonID
|
||||||
|
let uRecip =
|
||||||
|
fromMaybe
|
||||||
|
(followRemoteRequestTarget val)
|
||||||
|
(followRemoteRequestRecip val)
|
||||||
|
unless (remoteAuthorURI author == uRecip) $
|
||||||
|
lift $ throwE "You're Rejecting a Follow I sent to someone else"
|
||||||
|
lift $ lift $ delete key
|
||||||
|
tryFollow (Right _) = mzero
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- Commenting
|
-- Commenting
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
|
@ -569,4 +624,6 @@ personBehavior now personID (Right (VerseRemote author body mfwd luActivity)) =
|
||||||
AP.UndoActivity undo ->
|
AP.UndoActivity undo ->
|
||||||
(,Nothing) <$> personUndoA now personID author body mfwd luActivity undo
|
(,Nothing) <$> personUndoA now personID author body mfwd luActivity undo
|
||||||
-}
|
-}
|
||||||
|
AP.RejectActivity reject ->
|
||||||
|
personReject now personID author body mfwd luActivity reject
|
||||||
_ -> throwE "Unsupported activity type for Person"
|
_ -> throwE "Unsupported activity type for Person"
|
||||||
|
|
|
@ -25,6 +25,7 @@ module Vervis.Data.Collab
|
||||||
, parseJoin
|
, parseJoin
|
||||||
, parseGrant
|
, parseGrant
|
||||||
, parseAccept
|
, parseAccept
|
||||||
|
, parseReject
|
||||||
|
|
||||||
, grantResourceActorID
|
, grantResourceActorID
|
||||||
)
|
)
|
||||||
|
@ -236,6 +237,10 @@ parseAccept (AP.Accept object mresult) = do
|
||||||
first (\ (actor, _, item) -> (actor, item)) <$>
|
first (\ (actor, _, item) -> (actor, item)) <$>
|
||||||
nameExceptT "Accept object" (parseActivityURI' object)
|
nameExceptT "Accept object" (parseActivityURI' object)
|
||||||
|
|
||||||
|
parseReject (AP.Reject object) =
|
||||||
|
first (\ (actor, _, item) -> (actor, item)) <$>
|
||||||
|
nameExceptT "Reject object" (parseActivityURI' object)
|
||||||
|
|
||||||
grantResourceActorID :: GrantResourceBy Identity -> ActorId
|
grantResourceActorID :: GrantResourceBy Identity -> ActorId
|
||||||
grantResourceActorID (GrantResourceRepo (Identity r)) = repoActor r
|
grantResourceActorID (GrantResourceRepo (Identity r)) = repoActor r
|
||||||
grantResourceActorID (GrantResourceDeck (Identity d)) = deckActor d
|
grantResourceActorID (GrantResourceDeck (Identity d)) = deckActor d
|
||||||
|
|
Loading…
Reference in a new issue