Browse Source

junction: broker certificates

junction
Denis Tereshkin 4 years ago
parent
commit
bf7df5e98c
  1. 39
      src/ATrade/Driver/Junction.hs

39
src/ATrade/Driver/Junction.hs

@ -17,7 +17,7 @@ import ATrade.Broker.Client (BrokerClientHandle
import ATrade.Broker.Protocol (Notification (OrderNotification, TradeNotification), import ATrade.Broker.Protocol (Notification (OrderNotification, TradeNotification),
NotificationSqnum, NotificationSqnum,
getNotificationSqnum) getNotificationSqnum)
import ATrade.Driver.Junction.ProgramConfiguration (ProgramConfiguration (brokerEndpoint, brokerNotificationEndpoint, instances, qhpEndpoint, qtisEndpoint, redisSocket, robotsConfigsPath), import ATrade.Driver.Junction.ProgramConfiguration (ProgramConfiguration (brokerClientCert, brokerEndpoint, brokerNotificationEndpoint, brokerServerCert, instances, qhpEndpoint, qtisEndpoint, redisSocket, robotsConfigsPath),
ProgramOptions (ProgramOptions, configPath)) ProgramOptions (ProgramOptions, configPath))
import ATrade.Driver.Junction.QuoteStream (QuoteStream (addSubscription, removeSubscription), import ATrade.Driver.Junction.QuoteStream (QuoteStream (addSubscription, removeSubscription),
QuoteSubscription (QuoteSubscription), QuoteSubscription (QuoteSubscription),
@ -44,7 +44,7 @@ import ATrade.RoboCom.Persistence (MonadPersistence (
import ATrade.Types (ClientSecurityParams (ClientSecurityParams), import ATrade.Types (ClientSecurityParams (ClientSecurityParams),
OrderId, OrderId,
Trade (tradeOrderId)) Trade (tradeOrderId))
import Control.Concurrent import Control.Concurrent (threadDelay)
import Control.Exception.Safe (MonadThrow, import Control.Exception.Safe (MonadThrow,
bracket) bracket)
import Control.Monad (forM_, forever) import Control.Monad (forM_, forever)
@ -87,6 +87,7 @@ import Options.Applicative (Parser,
import Prelude hiding (readFile) import Prelude hiding (readFile)
import System.Log.Logger (warningM) import System.Log.Logger (warningM)
import System.ZMQ4 (withContext) import System.ZMQ4 (withContext)
import System.ZMQ4.ZAP (loadCertificateFromFile)
data JunctionEnv = data JunctionEnv =
JunctionEnv JunctionEnv
@ -226,17 +227,29 @@ junctionMain descriptors = do
notificationOrderId (OrderNotification _ oid _) = oid notificationOrderId (OrderNotification _ oid _) = oid
notificationOrderId (TradeNotification _ trade) = tradeOrderId trade notificationOrderId (TradeNotification _ trade) = tradeOrderId trade
withBroker cfg ctx robotsMap ordersMap handled f = bracket withBroker cfg ctx robotsMap ordersMap handled f = do
(startBrokerClient securityParameters <- loadBrokerSecurityParameters cfg
"broker" bracket
ctx (startBrokerClient
(brokerEndpoint cfg) "broker"
(brokerNotificationEndpoint cfg) ctx
[handleBrokerNotification robotsMap ordersMap handled] (brokerEndpoint cfg)
(ClientSecurityParams -- TODO load certificates from file (brokerNotificationEndpoint cfg)
Nothing [handleBrokerNotification robotsMap ordersMap handled]
Nothing)) securityParameters)
stopBrokerClient f stopBrokerClient f
loadBrokerSecurityParameters cfg =
case (brokerClientCert cfg, brokerServerCert cfg) of
(Just clientCertPath, Just serverCertPath) -> do
eClientCert <- loadCertificateFromFile clientCertPath
eServerCert <- loadCertificateFromFile serverCertPath
case (eClientCert, eServerCert) of
(Right clientCert, Right serverCert) -> return $ ClientSecurityParams (Just clientCert) (Just serverCert)
(_, _) -> return $ ClientSecurityParams Nothing Nothing
_ -> return $ ClientSecurityParams Nothing Nothing
parseOptions = execParser options parseOptions = execParser options
options = info (optionsParser <**> helper) options = info (optionsParser <**> helper)
(fullDesc <> (fullDesc <>

Loading…
Cancel
Save