wip
This commit is contained in:
parent
a580138e0d
commit
dc32120ca8
1
common/src/API.hs
Normal file
1
common/src/API.hs
Normal file
@ -0,0 +1 @@
|
||||
module API where
|
1
common/src/API/Books.hs
Normal file
1
common/src/API/Books.hs
Normal file
@ -0,0 +1 @@
|
||||
module API.Books where
|
1
common/src/API/Catalogue.hs
Normal file
1
common/src/API/Catalogue.hs
Normal file
@ -0,0 +1 @@
|
||||
module API.Catalogue where
|
27
common/src/API/Channels.hs
Normal file
27
common/src/API/Channels.hs
Normal file
@ -0,0 +1,27 @@
|
||||
{-# Language DuplicateRecordFields #-}
|
||||
module API.Channels (API) where
|
||||
|
||||
import Auth
|
||||
import ClassyPrelude
|
||||
import Data.Aeson
|
||||
import Servant.API
|
||||
import Servant.Auth as SA
|
||||
|
||||
data JsonChannel = JsonChannel { channel :: Text
|
||||
, visibility :: Visibility }
|
||||
deriving (Show, Generic)
|
||||
data UpdateChannel = UpdateChannel { identifier :: ChannelID
|
||||
, channel :: Text
|
||||
, visibility :: Visibility }
|
||||
deriving (Show, Generic)
|
||||
|
||||
instance ToJSON JsonChannel
|
||||
instance FromJSON JsonChannel
|
||||
instance ToJSON UpdateChannel
|
||||
instance FromJSON UpdateChannel
|
||||
|
||||
type API = Auth '[SA.BasicAuth, SA.Cookie, SA.JWT] SafeUser :> BaseAPI
|
||||
|
||||
type BaseAPI = "channels" :> ReqBody '[JSON] JsonChannel :> Post '[JSON] UpdateChannel
|
||||
:<|> "channels" :> Capture "channel_id" ChannelID :> ReqBody '[JSON] UpdateChannel :> Put '[JSON] UpdateChannel
|
||||
:<|> "channels" :> Get '[JSON] [JsonChannel]
|
1
common/src/API/Users.hs
Normal file
1
common/src/API/Users.hs
Normal file
@ -0,0 +1 @@
|
||||
module API.Users where
|
26
common/src/Auth.hs
Normal file
26
common/src/Auth.hs
Normal file
@ -0,0 +1,26 @@
|
||||
{-# Language GeneralizedNewtypeDeriving #-}
|
||||
module Auth where
|
||||
|
||||
import ClassyPrelude
|
||||
import Data.Aeson
|
||||
import Servant.Auth.Server (ToJWT, FromJWT)
|
||||
import Servant.API
|
||||
|
||||
-- generic-lens can convert similar types to this
|
||||
-- I'm trying out servant-auth-server which uses a jwt style login. IIRC anyone
|
||||
-- can open the jwt token and view what's inside, you just can't modify it.
|
||||
--
|
||||
-- Is it a problem that a human readable username and email are visible?
|
||||
newtype Email = Email { unEmail :: Text } deriving (Show, ToJSON, FromJSON, ToHttpApiData, FromHttpApiData)
|
||||
|
||||
newtype Username = Username { unUsername :: Text } deriving (Show, ToJSON, FromJSON, ToHttpApiData, FromHttpApiData)
|
||||
|
||||
data SafeUser = SafeUser { email :: Email
|
||||
, username :: Username
|
||||
}
|
||||
deriving (Show, Generic)
|
||||
|
||||
instance ToJSON SafeUser where
|
||||
instance FromJSON SafeUser where
|
||||
instance ToJWT SafeUser where
|
||||
instance FromJWT SafeUser where
|
Loading…
Reference in New Issue
Block a user