aboutsummaryrefslogtreecommitdiff
path: root/lib/Server/Ingest.hs
diff options
context:
space:
mode:
authorstuebinm2026-05-13 00:05:37 +0200
committerstuebinm2026-05-13 00:05:37 +0200
commitdbb5c4b6b882cd99981eb854386586854a23fdec (patch)
tree7cf698de3ceae355e9f040a6563b1139be029b99 /lib/Server/Ingest.hs
parentd668e36403c293c86f761e4ac9f902cda73f4a7d (diff)
Server.Frontend.Tracker: dedicated configuration menuHEADmain
There is no back-channel with which we could retrieve the config that is currently on an owntracks client. However, we can send out each config with its own slightly tweaked host url, so that we can detect its provisioning on the incoming requests anyways. Credits for the idea go to Emily.
Diffstat (limited to '')
-rw-r--r--lib/Server/Ingest.hs16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/Server/Ingest.hs b/lib/Server/Ingest.hs
index c598ac2..ec99e60 100644
--- a/lib/Server/Ingest.hs
+++ b/lib/Server/Ingest.hs
@@ -75,7 +75,7 @@ handleTrackerRegister dbpool RegisterJson{..} = do
today <- liftIO getCurrentTime <&> utctDay
expires <- liftIO $ getCurrentTime <&> addUTCTime validityPeriod
runSql dbpool $ do
- TrackerKey tracker <- insert (Tracker "dummy" {-expires-} False registerAgent Nothing)
+ TrackerKey tracker <- insert (Tracker "dummy" {-expires-} False registerAgent Nothing Nothing)
pure (coerce tracker)
where
validityPeriod :: NominalDiffTime
@@ -126,9 +126,10 @@ handleOwntracksMessage
-> ServerConfig
-> Maybe Text
-> Maybe Text
+ -> Maybe Int
-> Message
-> LoggingT (ReaderT LoggingConfig Handler) [Command]
-handleOwntracksMessage dbpool subscribers cfg maybeUser device msg = do
+handleOwntracksMessage dbpool subscribers cfg maybeUser device maybeVersion msg = do
user <- case maybeUser of
Just user -> pure user
Nothing -> throwError err401
@@ -145,6 +146,17 @@ handleOwntracksMessage dbpool subscribers cfg maybeUser device msg = do
Just tracker -> pure tracker
Nothing -> throw err401
+ whenJust maybeVersion \version -> do
+ whenJust trackerConfigVersion \tversion -> do
+ when (tversion > version) $ logWarnN $ "Tracker "+|trackerName|+" sent message tagged with older config "+|version|+" after we've seen it using config "+|tversion|+"."
+ runSql dbpool $ do
+ when (tversion < version) $ E.update \t -> do
+ set t [TrackerConfigVersion E.=. val (Just version)]
+ where_ (t ^. TrackerId E.==. val trackerId)
+ E.update \c -> do
+ set c [TrackerConfigSeen E.=. val True]
+ where_ (c ^. TrackerConfigTracker E.==. val trackerId)
+
case msg of
MsgStatus status -> do
now <- liftIO getCurrentTime