diff --git a/src/Fedi/Activity.hs b/src/Fedi/Activity.hs index e3cee87..8b7162e 100644 --- a/src/Fedi/Activity.hs +++ b/src/Fedi/Activity.hs @@ -68,13 +68,37 @@ data Collection order a instance A.ToJSON Note where toJSON note = A.object $ - [ "type" A..= ("Note" :: String) + [ "@context" A..= + ( "https://www.w3.org/ns/activitystreams" :: String + ) , "id" A..= note.id + , "type" A..= ("Note" :: String) + , "summary" A..= (Nothing :: Maybe String) + , "inReplyTo" A..= (Nothing :: Maybe String) , "published" A..= note.published , "attributedTo" A..= note.actor , "content" A..= note.content , "name" A..= note.name , "replies" A..= note.replies + , "sensitive" A..= False + , "tag" A..= ([] :: [String]) + + , "to" A..= [ + "https://www.w3.org/ns/activitystreams#Public" :: String + ] + , "cc" A..= [ + note.actor <> "/followers" :: String + ] + , "likes" A..= + ( Collection + { id = note.id <> "/likes" + , summary = "likes" + , items = [] + , first = Nothing + , last = Nothing + } :: Collection Unordered Activity + ) + , "shares" A..= (Nothing :: Maybe String) ] <> [ "name" A..= name | Just name <- [note.name] ] <> [ "url" A..= url | Just url <- [note.url] ] diff --git a/src/Fedi/Routes.hs b/src/Fedi/Routes.hs index c791b41..f805139 100644 --- a/src/Fedi/Routes.hs +++ b/src/Fedi/Routes.hs @@ -5,6 +5,7 @@ import Web.Twain qualified as Twain import Web.Twain.Types qualified as Twain import Data.String (fromString) import Data.Aeson qualified as A +import Data.ByteString qualified as BS import Data.ByteString.Lazy qualified as BSL import Fedi.Types import Fedi.Activity @@ -147,3 +148,13 @@ handleOutbox details items = do } in A.encode content Twain.send $ jsonLD response + +checkContentTypeAccept :: Twain.Request -> Bool +checkContentTypeAccept request = + case lookup Twain.hAccept request.requestHeaders of + Just bs -> + ("application/activity+json" `BS.isInfixOf` bs) + || ( ("application/activity+json" `BS.isInfixOf` bs) + && ("profile=\"https://www.w3.org/ns/activitystreams\"" `BS.isInfixOf` bs) + ) + Nothing -> False