rename columns

This commit is contained in:
Evgeny Poberezkin
2022-08-25 21:42:58 +01:00
parent cac30ca341
commit a8c3f5c6b5
7 changed files with 43 additions and 37 deletions
+12 -10
View File
@@ -305,7 +305,7 @@ newConn :: AgentMonad m => AgentClient -> ConnId -> Bool -> SConnectionMode c ->
newConn c connId enableNtfs cMode = do
srv <- getSMPServer c
clientVRange <- asks $ smpClientVRange . config
(rq, qUri) <- newRcvQueue c srv clientVRange False
(rq, qUri) <- newRcvQueue c srv clientVRange True
g <- asks idsDrg
connAgentVersion <- asks $ maxVersion . smpAgentVRange . config
let cData = ConnData {connId, connAgentVersion, enableNtfs, duplexHandshake = Nothing} -- connection mode is determined by the accepting agent
@@ -335,7 +335,7 @@ joinConn c connId enableNtfs (CRInvitationUri (ConnReqUriData _ agentVRange (qUr
(pk1, pk2, e2eSndParams) <- liftIO . CR.generateE2EParams $ version e2eRcvParams
(_, rcDHRs) <- liftIO C.generateKeyPair'
let rc = CR.initSndRatchet rcDHRr rcDHRs $ CR.x3dhSnd pk1 pk2 e2eRcvParams
sq <- newSndQueue qInfo
sq <- newSndQueue qInfo True
g <- asks idsDrg
let duplexHS = connAgentVersion /= 1
cData = ConnData {connId, connAgentVersion, enableNtfs, duplexHandshake = Just duplexHS}
@@ -368,7 +368,7 @@ joinConn c connId enableNtfs (CRContactUri (ConnReqUriData _ agentVRange (qUri :
createReplyQueue :: AgentMonad m => AgentClient -> ConnData -> SndQueue -> m SMPQueueInfo
createReplyQueue c ConnData {connId, enableNtfs} SndQueue {smpClientVersion} = do
srv <- getSMPServer c
(rq, qUri) <- newRcvQueue c srv (versionToRange smpClientVersion) False
(rq, qUri) <- newRcvQueue c srv (versionToRange smpClientVersion) True
let qInfo = toVersionT qUri smpClientVersion
addSubscription c rq connId
withStore c $ \db -> upgradeSndConnToDuplex db connId rq
@@ -459,7 +459,7 @@ createNextRcvQueue c cData rq@RcvQueue {server, sndId} sq = do
pure SMPQueueUri {clientVRange, queueAddress}
_ -> do
srv <- getSMPServer c
(rq', qUri) <- newRcvQueue c srv clientVRange True
(rq', qUri) <- newRcvQueue c srv clientVRange False
withStore' c $ \db -> dbCreateNextRcvQueue db rq rq'
pure qUri
void $ enqueueMessage c cData sq SMP.noMsgFlags QNEW {currentAddress = (server, sndId), nextQueueUri}
@@ -1310,7 +1310,7 @@ processSMPTransmission c@AgentClient {smpClients, subQ} (srv, v, sessId, rId, cm
clientVRange <- asks $ smpClientVRange . config
case (nextQUri `compatibleVersion` clientVRange) of
Just qInfo@(Compatible nextQInfo) -> do
sq'@SndQueue {sndPublicKey, e2ePubKey} <- newSndQueue qInfo
sq'@SndQueue {sndPublicKey, e2ePubKey} <- newSndQueue qInfo False
withStore' c $ \db -> dbCreateNextSndQueue db sq sq'
case (sndPublicKey, e2ePubKey) of
(Just nextSenderKey, Just dhPublicKey) -> do
@@ -1409,7 +1409,7 @@ connectReplyQueues c cData@ConnData {connId} ownConnInfo (qInfo :| _) = do
case qInfo `proveCompatible` clientVRange of
Nothing -> throwError $ AGENT A_VERSION
Just qInfo' -> do
sq <- newSndQueue qInfo'
sq <- newSndQueue qInfo' True
withStore c $ \db -> upgradeRcvConnToDuplex db connId sq
enqueueConfirmation c cData sq ownConnInfo Nothing
@@ -1468,17 +1468,18 @@ agentRatchetDecrypt db connId encAgentMsg = do
liftIO $ updateRatchet db connId rc' skippedDiff
liftEither $ first (SEAgentError . cryptoError) agentMsgBody_
newSndQueue :: (MonadUnliftIO m, MonadReader Env m) => Compatible SMPQueueInfo -> m SndQueue
newSndQueue qInfo =
newSndQueue :: (MonadUnliftIO m, MonadReader Env m) => Compatible SMPQueueInfo -> Bool -> m SndQueue
newSndQueue qInfo current =
asks (cmdSignAlg . config) >>= \case
C.SignAlg a -> newSndQueue_ a qInfo
C.SignAlg a -> newSndQueue_ a qInfo current
newSndQueue_ ::
(C.SignatureAlgorithm a, C.AlgorithmI a, MonadUnliftIO m) =>
C.SAlgorithm a ->
Compatible SMPQueueInfo ->
Bool ->
m SndQueue
newSndQueue_ a (Compatible (SMPQueueInfo smpClientVersion SMPQueueAddress {smpServer, senderId, dhPublicKey = rcvE2ePubDhKey})) = do
newSndQueue_ a (Compatible (SMPQueueInfo smpClientVersion SMPQueueAddress {smpServer, senderId, dhPublicKey = rcvE2ePubDhKey})) current = do
-- this function assumes clientVersion is compatible - it was tested before
(sndPublicKey, sndPrivateKey) <- liftIO $ C.generateSignatureKeyPair a
(e2ePubKey, e2ePrivKey) <- liftIO C.generateKeyPair'
@@ -1492,6 +1493,7 @@ newSndQueue_ a (Compatible (SMPQueueInfo smpClientVersion SMPQueueAddress {smpSe
e2eDhSecret = C.dh' rcvE2ePubDhKey e2ePrivKey,
e2ePubKey = Just e2ePubKey,
status = New,
currSndQueue = current,
dbNextSndQueueId = Nothing,
sndQueueAction = Nothing,
smpClientVersion,
+4 -4
View File
@@ -472,9 +472,9 @@ protocolClientError protocolError_ = \case
e@PCEIOError {} -> INTERNAL $ show e
newRcvQueue :: AgentMonad m => AgentClient -> SMPServer -> VersionRange -> Bool -> m (RcvQueue, SMPQueueUri)
newRcvQueue c srv vRange next =
newRcvQueue c srv vRange current =
asks (cmdSignAlg . config) >>= \case
C.SignAlg a -> newRcvQueue_ a c srv vRange next
C.SignAlg a -> newRcvQueue_ a c srv vRange current
newRcvQueue_ ::
(C.SignatureAlgorithm a, C.AlgorithmI a, AgentMonad m) =>
@@ -484,7 +484,7 @@ newRcvQueue_ ::
VersionRange ->
Bool ->
m (RcvQueue, SMPQueueUri)
newRcvQueue_ a c srv vRange next = do
newRcvQueue_ a c srv vRange current = do
(recipientKey, rcvPrivateKey) <- liftIO $ C.generateSignatureKeyPair a
(dhKey, privDhKey) <- liftIO C.generateKeyPair'
(e2eDhKey, e2ePrivKey) <- liftIO C.generateKeyPair'
@@ -505,7 +505,7 @@ newRcvQueue_ a c srv vRange next = do
sndPublicKey = Nothing,
status = New,
rcvQueueAction = Nothing,
nextRcvQueue = next,
currRcvQueue = current,
dbNextRcvQueueId = Nothing,
clientNtfCreds = Nothing,
smpClientVersion = maxVersion vRange,
+4 -2
View File
@@ -61,8 +61,8 @@ data RcvQueue = RcvQueue
status :: QueueStatus,
-- | action to perform, to be done on connection subscription, if it fails and not reset
rcvQueueAction :: Maybe (RcvQueueAction, UTCTime),
-- | True if this is the queue the connection is switching to, rather than the current queue
nextRcvQueue :: Bool,
-- | True for the current receive queue
currRcvQueue :: Bool,
-- | database ID of the new queue created for this queue to switch to (queue rotation)
dbNextRcvQueueId :: Maybe Int64,
-- | credentials used in context of notifications
@@ -103,6 +103,8 @@ data SndQueue = SndQueue
status :: QueueStatus,
-- | action to perform, to be done on connection subscription, if it fails and not reset
sndQueueAction :: Maybe (SndQueueAction, UTCTime),
-- | True for the current send queue
currSndQueue :: Bool,
-- | database ID of the new queue created for this queue to switch to (queue rotation)
dbNextSndQueueId :: Maybe Int64,
-- | SMP client version
+13 -13
View File
@@ -394,14 +394,14 @@ getNextRcvQueue db = \case
[sql|
SELECT q.host, q.port, s.key_hash,
q.rcv_id, q.rcv_private_key, q.rcv_dh_secret, q.e2e_priv_key, q.e2e_dh_secret, q.snd_id, q.snd_key, q.status,
q.rcv_queue_action, q.rcv_queue_action_ts, q.next_rcv_queue, q.next_rcv_queue_id,
q.rcv_queue_action, q.rcv_queue_action_ts, q.curr_rcv_queue, q.next_rcv_queue_id,
q.ntf_public_key, q.ntf_private_key, q.ntf_id, q.rcv_ntf_dh_secret,
q.smp_client_version, q.created_at, q.updated_at
FROM rcv_queues q
INNER JOIN servers s ON q.host = s.host AND q.port = s.port
WHERE q.rcv_queue_id = ? AND q.next_rcv_queue = ?
WHERE q.rcv_queue_id = ? AND q.curr_rcv_queue = ?
|]
(rqId, True)
(rqId, False)
_ -> pure Nothing
getNextSndQueue :: DB.Connection -> Maybe Int64 -> IO (Maybe SndQueue)
@@ -1203,12 +1203,12 @@ type ServerRow = (NonEmpty TransportHost, String, C.KeyHash)
type NtfCredsRow = (Maybe SMP.NtfPublicVerifyKey, Maybe SMP.NtfPrivateSignKey, Maybe SMP.NotifierId, Maybe RcvNtfDhSecret)
toRcvQueue :: RcvQueueRow -> RcvQueue
toRcvQueue (srvRow :. (rcvId, rcvPrivateKey, rcvDhSecret, e2ePrivKey, e2eDhSecret, sndId, sndPublicKey, status) :. (rqAction_, rqActionTs_, nextRcvQueue, dbNextRcvQueueId) :. ntfCredsRow :. (smpClientVersion_, createdAt, updatedAt)) =
toRcvQueue (srvRow :. (rcvId, rcvPrivateKey, rcvDhSecret, e2ePrivKey, e2eDhSecret, sndId, sndPublicKey, status) :. (rqAction_, rqActionTs_, currRcvQueue, dbNextRcvQueueId) :. ntfCredsRow :. (smpClientVersion_, createdAt, updatedAt)) =
let server = toSMPServer srvRow
smpClientVersion = fromMaybe 1 smpClientVersion_
rcvQueueAction = (,) <$> rqAction_ <*> rqActionTs_
clientNtfCreds = toNtfCreds ntfCredsRow
in RcvQueue {server, rcvId, rcvPrivateKey, rcvDhSecret, e2ePrivKey, e2eDhSecret, sndId, sndPublicKey, status, rcvQueueAction, nextRcvQueue, dbNextRcvQueueId, smpClientVersion, clientNtfCreds, createdAt, updatedAt}
in RcvQueue {server, rcvId, rcvPrivateKey, rcvDhSecret, e2ePrivKey, e2eDhSecret, sndId, sndPublicKey, status, rcvQueueAction, currRcvQueue, dbNextRcvQueueId, smpClientVersion, clientNtfCreds, createdAt, updatedAt}
toSMPServer :: ServerRow -> SMPServer
toSMPServer (host, port, keyHash) = SMPServer host port keyHash
@@ -1225,14 +1225,14 @@ getRcvQueueByConnId_ dbConn connId =
[sql|
SELECT q.host, q.port, s.key_hash,
q.rcv_id, q.rcv_private_key, q.rcv_dh_secret, q.e2e_priv_key, q.e2e_dh_secret, q.snd_id, q.snd_key, q.status,
q.rcv_queue_action, q.rcv_queue_action_ts, q.next_rcv_queue, q.next_rcv_queue_id,
q.rcv_queue_action, q.rcv_queue_action_ts, q.curr_rcv_queue, q.next_rcv_queue_id,
q.ntf_public_key, q.ntf_private_key, q.ntf_id, q.rcv_ntf_dh_secret,
q.smp_client_version, q.created_at, q.updated_at
FROM rcv_queues q
INNER JOIN servers s ON q.host = s.host AND q.port = s.port
WHERE q.conn_id = ? AND q.next_rcv_queue = ?
WHERE q.conn_id = ? AND q.curr_rcv_queue = ?
|]
(connId, False)
(connId, True)
getSndQueueByConnId_ :: DB.Connection -> ConnId -> IO (Maybe SndQueue)
getSndQueueByConnId_ dbConn connId =
@@ -1242,18 +1242,18 @@ getSndQueueByConnId_ dbConn connId =
[sql|
SELECT q.host, q.port, s.key_hash,
q.snd_id, q.snd_public_key, q.snd_private_key, q.e2e_pub_key, q.e2e_dh_secret, q.status,
q.snd_queue_action, q.snd_queue_action_ts, q.next_snd_queue_id,
q.snd_queue_action, q.snd_queue_action_ts, q.curr_snd_queue, q.next_snd_queue_id,
q.smp_client_version, q.created_at, q.updated_at
FROM snd_queues q
INNER JOIN servers s ON q.host = s.host AND q.port = s.port
WHERE q.conn_id = ? AND q.next_snd_queue = ?
WHERE q.conn_id = ? AND q.curr_snd_queue = ?
|]
(connId, False)
(connId, True)
where
sndQueue (srvRow :. (sndId, sndPublicKey, sndPrivateKey, e2ePubKey, e2eDhSecret, status, sqAction_, sqActionTs_, dbNextSndQueueId) :. (smpClientVersion, createdAt, updatedAt)) =
sndQueue (srvRow :. (sndId, sndPublicKey, sndPrivateKey, e2ePubKey, e2eDhSecret, status, sqAction_, sqActionTs_, currSndQueue, dbNextSndQueueId) :. (smpClientVersion, createdAt, updatedAt)) =
let server = toSMPServer srvRow
sndQueueAction = (,) <$> sqAction_ <*> sqActionTs_
in SndQueue {server, sndId, sndPublicKey, sndPrivateKey, e2ePubKey, e2eDhSecret, status, sndQueueAction, dbNextSndQueueId, smpClientVersion, createdAt, updatedAt}
in SndQueue {server, sndId, sndPublicKey, sndPrivateKey, e2ePubKey, e2eDhSecret, status, sndQueueAction, currSndQueue, dbNextSndQueueId, smpClientVersion, createdAt, updatedAt}
-- * updateRcvIds helpers
@@ -14,8 +14,8 @@ ALTER TABLE rcv_queues ADD COLUMN rcv_queue_id INTEGER NULL;
ALTER TABLE rcv_queues ADD COLUMN rcv_queue_action TEXT NULL;
ALTER TABLE rcv_queues ADD COLUMN rcv_queue_action_ts TEXT NULL;
ALTER TABLE rcv_queues ADD COLUMN next_rcv_queue INTEGER DEFAULT 0 CHECK (next_rcv_queue NOT NULL);
UPDATE rcv_queues SET next_rcv_queue = 0;
ALTER TABLE rcv_queues ADD COLUMN curr_rcv_queue INTEGER DEFAULT 1 CHECK (curr_rcv_queue NOT NULL);
UPDATE rcv_queues SET curr_rcv_queue = 1;
ALTER TABLE rcv_queues ADD COLUMN next_rcv_queue_id INTEGER NULL;
-- REFERENCES rcv_queues (rcv_queue_id) ON DELETE SET NULL;
@@ -37,8 +37,8 @@ ALTER TABLE snd_queues ADD COLUMN snd_queue_id INTEGER NULL;
ALTER TABLE snd_queues ADD COLUMN snd_queue_action TEXT NULL;
ALTER TABLE snd_queues ADD COLUMN snd_queue_action_ts TEXT NULL;
ALTER TABLE snd_queues ADD COLUMN next_snd_queue INTEGER DEFAULT 0 CHECK (next_snd_queue NOT NULL);
UPDATE snd_queues SET next_snd_queue = 0;
ALTER TABLE snd_queues ADD COLUMN curr_snd_queue INTEGER DEFAULT 1 CHECK (curr_snd_queue NOT NULL);
UPDATE snd_queues SET curr_snd_queue = 1;
ALTER TABLE snd_queues ADD COLUMN next_snd_queue_id INTEGER NULL;
-- REFERENCES snd_queues (snd_queue_id) ON DELETE SET NULL;
@@ -44,7 +44,7 @@ CREATE TABLE rcv_queues(
rcv_queue_id INTEGER NULL,
rcv_queue_action TEXT NULL,
rcv_queue_action_ts TEXT NULL,
next_rcv_queue INTEGER DEFAULT 0 CHECK(next_rcv_queue NOT NULL),
curr_rcv_queue INTEGER DEFAULT 1 CHECK(curr_rcv_queue NOT NULL),
next_rcv_queue_id INTEGER NULL,
created_at TEXT CHECK(created_at NOT NULL),
updated_at TEXT CHECK(updated_at NOT NULL),
@@ -68,7 +68,7 @@ CREATE TABLE snd_queues(
snd_queue_id INTEGER NULL,
snd_queue_action TEXT NULL,
snd_queue_action_ts TEXT NULL,
next_snd_queue INTEGER DEFAULT 0 CHECK(next_snd_queue NOT NULL),
curr_snd_queue INTEGER DEFAULT 1 CHECK(curr_snd_queue NOT NULL),
next_snd_queue_id INTEGER NULL,
created_at TEXT CHECK(created_at NOT NULL),
updated_at TEXT CHECK(updated_at NOT NULL),
+4 -2
View File
@@ -166,7 +166,7 @@ rcvQueue1 =
sndId = "2345",
sndPublicKey = Nothing,
status = New,
nextRcvQueue = False,
currRcvQueue = True,
dbNextRcvQueueId = Nothing,
rcvQueueAction = Nothing,
clientNtfCreds = Nothing,
@@ -185,6 +185,7 @@ sndQueue1 =
e2ePubKey = Nothing,
e2eDhSecret = testDhSecret,
status = New,
currSndQueue = True,
dbNextSndQueueId = Nothing,
sndQueueAction = Nothing,
smpClientVersion = 1,
@@ -322,6 +323,7 @@ testUpgradeRcvConnToDuplex =
e2ePubKey = Nothing,
e2eDhSecret = testDhSecret,
status = New,
currSndQueue = True,
dbNextSndQueueId = Nothing,
sndQueueAction = Nothing,
smpClientVersion = 1,
@@ -350,7 +352,7 @@ testUpgradeSndConnToDuplex =
sndId = "4567",
sndPublicKey = Nothing,
status = New,
nextRcvQueue = False,
currRcvQueue = False,
dbNextRcvQueueId = Nothing,
rcvQueueAction = Nothing,
clientNtfCreds = Nothing,