summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstuebinm2022-02-16 20:28:46 +0100
committerstuebinm2022-02-16 20:28:46 +0100
commit7c73bf1d94b8a972ba64fb8210290de7e6ab2839 (patch)
tree92f4ab4fa83fa6e82241a3cc181e9dcf27dd0907
parentb3c3b5d727f2c8548ab72ff07a0f8c6b9844bfac (diff)
server: exneuland wants a token, apparently
-rw-r--r--config.toml1
-rw-r--r--server/Main.hs20
-rw-r--r--server/Server.hs15
3 files changed, 17 insertions, 19 deletions
diff --git a/config.toml b/config.toml
index cda774b..0518962 100644
--- a/config.toml
+++ b/config.toml
@@ -8,6 +8,7 @@ tmpdir = "/tmp"
# linting interval in seconds
interval = 30
exneuland = "http://localhost:4000"
+token = "hello, world!"
[[org]]
slug = "divoc"
diff --git a/server/Main.hs b/server/Main.hs
index 8ea59d6..1a18c6a 100644
--- a/server/Main.hs
+++ b/server/Main.hs
@@ -10,14 +10,7 @@
-- | simple server offering linting "as a service"
module Main where
-import Universum (Container (length), IO,
- MVar, Monad ((>>=)),
- Num ((*)), Proxy (Proxy),
- Text, atomically, forM_,
- forever, map, newMVar,
- print, putTextLn,
- readMVar, view, void,
- ($), (.))
+import Universum
import Control.Concurrent (threadDelay)
import Control.Concurrent.Async (async, link, waitEither_)
@@ -49,10 +42,11 @@ import Server (JobStatus, Org (..),
ServerState, Sha1,
emptyState, exneuland,
interval, loadConfig,
- orgs, port, unState,
- verbose)
+ orgs, port, token,
+ unState, verbose)
import Worker (Job (Job), linterThread)
+import Servant.API (Header)
import Servant.Client (BaseUrl (BaseUrl),
ClientM, Scheme (Http),
client, mkClientEnv,
@@ -60,7 +54,7 @@ import Servant.Client (BaseUrl (BaseUrl),
type family PolyEndpoint method format payload where
PolyEndpoint Get format payload = Get format payload
- PolyEndpoint Post format payload = ReqBody format payload :> Post '[PlainText] Text
+ PolyEndpoint Post format payload = Header "Auth" Text :> ReqBody format payload :> Post '[PlainText] Text
type MapServiceAPI method =
@@ -92,7 +86,7 @@ server state = jsonAPI @JSON state
app :: MVar ServerState -> Application
app = serve (Proxy @Routes) . server
-postNewMaps :: MapService -> ClientM Text
+postNewMaps :: Maybe Text -> MapService -> ClientM Text
postNewMaps = client (Proxy @(MapServiceAPI Post))
main :: IO ()
@@ -123,7 +117,7 @@ main = do
updater <- async $ forever $ do
done <- readMVar state
res <- runClientM
- (postNewMaps (MapService done))
+ (postNewMaps (view token config) (MapService done))
(mkClientEnv manager' (view exneuland config))
print res
threadDelay (view interval config * 1000000)
diff --git a/server/Server.hs b/server/Server.hs
index ef01b88..8f09ac7 100644
--- a/server/Server.hs
+++ b/server/Server.hs
@@ -19,7 +19,7 @@
module Server ( loadConfig
, Org(..)
, Sha1
- , Config, tmpdir, port, verbose, orgs, interval, exneuland
+ , Config, tmpdir, port, verbose, orgs, interval, exneuland, token
, RemoteRef(..)
, ServerState, emptyState, unState
, JobStatus(..)
@@ -36,19 +36,19 @@ import Data.Aeson (FromJSON, ToJSON, ToJSONKey (..),
eitherDecodeFileStrict')
import qualified Data.Aeson as A
import qualified Data.ByteString.Base64.URL as Base64
+import Data.Coerce (coerce)
+import Data.Either.Extra (mapLeft)
import Data.Functor.Contravariant (contramap)
import qualified Data.Map as M
import Lens.Micro.Platform (at, ix, makeLenses, traverseOf)
import LintConfig (LintConfig')
import Servant (FromHttpApiData)
-import Servant.Client (BaseUrl,
- parseBaseUrl)
+import Servant.Client (BaseUrl, parseBaseUrl)
import Toml (BiMap (BiMap), TomlBiMap,
TomlBiMapError (ArbitraryError),
- TomlCodec,
- prettyTomlDecodeErrors, (.=))
+ TomlCodec, prettyTomlDecodeErrors,
+ (.=))
import qualified Toml as T
-import Data.Either.Extra (mapLeft)
-- | a reference in a remote git repository
data RemoteRef = RemoteRef
@@ -116,6 +116,7 @@ data Config (loaded :: Bool) = Config
, _interval :: Int
-- ^ port to bind to
, _exneuland :: BaseUrl
+ , _token :: Maybe Text
, _orgs :: [Org loaded]
} deriving Generic
@@ -150,6 +151,8 @@ configCodec = Config
<*> T.bool "verbose" .= _verbose
<*> T.int "interval" .= _interval
<*> T.match (urlBimap >>> T._String) "exneuland" .= _exneuland
+ -- First is just Maybe but with different semantics
+ <*> coerce (T.first T.text "token") .= _token
<*> T.list orgCodec "org" .= _orgs
-- | a job status (of a specific uuid)