Commit 05eec31
fix: drop passlib, hash with bcrypt directly (#595)
passlib 1.7.4 imports bcrypt.__about__ at module load to detect the
bcrypt version. That attribute was removed in bcrypt 4.x, so once
the dependabot bcrypt 5.0.0 bump lands, passlib raises AttributeError
on import and the backend fails its health check at startup.
passlib is effectively unmaintained (last release 2020). Rather than
work around the import, replace the CryptContext usage in
src/app/core/security.py with direct bcrypt calls — the API surface
we use is just hashpw/checkpw plus a salt.
To stay drop-in compatible with hashes generated by the previous
passlib-based code, hash_password / verify_password silently truncate
the password to 72 bytes (bcrypt's hard limit, which passlib used to
swallow) and verify_password catches the ValueError that bcrypt 5.x
now raises on malformed stored hashes, returning False instead — so a
corrupt DB row produces 401, not 500. Both behaviours are covered by
new regression tests in src/tests/test_security.py.
Co-authored-by: Mateo Lostanlen <mateo@pyronear.org>1 parent bf42eed commit 05eec31
4 files changed
Lines changed: 100 additions & 126 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
25 | | - | |
26 | | - | |
| 25 | + | |
27 | 26 | | |
28 | 27 | | |
29 | 28 | | |
| |||
49 | 48 | | |
50 | 49 | | |
51 | 50 | | |
52 | | - | |
53 | 51 | | |
54 | 52 | | |
55 | 53 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | | - | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
17 | | - | |
18 | | - | |
19 | 17 | | |
20 | 18 | | |
21 | 19 | | |
| |||
24 | 22 | | |
25 | 23 | | |
26 | 24 | | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
27 | 32 | | |
28 | | - | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
29 | 39 | | |
30 | 40 | | |
31 | 41 | | |
32 | | - | |
| 42 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
26 | 26 | | |
27 | 27 | | |
28 | 28 | | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
29 | 46 | | |
30 | 47 | | |
31 | 48 | | |
| |||
0 commit comments