Commit Graph

47 Commits

Author SHA1 Message Date
MingxuanGame
40670c094b feat(auth): support trusted device (#52)
New API to maintain sessions and devices:

- GET /api/private/admin/sessions
- DELETE /api/private/admin/sessions/{session_id}
- GET /api/private/admin/trusted-devices
- DELETE /api/private/admin/trusted-devices/{device_id}

Auth:

web clients request `/oauth/token` and `/api/v2/session/verify` with `X-UUID` header to save the client as trusted device.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-03 11:26:43 +08:00
MingxuanGame
f31056ced3 perf(score): divide score processing into small parts and make them run in background
resolve #47
2025-10-02 14:30:57 +00:00
MingxuanGame
017b058e63 chore(linter): make linter happy 2025-09-30 07:57:08 +00:00
咕谷酱
4017f2af73 fix:修复音频代理缓存报错 2025-09-29 21:22:06 +08:00
咕谷酱
3a434ee02c 修复部分报错 2025-09-24 03:04:09 +08:00
咕谷酱
edbf01daa1 添加谱面查询缓存 2025-09-23 01:34:43 +08:00
MingxuanGame
1527e23b43 feat(session-verify): 添加 TOTP 支持 (#34)
* chore(deps): add pyotp

* feat(auth): implement TOTP verification

feat(auth): implement TOTP verification and email verification services

- Added TOTP keys management with a new database model `TotpKeys`.
- Introduced `EmailVerification` and `LoginSession` models for email verification.
- Created `verification_service` to handle email verification logic and TOTP processes.
- Updated user response models to include session verification methods.
- Implemented routes for TOTP creation, verification, and fallback to email verification.
- Enhanced login session management to support new location checks and verification methods.
- Added migration script to create `totp_keys` table in the database.

* feat(config): update config example

* docs(totp): complete creating TOTP flow

* refactor(totp): resolve review

* feat(api): forbid unverified request

* fix(totp): trace session by token id to avoid other sessions are forbidden

* chore(linter): make pyright happy

* fix(totp): only mark sessions with a specified token id
2025-09-21 19:50:11 +08:00
MingxuanGame
19f94fffbb feat(api): 支持 x-api-version (#29)
* feat(relationship): support legacy-compatible response format

* feat(score): add support for legacy score response format in API

* fix(score): avoid missing greenlet

* fix(score): fix missing field for model validation

* feat(user): apply legacy score format for user

* feat(api): use `int` to hint `APIVersion`
2025-09-14 14:09:53 +08:00
MingxuanGame
fdb08fe31f fix(rate-limit): apply on router to avoid TypeError on ws endpoint 2025-08-28 16:41:33 +00:00
MingxuanGame
598fcc8b38 refactor(project): make pyright & ruff happy 2025-08-22 08:21:52 +00:00
咕谷酱
ce465aa049 整理代码 2025-08-22 05:57:28 +08:00
咕谷酱
1fe603f416 add message redis 2025-08-22 01:49:03 +08:00
咕谷酱
822d7c6377 Add grade hot cache 2025-08-21 23:35:25 +08:00
MingxuanGame
068697355f feat(achievement): support obtain achievements 2025-08-21 08:50:16 +00:00
MingxuanGame
ce756c354b fix(statistics): run recalculate independently 2025-08-19 13:45:12 +00:00
MingxuanGame
1c65b21bb9 refactor(app): update database code 2025-08-18 16:37:30 +00:00
咕谷酱
041e2a0781 Add beatmapsets Download load balancing 2025-08-18 02:58:40 +08:00
MingxuanGame
86bea5d4b5 chore(lint): make ruff happy 2025-08-17 16:59:05 +00:00
咕谷酱
6e496a1123 add ip log 2025-08-18 00:23:57 +08:00
咕谷酱
de0c86f4a2 add geoip 2025-08-17 23:56:46 +08:00
MingxuanGame
caa4fe01af fix(request): incorrectly parse body for a form 2025-08-16 17:33:57 +00:00
MingxuanGame
87a3928e20 docs(chat): add API docs 2025-08-16 15:35:27 +00:00
MingxuanGame
f992e4cc71 feat(chat): support public channel chat 2025-08-16 05:29:16 +00:00
MingxuanGame
a8906b8194 feat(v1-api): support api v1 2025-08-14 09:11:53 +00:00
MingxuanGame
7817b7c59a feat(oauth): support client credentials grant 2025-08-13 14:12:29 +00:00
MingxuanGame
50b8d9a914 fix(database): extend pools (sentry-11) 2025-08-13 08:43:37 +00:00
MingxuanGame
39e7309d01 docs(api): more exactly 2025-08-12 16:17:50 +00:00
MingxuanGame
cf3a6bbd21 feat(storage): support cloud storage 2025-08-12 03:58:06 +00:00
MingxuanGame
867b99cca5 fix(database): fix cross-session user (current_user doesn't belong to get_db) 2025-08-11 14:01:37 +00:00
MingxuanGame
6e71141146 feat(developer): support custom OAuth 2.0 client 2025-08-11 12:33:31 +00:00
MingxuanGame
f165ae5dc3 refactor(config): use pydantic-settings 2025-08-10 05:38:28 +00:00
MingxuanGame
cf45070c2c refactor(database): use alembic to maintain the whole database 2025-08-10 04:33:03 +00:00
MingxuanGame
5fe3f36055 feat(daily-challenge): complete daily-challenge 2025-08-09 14:34:46 +00:00
MingxuanGame
8531e67423 feat(redis): add subscriber for pub/sub mode 2025-08-09 12:09:23 +00:00
MingxuanGame
832a6fc95d feat(daily-challenge): simple implement 2025-08-09 11:18:29 +00:00
MingxuanGame
c5fc6afc18 feat(redis): use asyncio 2025-07-31 14:38:10 +00:00
MingxuanGame
be401e8885 refactor(database): 优化数据库关联对象的载入 (#10) 2025-07-31 20:11:22 +08:00
MingxuanGame
9ce99398ab refactor(user): refactor user database
**Breaking Change**

用户表变为 lazer_users

建议删除与用户关联的表进行迁移
2025-07-30 16:17:09 +00:00
MingxuanGame
e1ce364ac9 feat(user): support search user 2025-07-28 14:18:43 +00:00
MingxuanGame
1be3388524 feat(log): add logger 2025-07-28 10:38:40 +00:00
MingxuanGame
b359be3637 feat(solo-score): support submit solo scores 2025-07-27 02:33:42 +00:00
MingxuanGame
8d6b5a882d feat(fetcher): add data fetcher for beatmap & beatmapset 2025-07-26 17:01:46 +08:00
MingxuanGame
cca4a2f1be feat(fetcher): add data fetcher 2025-07-26 16:06:53 +08:00
MingxuanGame
f347b680b2 refactor(database): use asyncio 2025-07-25 20:43:50 +08:00
MingxuanGame
c43ca883a5 refactor(database): migrate to sqlmodel 2025-07-24 20:49:07 +08:00
MingxuanGame
1655bb9f53 feat: 基础 SignalR 服务器支持 2025-07-24 18:45:08 +08:00
MingxuanGame
52a8bd2c76 re-structure code 2025-07-23 18:25:04 +08:00