Advertisement
Guest User

Untitled

a guest
May 22nd, 2017
526
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.45 KB | None | 0 0
  1. -- Author: Viacheslav Lotsmanov
  2. -- License: AGPLv3
  3.  
  4. {-# LANGUAGE UnicodeSyntax #-}
  5. {-# LANGUAGE DataKinds #-}
  6. {-# LANGUAGE TypeOperators #-}
  7. {-# LANGUAGE DeriveGeneric #-}
  8. {-# LANGUAGE FlexibleInstances #-}
  9. {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  10. {-# LANGUAGE MultiParamTypeClasses #-}
  11. {-# LANGUAGE OverloadedStrings #-}
  12. {-# LANGUAGE ScopedTypeVariables #-}
  13.  
  14. module Lib
  15. ( someFunc
  16. ) where
  17.  
  18. import Servant
  19. import GHC.Generics
  20. import Data.Aeson
  21. import Network.Wai.Handler.Warp
  22.  
  23. -- import Servant.API (BasicAuth)
  24. import Servant.API.BasicAuth (BasicAuthData (BasicAuthData))
  25.  
  26. data User = User { name ∷ String
  27. , age ∷ Int
  28. , email ∷ String
  29. } deriving (Eq, Show, Generic)
  30.  
  31. instance ToJSON User
  32.  
  33. data PrivateStuff = PrivateStuff { foo ∷ Int
  34. , bar ∷ Int
  35. } deriving (Eq, Show, Generic)
  36.  
  37. instance ToJSON PrivateStuff
  38.  
  39. isaac ∷ User
  40. isaac = User "Isaac Newton" 372 "isaac@newton.co.uk"
  41.  
  42. albert ∷ User
  43. albert = User "Albert Einstein" 136 "ae@mc2.org"
  44.  
  45. users1 ∷ [User]
  46. users1 = [isaac, albert]
  47.  
  48.  
  49. -- type UserAPI1 = "users" :> Get '[JSON] [User]
  50. -- :<|> "albert" :> Get '[JSON] User
  51. -- :<|> "isaac" :> Get '[JSON] User
  52.  
  53. type (‣) = (:>)
  54. infixr 9 ‣
  55.  
  56. type (‡) = (:<|>)
  57. (‡) ∷ a → b → a :<|> b
  58. (‡) = (:<|>)
  59. infixr 8 ‡
  60.  
  61. (∵) = (:.)
  62. infixr 5 ∵
  63.  
  64. type UserAPI1 = "users" ‣ Get '[JSON] [User]
  65. ‡ "albert" ‣ Get '[JSON] User
  66. ‡ "isaac" ‣ Get '[JSON] User
  67. ‡ "admin" ‣ BasicAuth "test-realm" User ‣ Get '[JSON] PrivateStuff
  68.  
  69. server1 ∷ Server UserAPI1
  70. server1 = return users1
  71. ‡ return albert
  72. ‡ return isaac
  73. ‡ privateHandler
  74. where privateHandler (user ∷ User) = return $ PrivateStuff 222 333
  75.  
  76.  
  77. authCheck ∷ BasicAuthCheck User
  78. authCheck = BasicAuthCheck check
  79. where check (BasicAuthData user pass)
  80. | user == "ae" && pass == "ea" = return $ Authorized albert
  81. | otherwise = return Unauthorized
  82.  
  83. basicAuthServerContext ∷ Context (BasicAuthCheck User ': '[])
  84. basicAuthServerContext = authCheck ∵ EmptyContext
  85.  
  86.  
  87. userAPI ∷ Proxy UserAPI1
  88. userAPI = Proxy
  89.  
  90. -- app1 ∷ Application
  91. -- app1 = serve userAPI server1
  92.  
  93. someFunc ∷ IO ()
  94. -- someFunc = run 8081 app1
  95. someFunc = run 8081 $ serveWithContext userAPI
  96. basicAuthServerContext
  97. server1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement