Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.28 KB | None | 0 0
  1. newtype PrivateData = PrivateData { ssshhh :: Text }
  2. deriving (Eq, Show, Generic)
  3.  
  4. newtype PublicData = PublicData { somedata :: Text }
  5. deriving (Eq, Show, Generic)
  6.  
  7. instance ToJSON PrivateData
  8. instance ToJSON PublicData
  9.  
  10. type PublicAPI = Get '[JSON] [PublicData]
  11. type PrivateAPI = Get '[JSON] PrivateData
  12.  
  13. type BasicAPI = "public" :> PublicAPI
  14. :<|> "private" :> BasicAuth "foo-realm" Text :> PrivateAPI
  15.  
  16. authCheck :: BasicAuthCheck Text
  17. authCheck =
  18. let check (BasicAuthData username password) =
  19. if username == "bob" && password == "secret"
  20. then return (Authorized "You're in!")
  21. else return Unauthorized
  22. in BasicAuthCheck check
  23.  
  24. basicAuthApi :: Proxy BasicAPI
  25. basicAuthApi = Proxy
  26.  
  27. basicAuthServerContext :: Context (BasicAuthCheck Text ': '[])
  28. basicAuthServerContext = authCheck :. EmptyContext
  29.  
  30. basicAuthServer :: ServerT BasicAPI App
  31. basicAuthServer =
  32. let publicApi = return [PublicData "lol", PublicData "bro"]
  33. privateApi (res :: Text) = return (PrivateData res)
  34. in publicApi :<|> privateApi
  35.  
  36. app :: Config -> Application
  37. app config =
  38. serveWithContext
  39. basicAuthApi
  40. basicAuthServerContext
  41. (hoistServerWithContext
  42. basicAuthApi
  43. (Proxy :: Proxy (BasicAuthCheck Text ': '[]))
  44. (convertApp config)
  45. basicAuthServer
  46. )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement