module Server( -- * Server config ServerConfig(..) , readConfig -- * Server environment , ServerEnv , newServerEnv -- * Execution of server , exampleServerApp , runExampleServer ) where import Control.Monad.IO.Class import Control.Monad.Logger import Data.Proxy import Network.Wai import Network.Wai.Handler.Warp import Network.Wai.Middleware.RequestLogger import Servant.API.Auth.Token import Servant.Server import Servant.Server.Auth.Token import API import Config import Monad -- | Enter infinite loop of processing requests for pdf-master-server. -- -- Starts new Warp server with initialised threads for serving the master server. runExampleServer :: MonadIO m => ServerConfig -> m () runExampleServer config = liftIO $ do env <- newServerEnv config liftIO $ run (serverPort config) $ logStdoutDev $ exampleServerApp env -- | WAI application of server exampleServerApp :: ServerEnv -> Application exampleServerApp e = serve (Proxy :: Proxy ExampleAPI) apiImpl where apiImpl = enter (serverMtoHandler e) exampleServer -- | Implementation of main server API exampleServer :: ServerT ExampleAPI ServerM exampleServer = testEndpoint testEndpoint :: MToken' '["test-permission"] -> ServerM () testEndpoint token = do runAuth $ guardAuthToken token $logInfo "testEndpoint" return ()