Commit 9e728fa
committed
bugfixes
## Fix: backup validation, logging rotation, and DB consistency improvements
This PR completes updates to `backup.rs` and `logging.rs`, along with several fixes across the database layer.
---
### Summary of Changes
#### `db/posts.rs`
- **#13 – Constant-time comparison**
- Replaced custom `constant_time_eq` with `subtle::ConstantTimeEq`
- Use: `a.ct_eq(b).into()`
- Added import: `use subtle::ConstantTimeEq as _`
- Removed hand-rolled implementation
- **#16 – Poll vote race condition**
- Updated `cast_vote` query:
- JOINs `polls` table
- Adds expiry guard:
```sql
AND (p.expires_at IS NULL OR p.expires_at > unixepoch())
```
- Prevents race between handler validation and INSERT
- **#25 – `edit_window_secs` semantics**
- `0` → no time limit (skips check via `Option`)
- Negative → fallback to 300s
- Positive → used as-is
---
#### `handlers/admin/backup.rs`
- **#19 – SQLite validation**
- Added magic byte check (`b"SQLite format 3\0"`) after extracting `chan.db`
- Applied to:
- `admin_restore`
- `restore_saved_board_backup`
- Invalid DB now returns `400 Bad Request` before `rusqlite` usage
- **#30 – Duplicate encoding logic removed**
- Removed inner `encode_q` / `nibble` definitions
- Introduced single module-level `encode_q`
- Shared across:
- `admin_restore`
- `restore_saved_board_backup`
- `board_restore`
---
#### `db/logging.rs` (moved from `logging.rs`)
- **#33 – Log rotation**
- Replaced `rolling::never` with `rolling::daily`
- Logs now rotate automatically:
```
rustchan.log.YYYY-MM-DD
```
- **Location + API updates**
- Moved file to: `db/logging.rs`
- Renamed `log_dir` → `db_dir`
- Logs now stored alongside `chan.db`
- Updated documentation accordingly
---
### Required Follow-ups
- Update module declaration:
```rust
// db/mod.rs
pub mod logging;1 parent 586d378 commit 9e728fa
6 files changed
Lines changed: 178 additions & 96 deletions
File tree
- clippy_reports
- src
- db
- handlers/admin
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
36 | | - | |
37 | | - | |
38 | 27 | | |
39 | 28 | | |
40 | 29 | | |
| |||
Whitespace-only changes.
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
32 | 32 | | |
33 | 33 | | |
34 | 34 | | |
| 35 | + | |
35 | 36 | | |
36 | 37 | | |
37 | 38 | | |
| |||
351 | 352 | | |
352 | 353 | | |
353 | 354 | | |
354 | | - | |
355 | | - | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
356 | 365 | | |
357 | 366 | | |
358 | 367 | | |
| |||
376 | 385 | | |
377 | 386 | | |
378 | 387 | | |
379 | | - | |
380 | | - | |
381 | | - | |
382 | | - | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
383 | 393 | | |
384 | 394 | | |
385 | 395 | | |
| |||
413 | 423 | | |
414 | 424 | | |
415 | 425 | | |
416 | | - | |
417 | | - | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
418 | 430 | | |
| 431 | + | |
419 | 432 | | |
420 | 433 | | |
421 | 434 | | |
| |||
431 | 444 | | |
432 | 445 | | |
433 | 446 | | |
434 | | - | |
435 | | - | |
436 | | - | |
437 | | - | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
438 | 453 | | |
439 | | - | |
440 | | - | |
441 | | - | |
442 | | - | |
443 | | - | |
444 | | - | |
445 | | - | |
446 | | - | |
447 | | - | |
| 454 | + | |
448 | 455 | | |
449 | 456 | | |
450 | 457 | | |
| |||
686 | 693 | | |
687 | 694 | | |
688 | 695 | | |
689 | | - | |
| 696 | + | |
| 697 | + | |
| 698 | + | |
| 699 | + | |
| 700 | + | |
| 701 | + | |
| 702 | + | |
| 703 | + | |
690 | 704 | | |
691 | 705 | | |
| 706 | + | |
692 | 707 | | |
693 | 708 | | |
694 | 709 | | |
| |||
706 | 721 | | |
707 | 722 | | |
708 | 723 | | |
709 | | - | |
710 | | - | |
| 724 | + | |
| 725 | + | |
| 726 | + | |
| 727 | + | |
| 728 | + | |
711 | 729 | | |
712 | 730 | | |
713 | 731 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
30 | 30 | | |
31 | 31 | | |
32 | 32 | | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
33 | 83 | | |
34 | 84 | | |
35 | 85 | | |
| |||
397 | 447 | | |
398 | 448 | | |
399 | 449 | | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
400 | 479 | | |
401 | 480 | | |
402 | 481 | | |
| |||
1430 | 1509 | | |
1431 | 1510 | | |
1432 | 1511 | | |
| 1512 | + | |
| 1513 | + | |
| 1514 | + | |
| 1515 | + | |
| 1516 | + | |
| 1517 | + | |
| 1518 | + | |
| 1519 | + | |
| 1520 | + | |
| 1521 | + | |
| 1522 | + | |
| 1523 | + | |
| 1524 | + | |
| 1525 | + | |
| 1526 | + | |
| 1527 | + | |
| 1528 | + | |
| 1529 | + | |
| 1530 | + | |
| 1531 | + | |
| 1532 | + | |
| 1533 | + | |
| 1534 | + | |
| 1535 | + | |
1433 | 1536 | | |
1434 | 1537 | | |
1435 | 1538 | | |
| |||
1519 | 1622 | | |
1520 | 1623 | | |
1521 | 1624 | | |
1522 | | - | |
1523 | | - | |
1524 | | - | |
1525 | | - | |
1526 | | - | |
1527 | | - | |
1528 | | - | |
1529 | | - | |
1530 | | - | |
1531 | | - | |
1532 | | - | |
1533 | | - | |
1534 | | - | |
1535 | | - | |
1536 | | - | |
1537 | | - | |
1538 | | - | |
1539 | | - | |
1540 | 1625 | | |
1541 | 1626 | | |
1542 | 1627 | | |
| |||
2250 | 2335 | | |
2251 | 2336 | | |
2252 | 2337 | | |
2253 | | - | |
2254 | | - | |
2255 | | - | |
2256 | | - | |
2257 | | - | |
2258 | | - | |
2259 | | - | |
2260 | | - | |
2261 | | - | |
2262 | | - | |
2263 | | - | |
2264 | | - | |
2265 | | - | |
2266 | | - | |
2267 | | - | |
2268 | | - | |
2269 | | - | |
2270 | | - | |
2271 | | - | |
2272 | | - | |
2273 | | - | |
2274 | | - | |
2275 | | - | |
2276 | | - | |
2277 | | - | |
2278 | 2338 | | |
2279 | 2339 | | |
2280 | 2340 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
6 | | - | |
| 6 | + | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
9 | 14 | | |
10 | 15 | | |
11 | 16 | | |
12 | 17 | | |
13 | 18 | | |
14 | 19 | | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
19 | 32 | | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
24 | 45 | | |
25 | 46 | | |
26 | 47 | | |
27 | 48 | | |
28 | 49 | | |
29 | 50 | | |
30 | 51 | | |
31 | | - | |
32 | | - | |
33 | | - | |
| 52 | + | |
| 53 | + | |
34 | 54 | | |
35 | 55 | | |
36 | 56 | | |
| |||
0 commit comments