36 lines
894 B
Haskell
36 lines
894 B
Haskell
module Fedi.Routes.User where
|
|
|
|
import Data.Aeson qualified as A
|
|
import Fedi.Helpers
|
|
import Fedi.UserDetails
|
|
import Fedi.Webfinger
|
|
import Fedi.Routes.Helpers
|
|
import Web.Twain qualified as Twain
|
|
import Web.Twain.Types qualified as Twain
|
|
|
|
-- * User
|
|
|
|
matchUser :: UserDetails -> Twain.PathPattern
|
|
matchUser details = fromString ("/" <> details.username)
|
|
|
|
handleUser :: UserDetails -> Twain.ResponderM a
|
|
handleUser details = do
|
|
let
|
|
content = makeActor details
|
|
Twain.send $ jsonLD (A.encode content)
|
|
|
|
-- * Webfinger
|
|
|
|
matchWebfinger :: Twain.PathPattern
|
|
matchWebfinger = "/.well-known/webfinger"
|
|
|
|
handleWebfinger :: UserDetails -> Twain.ResponderM b
|
|
handleWebfinger details = do
|
|
resource <- Twain.param "resource"
|
|
let
|
|
webfinger = makeWebfinger details
|
|
if resource == ppSubject webfinger.subject
|
|
then do
|
|
Twain.send $ jsonLD (A.encode webfinger)
|
|
else do
|
|
Twain.next
|