You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Since CouchDB v3.4.0, there has been a new "Lockout" feature, i.e., a rate limit on tuples (IP, login) after multiple authentication failures.
It's highlighted in the release note: https://docs.couchdb.org/en/stable/whatsnew/3.4.html#id4 (see the second to last bullet point).
As the following upstream discussion shows, this adds a new case of HTTP 403 possible on all routes: apache/couchdb#5315 (comment)
I was going to add the case in aiocouch, in remote.py, to return clean aiocouch Python exceptions on these 403, but I noticed that there are already a few 403 caught and raise for other cases inside remote.py.
I wanted your idea on the best way to add the new HTTP 403 lockout case on all the routes before making a PR.
Given the situation, I think a good way forward is to use the decorator like this @raises(403, "Access forbidden: {reason}")
and add reason to message_input here, which should be parseable from the ClientResponseError.message.
H--o-l
added a commit
to H--o-l/aiocouch
that referenced
this issue
Oct 29, 2024
Since CouchDB v3.4.0, there has been a new "Lockout" feature, i.e., a rate limit
on tuples (IP, login) after multiple authentication failures. It's highlighted
in the release note: https://docs.couchdb.org/en/stable/whatsnew/3.4.html#id4
(see the second to last bullet point).
As the following upstream discussion shows, this CouchDB feature adds a new case
of HTTP 403 possible on all routes:
apache/couchdb#5315 (comment)
This commit catches the 403 on all routes. As some routes were already catching
403 for other reasons, the exception message on these routes is changed from
their previous message to `"Access forbidden: {reason}"` where `reason` is
either the `reason` returned by CouchDB in the JSON body of the answer, or if
it doesn't exist, by the `message` of aiohttp ClientResponseError.
I manually tested a non-stream route with `await couchdb.info()`, it returns the
following:
```
> await couchdb.info()
...
aiocouch.exception.UnauthorizedError: Invalid credentials
> await couchdb.info() # <=== Lockout
...
aiocouch.exception.ForbiddenError: Access forbidden: Account is temporarily
locked due to multiple authentication failures
```
Closesmetricq#55
Hey!
Since CouchDB v3.4.0, there has been a new "Lockout" feature, i.e., a rate limit on tuples (IP, login) after multiple authentication failures.
It's highlighted in the release note: https://docs.couchdb.org/en/stable/whatsnew/3.4.html#id4 (see the second to last bullet point).
As the following upstream discussion shows, this adds a new case of HTTP 403 possible on all routes: apache/couchdb#5315 (comment)
I was going to add the case in aiocouch, in remote.py, to return clean aiocouch Python exceptions on these 403, but I noticed that there are already a few 403 caught and raise for other cases inside remote.py.
I wanted your idea on the best way to add the new HTTP 403 lockout case on all the routes before making a PR.
For info, CouchDB return looks like this:
The text was updated successfully, but these errors were encountered: