@@ -720,29 +720,29 @@ handleChallenge : PubkeyHex -> Text -> IO {rw *authGlobalRateCount, rw *authGlob
720handleChallenge = \pubkey clientIp -> do
720handleChallenge = \pubkey clientIp -> do
722 preErr <- authPreCheck clientIp t
722 preErr <- authPreCheck clientIp t
723− if preErr != ""
723+ if preErr == ""
724− then yield (Err {error: {status: 429, message: preErr}})
724+ then do
726 challenge <- genToken
725 challenge <- genToken
727 result <- atomic (do
726 result <- atomic (do
728 ch <- *challenges
727 ch <- *challenges
729 let cappedActive = capPerKey (filter (\c -> c.expiresAt > t) ch) pubkey maxChallengesPerKey
728 let cappedActive = capPerKey (filter (\c -> c.expiresAt > t) ch) pubkey maxChallengesPerKey
730− if count cappedActive >= maxChallenges
729+ if not (count cappedActive >= maxChallenges)
731− then yield "capacity"
730+ then do
733 chRates <- *challengeRates
731 chRates <- *challengeRates
734 let chR = checkRate chRates pubkey maxChallengeRatePerKey challengeRateWindowMs t
732 let chR = checkRate chRates pubkey maxChallengeRatePerKey challengeRateWindowMs t
735 *challengeRates = chR.entries
733 *challengeRates = chR.entries
736− if chR.limited
734+ if not chR.limited
737− then yield "rate_limited"
735+ then do
739 *challenges = union cappedActive [
736 *challenges = union cappedActive [
740 {pubkey, challenge, expiresAt: t + challengeExpiry, ip: clientIp}
737 {pubkey, challenge, expiresAt: t + challengeExpiry, ip: clientIp}
742− yield "")
739+ yield ""
740+ else yield "rate_limited"
741+ else yield "capacity")
743 if result == ""
742 if result == ""
744 then yield (Ok {value: {challenge, expiresAt: t + challengeExpiry}})
743 then yield (Ok {value: {challenge, expiresAt: t + challengeExpiry}})
745 else yield (Err {error: {status: if result == "capacity" then 503 else 429, message: result}})
744 else yield (Err {error: {status: if result == "capacity" then 503 else 429, message: result}})
745+ else yield (Err {error: {status: 429, message: preErr}})
747-- POST /auth/verify: validate `signature` over `challenge` for `pubkey`.
747-- POST /auth/verify: validate `signature` over `challenge` for `pubkey`.
748-- On success, mints a session token, records local presence (`pubkey` is now
748-- On success, mints a session token, records local presence (`pubkey` is now