Skip to content

Commit

Permalink
Prefix all server modules #108
Browse files Browse the repository at this point in the history
This allows us to publish the package on Hackage.
  • Loading branch information
robbert-vdh committed May 8, 2023
1 parent 65ae9d1 commit 368eeab
Show file tree
Hide file tree
Showing 30 changed files with 134 additions and 129 deletions.
24 changes: 12 additions & 12 deletions server/app/Icepeak/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,18 @@ import qualified Prometheus
import qualified Prometheus.Metric.GHC
import qualified System.Posix.Signals as Signals

import Config (Config (..), configInfo)
import Core (Core (..))
import Persistence (getDataFile, setupStorageBackend)
import Logger (Logger, LogLevel(..), postLog)

import qualified Core
import qualified HttpServer
import qualified Server
import qualified WebsocketServer
import qualified Logger
import qualified Metrics
import qualified MetricsServer
import Icepeak.Server.Config (Config (..), configInfo)
import Icepeak.Server.Core (Core (..))
import Icepeak.Server.Persistence (getDataFile, setupStorageBackend)
import Icepeak.Server.Logger (Logger, LogLevel(..), postLog)

import qualified Icepeak.Server.Core as Core
import qualified Icepeak.Server.HttpServer as HttpServer
import qualified Icepeak.Server.Server as Server
import qualified Icepeak.Server.WebsocketServer as WebsocketServer
import qualified Icepeak.Server.Logger as Logger
import qualified Icepeak.Server.Metrics as Metrics
import qualified Icepeak.Server.MetricsServer as MetricsServer

-- Install SIGTERM and SIGINT handlers to do a graceful exit.
installHandlers :: Core -> IO ()
Expand Down
4 changes: 2 additions & 2 deletions server/app/IcepeakTokenGen/Main.hs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import System.Environment (getEnvironment)
import qualified Web.JWT as JWT
import qualified Data.Time.Clock.POSIX as Clock

import AccessControl
import JwtAuth
import Icepeak.Server.AccessControl
import Icepeak.Server.JwtAuth

data Config = Config
{ configJwtSecret :: Maybe JWT.EncodeSigner
Expand Down
32 changes: 16 additions & 16 deletions server/package.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -57,22 +57,22 @@ library:
- -fno-ignore-asserts
- -funbox-strict-fields
exposed-modules:
- AccessControl
- Config
- Core
- HTTPMethodInvalid
- HttpServer
- JwtAuth
- JwtMiddleware
- Logger
- Metrics
- MetricsServer
- Persistence
- SentryLogging
- Server
- Store
- Subscription
- WebsocketServer
- Icepeak.Server.AccessControl
- Icepeak.Server.Config
- Icepeak.Server.Core
- Icepeak.Server.HTTPMethodInvalid
- Icepeak.Server.HttpServer
- Icepeak.Server.JwtAuth
- Icepeak.Server.JwtMiddleware
- Icepeak.Server.Logger
- Icepeak.Server.Metrics
- Icepeak.Server.MetricsServer
- Icepeak.Server.Persistence
- Icepeak.Server.SentryLogging
- Icepeak.Server.Server
- Icepeak.Server.Store
- Icepeak.Server.Subscription
- Icepeak.Server.WebsocketServer

executables:
icepeak:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{-# LANGUAGE OverloadedStrings #-}
-- | This module defines the kinds of permissions used in icepeak and provides
-- functions checking for sufficient permissions for certain operations.
module AccessControl
module Icepeak.Server.AccessControl
( AccessMode (..)
, AuthPath (..)
, IcepeakClaim (..)
Expand All @@ -17,7 +17,7 @@ import qualified Data.Aeson as Aeson
import qualified Data.List as List
import Data.Text (Text)

import Store (Path)
import Icepeak.Server.Store (Path)

-- * Claim datatypes

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Config (
module Icepeak.Server.Config (
Config (..),
MetricsConfig (..),
StorageBackend (..),
Expand Down
18 changes: 9 additions & 9 deletions server/src/Core.hs → server/src/Icepeak/Server/Core.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{-# LANGUAGE OverloadedStrings #-}
module Core
module Icepeak.Server.Core
(
Core (..), -- TODO: Expose only put for clients.
EnqueueResult (..),
Expand Down Expand Up @@ -33,15 +33,15 @@ import Data.Traversable (for)
import Data.UUID (UUID)
import Prelude hiding (log, writeFile)

import Config (Config (..), periodicSyncingEnabled)
import Logger (Logger)
import Store (Path, Modification (..))
import Subscription (SubscriptionTree, empty)
import Persistence (PersistentValue, PersistenceConfig (..))
import Icepeak.Server.Config (Config (..), periodicSyncingEnabled)
import Icepeak.Server.Logger (Logger)
import Icepeak.Server.Store (Path, Modification (..))
import Icepeak.Server.Subscription (SubscriptionTree, empty)
import Icepeak.Server.Persistence (PersistentValue, PersistenceConfig (..))

import qualified Store
import qualified Persistence
import qualified Metrics
import qualified Icepeak.Server.Store as Store
import qualified Icepeak.Server.Persistence as Persistence
import qualified Icepeak.Server.Metrics as Metrics

-- | Defines the kinds of commands that are handled by the event loop of the Core.
data Command
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module HTTPMethodInvalid (canonicalizeHTTPMethods, limitHTTPMethods) where
module Icepeak.Server.HTTPMethodInvalid (canonicalizeHTTPMethods, limitHTTPMethods) where

import qualified Network.Wai as Wai
import qualified Network.HTTP.Types as HTTP
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{-# LANGUAGE OverloadedStrings #-}

module HttpServer (new) where
module Icepeak.Server.HttpServer (new) where

import Control.Concurrent.MVar (newEmptyMVar, takeMVar)
import Control.Monad
Expand All @@ -17,14 +17,14 @@ import qualified Data.Text.Lazy as LText
import qualified Network.Wai as Wai
import qualified Web.Scotty.Trans as Scotty

import HTTPMethodInvalid (canonicalizeHTTPMethods,limitHTTPMethods)
import JwtMiddleware (jwtMiddleware)
import Core (Core (..), EnqueueResult (..))
import Config (Config (..))
import Logger (postLog, LogLevel(LogError))
import qualified Store
import qualified Core
import qualified Metrics
import Icepeak.Server.HTTPMethodInvalid (canonicalizeHTTPMethods,limitHTTPMethods)
import Icepeak.Server.JwtMiddleware (jwtMiddleware)
import Icepeak.Server.Core (Core (..), EnqueueResult (..))
import Icepeak.Server.Config (Config (..))
import Icepeak.Server.Logger (postLog, LogLevel(LogError))
import qualified Icepeak.Server.Store as Store
import qualified Icepeak.Server.Core as Core
import qualified Icepeak.Server.Metrics as Metrics

new :: Core -> IO Application
new core =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{-# LANGUAGE OverloadedStrings #-}
-- | This module contains all the web framework independent code for parsing and verifying
-- JSON Web Tokens.
module JwtAuth where
module Icepeak.Server.JwtAuth where

import Control.Monad ((<=<))
import qualified Data.Aeson as Aeson
Expand All @@ -14,7 +14,7 @@ import Data.Time.Clock.POSIX (POSIXTime)
import Web.JWT (JWT, UnverifiedJWT, VerifiedJWT)
import qualified Web.JWT as JWT

import AccessControl
import Icepeak.Server.AccessControl

-- * Token verification

Expand Down Expand Up @@ -101,4 +101,4 @@ addIcepeakClaim :: IcepeakClaim -> JWT.JWTClaimsSet -> JWT.JWTClaimsSet
addIcepeakClaim claim claims = claims
{ JWT.unregisteredClaims = newClaimsMap <> JWT.unregisteredClaims claims }
where
newClaimsMap = JWT.ClaimsMap $ Map.fromList [("icepeak", Aeson.toJSON claim)]
newClaimsMap = JWT.ClaimsMap $ Map.fromList [("icepeak", Aeson.toJSON claim)]
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{-# LANGUAGE OverloadedStrings #-}
-- | This module provides functionality for verifying the JSON Web Tokens in a wai setting.
module JwtMiddleware where
module Icepeak.Server.JwtMiddleware where

import Control.Applicative
import Control.Monad
Expand All @@ -16,8 +16,8 @@ import qualified Network.HTTP.Types as Http
import qualified Network.Wai as Wai
import qualified Web.JWT as JWT

import AccessControl
import JwtAuth
import Icepeak.Server.AccessControl
import Icepeak.Server.JwtAuth

-- | Defines the kinds of errors that cause authorization to fail.
data AuthError
Expand Down
6 changes: 3 additions & 3 deletions server/src/Logger.hs → server/src/Icepeak/Server/Logger.hs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
module Logger
module Icepeak.Server.Logger
(
Logger,
LogRecord,
Expand All @@ -13,8 +13,8 @@ module Logger
)
where

import SentryLogging (getCrashLogger, logCrashMessage)
import Config (Config, configSentryDSN, configDisableSentryLogging, configQueueCapacity)
import Icepeak.Server.SentryLogging (getCrashLogger, logCrashMessage)
import Icepeak.Server.Config (Config, configSentryDSN, configDisableSentryLogging, configQueueCapacity)

import Control.Monad (unless, when, forM_)
import Control.Concurrent.STM (atomically)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{-# LANGUAGE OverloadedStrings #-}
module Metrics where
module Icepeak.Server.Metrics where

import Control.Monad.IO.Class
import Data.Text (Text, pack)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
{-# LANGUAGE OverloadedStrings #-}
module MetricsServer where
module Icepeak.Server.MetricsServer where

import Data.Function ((&))
import qualified Data.Text as Text
import qualified Network.Wai.Handler.Warp as Warp
import qualified Network.Wai.Middleware.Prometheus as PrometheusWai

import Config (MetricsConfig (..))
import Logger (Logger, LogLevel(..), postLog)
import Icepeak.Server.Config (MetricsConfig (..))
import Icepeak.Server.Logger (Logger, LogLevel(..), postLog)

metricsServerConfig :: MetricsConfig -> Warp.Settings
metricsServerConfig config = Warp.defaultSettings
Expand All @@ -16,7 +16,7 @@ metricsServerConfig config = Warp.defaultSettings

runMetricsServer :: Logger -> MetricsConfig -> IO ()
runMetricsServer logger metricsConfig = do
Logger.postLog logger LogInfo $ "Metrics provided on "
postLog logger LogInfo $ "Metrics provided on "
<> (Text.pack $ show $ metricsConfigHost metricsConfig)
<> ":"
<> (Text.pack $ show $ metricsConfigPort metricsConfig)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{-# LANGUAGE ScopedTypeVariables #-}
{-| This module abstracts over the details of persisting the value. Journaling is
also handled here, if enabled. -}
module Persistence
module Icepeak.Server.Persistence
( PersistentValue
, PersistenceConfig (..)
, getDataFile
Expand Down Expand Up @@ -36,12 +36,12 @@ import System.Directory (getFileSize, renameFile)
import System.Exit (die)
import System.IO
import System.IO.Error (tryIOError, isDoesNotExistError, isPermissionError)
import Logger (Logger, LogLevel(..))
import qualified Logger
import qualified Metrics
import qualified Store
import Icepeak.Server.Logger (Logger, LogLevel(..))
import qualified Icepeak.Server.Logger as Logger
import qualified Icepeak.Server.Metrics as Metrics
import qualified Icepeak.Server.Store as Store

import Config (StorageBackend (..))
import Icepeak.Server.Config (StorageBackend (..))

data PersistentValue = PersistentValue
{ pvConfig :: PersistenceConfig
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
-- | Module for logging (crash) reports to Sentry
module SentryLogging(
module Icepeak.Server.SentryLogging(
getCrashLogger, logCrashMessage
) where

Expand Down
4 changes: 2 additions & 2 deletions server/src/Server.hs → server/src/Icepeak/Server/Server.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{-# LANGUAGE OverloadedStrings #-}
module Server
module Icepeak.Server.Server
(
runServer,
)
Expand All @@ -14,7 +14,7 @@ import Network.WebSockets (ServerApp)
import qualified Network.Wai.Handler.Warp as Warp
import qualified Network.WebSockets as WebSockets

import Logger (Logger, LogLevel(..), postLog)
import Icepeak.Server.Logger (Logger, LogLevel(..), postLog)

runServer :: Logger -> ServerApp -> Application -> Int -> IO ()
runServer logger wsApp httpApp port =
Expand Down
9 changes: 5 additions & 4 deletions server/src/Store.hs → server/src/Icepeak/Server/Store.hs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{-# LANGUAGE OverloadedStrings #-}
module Store
module Icepeak.Server.Store
(
Modification (..),
Path,
Expand Down Expand Up @@ -73,8 +73,9 @@ lookupOrNull path = fromMaybe Null . lookup path

-- | Execute a modification.
applyModification :: Modification -> Value -> Value
applyModification (Delete path) value = Store.delete path value
applyModification (Put path newValue) value = Store.insert path newValue value
-- applyModification (Delete path) value = Store.delete path value
applyModification (Delete path) value = delete path value
applyModification (Put path newValue) value = insert path newValue value

-- Insert or overwrite a value at the given path, and create the path leading up to it if
-- it did not exist.
Expand Down Expand Up @@ -113,4 +114,4 @@ adjust f key keymap = runIdentity (KeyMap.alterF fMaybe key keymap)
-- When the 'f' function returns Nothing for a given key then the key is deleted from the KeyMap
-- and the altered KeyMap is returned.
alter :: (Maybe v -> Maybe v) -> Key.Key -> KeyMap.KeyMap v -> KeyMap.KeyMap v
alter f key keymap = runIdentity (KeyMap.alterF (pure . f) key keymap)
alter f key keymap = runIdentity (KeyMap.alterF (pure . f) key keymap)
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{-# LANGUAGE DeriveFunctor #-}

module Subscription
module Icepeak.Server.Subscription
(
SubscriptionTree (..),
broadcast,
Expand All @@ -24,7 +24,7 @@ import Data.Text (Text)
import qualified Data.HashMap.Strict as HashMap
import qualified Data.Text as Text

import qualified Store
import qualified Icepeak.Server.Store as Store

-- Keeps subscriptions in a tree data structure, so we can efficiently determine
-- which clients need to be notified for a given update.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{-# LANGUAGE OverloadedStrings #-}

module WebsocketServer (
module Icepeak.Server.WebsocketServer (
ServerState,
acceptConnection,
processUpdates
Expand All @@ -26,14 +26,14 @@ import qualified Network.WebSockets as WS
import qualified Network.HTTP.Types.Header as HttpHeader
import qualified Network.HTTP.Types.URI as Uri

import Config (Config (..))
import Core (Core (..), ServerState, SubscriberState (..), Updated (..), getCurrentValue, withCoreMetrics, newSubscriberState)
import Store (Path)
import AccessControl (AccessMode(..))
import JwtMiddleware (AuthResult (..), isRequestAuthorized, errorResponseBody)
import Icepeak.Server.Config (Config (..))
import Icepeak.Server.Core (Core (..), ServerState, SubscriberState (..), Updated (..), getCurrentValue, withCoreMetrics, newSubscriberState)
import Icepeak.Server.Store (Path)
import Icepeak.Server.AccessControl (AccessMode(..))
import Icepeak.Server.JwtMiddleware (AuthResult (..), isRequestAuthorized, errorResponseBody)

import qualified Metrics
import qualified Subscription
import qualified Icepeak.Server.Metrics as Metrics
import qualified Icepeak.Server.Subscription as Subscription
import Data.Maybe (isJust)

newUUID :: IO UUID
Expand Down
Loading

0 comments on commit 368eeab

Please sign in to comment.