on master help sign in
Simplify server.knot: remove hexDigit helper, drop redundant checks, inline single-use lets
a44800diko
server.knot+8−11
@@ -540,13 +540,10 @@ mapEach = \items getKey action -> case headOf items of
540 yield (union [r] rest)
540 yield (union [r] rest)
541
541
542-- Hex tokens: one random hex char per recursive call.
542-- Hex tokens: one random hex char per recursive call.
543−hexDigit : Int -> Text
544−hexDigit = \n -> take 1 (drop n "0123456789abcdef")
545−
546genTokenN = \n -> if n <= 0 then yield "" else do
543genTokenN = \n -> if n <= 0 then yield "" else do
547 d <- randomInt 16
544 d <- randomInt 16
548 rest <- genTokenN (n - 1)
545 rest <- genTokenN (n - 1)
549− yield (hexDigit d ++ rest)
546+ yield (take 1 (drop d "0123456789abcdef") ++ rest)
550
547
551genToken = genTokenN 48
548genToken = genTokenN 48
552
549
@@ -1034,9 +1031,10 @@ handleVerifyAuth = \pubkey challenge signature revokeOthers clientIp respond ->
1034 else do
1031 else do
1035 set *challenges = removeWhere ch (\c -> c.pubkey == pubkey && c.challenge == challenge)
1032 set *challenges = removeWhere ch (\c -> c.pubkey == pubkey && c.challenge == challenge)
1036 ses <- *sessions
1033 ses <- *sessions
1034+ let cleaned = if revokeOthers
1037− let kept = if revokeOthers then removeWhere ses (\s -> s.pubkey == pubkey) else ses
1035+ then removeWhere ses (\s -> s.pubkey == pubkey)
1038− let afterPerKey = capPerKey kept (\s -> s.pubkey == pubkey) maxSessionsPerKey (\s -> s.expiresAt)
1036+ else capPerKey ses (\s -> s.pubkey == pubkey) maxSessionsPerKey (\s -> s.expiresAt)
1039− set *sessions = capList (union afterPerKey [{token: token, pubkey: pubkey, expiresAt: expiry, ip: clientIp, createdAt: t}]) maxSessions (\s -> s.expiresAt)
1037+ set *sessions = capList (union cleaned [{token: token, pubkey: pubkey, expiresAt: expiry, ip: clientIp, createdAt: t}]) maxSessions (\s -> s.expiresAt)
1040 pres <- *presence
1038 pres <- *presence
1041 let newPres = capList (union (removeWhere pres (\p -> p.pubkey == pubkey && isLocalServer p.server)) [{pubkey: pubkey, server: serverHostN, expiresAt: expiry, timestamp: t}]) maxPresenceEntries (\p -> p.expiresAt)
1039 let newPres = capList (union (removeWhere pres (\p -> p.pubkey == pubkey && isLocalServer p.server)) [{pubkey: pubkey, server: serverHostN, expiresAt: expiry, timestamp: t}]) maxPresenceEntries (\p -> p.expiresAt)
1042 set *presence = newPres
1040 set *presence = newPres
@@ -1348,7 +1346,7 @@ handleCancelMessage = \messageId to authorization clientIp respond -> do
1348 case findFirst msgs matches of
1346 case findFirst msgs matches of
1349 Nothing {} -> yield {cancelled: False {}, cancelServers: []}
1347 Nothing {} -> yield {cancelled: False {}, cancelServers: []}
1350 Just {value: msg} ->
1348 Just {value: msg} ->
1351− if msg.originServer != "" || msg.senderKey != senderKey || msg.senderKey == ""
1349+ if msg.originServer != "" || msg.senderKey != senderKey
1352 then yield {cancelled: False {}, cancelServers: []}
1350 then yield {cancelled: False {}, cancelServers: []}
1353 else do
1351 else do
1354 fwdServers <- applyCancel msgs matches to messageId t
1352 fwdServers <- applyCancel msgs matches to messageId t
@@ -1367,8 +1365,7 @@ sendCancelToEach = \messageId to servers ->
1367 messageId: messageId, toKey: to, fromServer: serverHostN,
1365 messageId: messageId, toKey: to, fromServer: serverHostN,
1368 requestTimestamp: t, correlationId: "", authorization: auth,
1366 requestTimestamp: t, correlationId: "", authorization: auth,
1369 protocolVersion: federationProtocolVersion})
1367 protocolVersion: federationProtocolVersion})
1370− let failed = case result of Err _ -> True {}; Ok r -> not r.ok
1368+ when (case result of Err _ -> True {}; Ok r -> not r.ok) (atomic
1371− when failed (atomic
1372 (appendCapped pendingFederationCancels [{messageId: messageId, toKey: to, toServer: server, createdAt: t, retries: 0}] 10000 (\c -> c.createdAt))))
1369 (appendCapped pendingFederationCancels [{messageId: messageId, toKey: to, toServer: server, createdAt: t, retries: 0}] 10000 (\c -> c.createdAt))))
1373
1370
1374handleCancelBatch = \cancels authorization clientIp respond -> do
1371handleCancelBatch = \cancels authorization clientIp respond -> do
@@ -1383,7 +1380,7 @@ handleCancelBatch = \cancels authorization clientIp respond -> do
1383 case findFirst msgs matches of
1380 case findFirst msgs matches of
1384 Nothing {} -> yield False
1381 Nothing {} -> yield False
1385 Just {value: msg} ->
1382 Just {value: msg} ->
1386− if msg.originServer != "" || msg.senderKey != senderKey || msg.senderKey == ""
1383+ if msg.originServer != "" || msg.senderKey != senderKey
1387 then yield False
1384 then yield False
1388 else do
1385 else do
1389 _ <- applyCancel msgs matches e.to e.messageId t
1386 _ <- applyCancel msgs matches e.to e.messageId t