summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/release-candidate.yml2
-rw-r--r--pandoc-cgi/Main.hs8
-rw-r--r--pandoc.cabal16
-rw-r--r--server/Main.hs42
-rw-r--r--server/PandocServer.hs (renamed from pandoc-cgi/PandocCGI.hs)2
5 files changed, 53 insertions, 17 deletions
diff --git a/.github/workflows/release-candidate.yml b/.github/workflows/release-candidate.yml
index 6c4c6cf97..a8e829a11 100644
--- a/.github/workflows/release-candidate.yml
+++ b/.github/workflows/release-candidate.yml
@@ -20,7 +20,7 @@ jobs:
mkdir linux-release-candidate
cp linux/artifacts/*.deb linux-release-candidate/
cp linux/artifacts/*.tar.gz linux-release-candidate/
- cp linux/artifacts/pandoc-cgi linux-release-candidate/
+ cp linux/artifacts/pandoc-server linux-release-candidate/
- uses: actions/upload-artifact@v2
with:
name: linux-release-candidate
diff --git a/pandoc-cgi/Main.hs b/pandoc-cgi/Main.hs
deleted file mode 100644
index d83edd2a3..000000000
--- a/pandoc-cgi/Main.hs
+++ /dev/null
@@ -1,8 +0,0 @@
-module Main where
-
-import PandocCGI (app)
-import Network.Wai.Handler.CGI (run)
-import Network.Wai.Middleware.Timeout (timeout)
-
-main :: IO ()
-main = run $ timeout 2 app
diff --git a/pandoc.cabal b/pandoc.cabal
index 44ec59510..cab4e375c 100644
--- a/pandoc.cabal
+++ b/pandoc.cabal
@@ -428,8 +428,8 @@ flag lua53
Description: Embed Lua 5.3 instead of 5.4.
Default: False
-flag pandoc-cgi
- Description: Build pandoc-cgi executable.
+flag server
+ Description: Build pandoc-server executable.
Default: False
flag nightly
@@ -789,19 +789,21 @@ executable pandoc
buildable: True
other-modules: Paths_pandoc
-executable pandoc-cgi
+executable pandoc-server
import: common-executable
main-is: Main.hs
- other-modules: PandocCGI
- hs-source-dirs: pandoc-cgi
- if flag(pandoc-cgi)
+ other-modules: PandocServer
+ hs-source-dirs: server
+ if flag(server)
build-depends: base,
pandoc,
aeson,
text,
servant-server,
wai >= 0.3,
- wai-extra >= 3.0.24
+ wai-extra >= 3.0.24,
+ warp,
+ optparse-applicative
buildable: True
else
diff --git a/server/Main.hs b/server/Main.hs
new file mode 100644
index 000000000..4266519c7
--- /dev/null
+++ b/server/Main.hs
@@ -0,0 +1,42 @@
+module Main where
+
+import PandocServer (app)
+import qualified Network.Wai.Handler.CGI as CGI
+import qualified Network.Wai.Handler.Warp as Warp
+import Network.Wai.Middleware.Timeout (timeout)
+import System.Environment (getProgName)
+import Options.Applicative
+
+data Opts = Opts
+ { optPort :: Warp.Port,
+ optTimeout :: Int } -- in seconds
+
+options :: Parser Opts
+options = Opts
+ <$> option auto
+ ( long "port"
+ <> value 3030
+ <> metavar "PORT"
+ <> help "Port to serve on" )
+ <*> option auto
+ ( long "timeout"
+ <> value 2
+ <> metavar "SECONDS"
+ <> help "Seconds timeout" )
+
+main :: IO ()
+main = do
+ progname <- getProgName
+ let optspec = info (options <**> helper)
+ ( fullDesc
+ <> progDesc "Run a pandoc server"
+ <> header "pandoc-server - text conversion server" )
+ opts <- execParser optspec
+
+ let port = optPort opts
+ let app' = timeout (optTimeout opts) app
+ if progname == "pandoc-server.cgi"
+ then -- operate as a CGI script
+ CGI.run app'
+ else -- operate as a persistent server
+ Warp.run port app'
diff --git a/pandoc-cgi/PandocCGI.hs b/server/PandocServer.hs
index 1789f34a5..5b02c4ea3 100644
--- a/pandoc-cgi/PandocCGI.hs
+++ b/server/PandocServer.hs
@@ -3,7 +3,7 @@
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE OverloadedStrings #-}
-module PandocCGI
+module PandocServer
( app
, Params(..)
) where