on master help sign in
Simplify server.knot: drop redundant checks, streamline error paths, remove unused helper
commit447fba9f3bf1853ea673f07770422439a6583971 authoriko <mail@iko.soy> dateMon 27 Apr 2026, 19:17 (5 months ago) parent7b1909b
1 file changed+16−22
server.knot+16−22
server.knot+16−22
@@ -155,7 +155,7 @@ impl ToJSON MessageStatus where
155155 MsDraining {} -> "draining")
156156
157157isValidBoundedHex : Int -> Text -> Bool
158−isValidBoundedHex = \maxLen s -> not (tooLong s maxLen) && isValidHex s && s == normalizeHex s
158+isValidBoundedHex = \maxLen s -> not (tooLong s maxLen) && isValidHex s
159159type PubkeyHex = Text where isValidBoundedHex maxPubkeyLen
160160type BlobHex = Text where isValidBoundedHex maxBlobLen
161161type SignatureHex = Text where isValidBoundedHex maxSignatureLen
@@ -565,9 +565,6 @@ isValidHex = \s ->
565565 let cs = chars s in
566566 count cs > 0 && mod (count cs) 2 == 0 && all cs (\c -> contains c "0123456789abcdef")
567567
568−normalizeHex : Text -> Text
569−normalizeHex = \s -> bytesToHex (bytesFromHex s)
570−
571568stripTrailingDot : Text -> Text
572569stripTrailingDot = \s -> if containsSuffix "." s then stripTrailingDot (take (count (chars s) - 1) s) else s
573570
@@ -606,9 +603,7 @@ matchIp = \clientIp sessionIp -> sessionIp == "" || clientIp == sessionIp
606603
607604extractToken = \authHeader ->
608605 let rest = drop 7 authHeader in
609− if hasPrefix "Bearer " authHeader && rest != "" && not (tooLong rest maxTokenLen)
610− then Just {value: rest}
611− else Nothing {}
606+ if hasPrefix "Bearer " authHeader && rest != "" then Just {value: rest} else Nothing {}
612607
613608verifyMaintenanceAuth : Text -> IO Bool
614609verifyMaintenanceAuth = \authorization -> do
@@ -688,17 +683,17 @@ verifyFederationAuth = \authorization fromServer scope requestTimestamp -> do
688683withFederationAuth = \authorization t respond fromServer scope requestTimestamp precondition action -> do
689684 blocked <- *blockedPeers
690685 allowed <- *allowedPeers
691− let err = \e retry -> respond {ok: False {}, error: e, retryAfterMs: retry}
692− if elem blocked fromServer then yield (err "blocked" 0)
693− else if count allowed > 0 && not (elem allowed fromServer) then yield (err "not_allowed" 0)
694− else if not precondition then yield (err "invalid_request" 0)
695− else if requestTimestamp > 0 && abs (requestTimestamp - t) > clockSkewTolerance then yield (err "clock_skew" 0)
686+ let err = \e -> yield (respond {ok: False {}, error: e, retryAfterMs: 0})
687+ if elem blocked fromServer then err "blocked"
688+ else if count allowed > 0 && not (elem allowed fromServer) then err "not_allowed"
689+ else if not precondition then err "invalid_request"
690+ else if requestTimestamp > 0 && abs (requestTimestamp - t) > clockSkewTolerance then err "clock_skew"
696691 else do
697692 verified <- verifyFederationAuth authorization fromServer scope requestTimestamp
698− if not verified then yield (err "unauthorized" 0)
693+ if not verified then err "unauthorized"
699694 else do
700695 limited <- checkServerRateGate fromServer t
701− if limited then yield (err "rate_limited" federationRateWindowMs)
696+ if limited then yield (respond {ok: False {}, error: "rate_limited", retryAfterMs: federationRateWindowMs})
702697 else action
703698
704699-- ============================================
@@ -775,10 +770,10 @@ recordFailure = \server -> do
775770 atomic do
776771 failures <- *forwardFailures
777772 let prev = case findFirst failures (\f -> f.server == server) of
778− Just {value: f} -> {count: f.failures, firstFailedAt: f.firstFailedAt}
779− _ -> {count: 0, firstFailedAt: t}
773+ Just {value: f} -> {count: f.failures + 1, firstFailedAt: f.firstFailedAt}
774+ _ -> {count: 1, firstFailedAt: t}
780775 set *forwardFailures = union (removeWhere failures (\f -> f.server == server))
781− [{server: server, failedAt: t, failures: min (prev.count + 1) 10, firstFailedAt: prev.firstFailedAt}]
776+ [{server: server, failedAt: t, failures: prev.count, firstFailedAt: prev.firstFailedAt}]
782777
783778clearFailure = \server -> atomic (pruneRef forwardFailures (\f -> f.server != server))
784779
@@ -887,12 +882,11 @@ applyCancel = \msgs matches to mid t -> do
887882
888883-- Cancel one message if `ownerPred` holds for it; returns whether a cancel happened.
889884cancelOne = \mid to ownerPred t -> atomic do
890− let matches = \x -> x.messageId == mid && x.toKey == to
891885 msgs <- *messages
892− if any msgs (\m -> matches m && ownerPred m) then do
893− _ <- applyCancel msgs matches to mid t
894− yield True
895− else yield False
886+ let matches = \x -> x.messageId == mid && x.toKey == to
887+ let owns = any msgs (\m -> matches m && ownerPred m)
888+ when owns (do _ <- applyCancel msgs matches to mid t; yield {})
889+ yield owns
896890
897891sendBatchedGossip = \peers events hops -> forEach peers id (\server -> do
898892 t <- now