Commit graph

65 commits

Author SHA1 Message Date
oxalica
ec7f428519 fix(webapi/register): fix shift overflow
This would make challenge always fail if difficulty is a multiple of 8.
2024-09-19 06:43:17 -04:00
oxalica
0c28c00c3d refactor(webapi)!: put all API under path /_blah 2024-09-19 05:12:42 -04:00
oxalica
82ab7f7d2c refactor(types): move UserIdentityDesc verification into types crate 2024-09-19 02:37:03 -04:00
oxalica
fac380fe55 refactor(types,register): introduce IdUrl and related types into submod
- `IdUrl` does basic validation for identity URL. Server could enforce
  additional restrictions on their own need.

- single-label doamins are now rejected by default.

- More tests are added for `IdUrl` validation.
2024-09-19 01:44:09 -04:00
oxalica
7b0ca8aa16 test,ci: validate version of sqlite and fix ci 2024-09-17 23:08:30 -04:00
oxalica
4108212f34 bench: bench register-pow for difficulty reference 2024-09-17 22:35:09 -04:00
oxalica
3af64f35a5 fix(register): fix CORS, nonce update and error reporting 2024-09-17 21:44:36 -04:00
oxalica
cb72d049e0 feat(types,webapi): impl id_key/act_key for all APIs and update docs 2024-09-17 21:44:36 -04:00
oxalica
fb76756482 feat(webapi): impl user registration and identity description format 2024-09-16 10:45:40 -04:00
oxalica
7f74d73c8c remove(webapi)!: remove auto user creation on joining or creating room
User must be explicitly created forehand using the registration API
(coming soon).
2024-09-16 06:41:26 -04:00
oxalica
985ea1d68a remove(types)!: remove members from CreateGroup
Now a group can only be created with the creator as the only initial
member. This forbids group creator from adding other members without
their consent. Additional members can join the group later at their own
will.
2024-09-16 06:39:10 -04:00
oxalica
93d779b615 feat(webapi): log backtrace on database errors 2024-09-16 06:13:14 -04:00
oxalica
2775068e49 refactor(config): split into subsections and verify on parsing 2024-09-13 07:20:48 -04:00
oxalica
93d1589730 refactor(types): WithSig -> Signed 2024-09-13 03:32:11 -04:00
oxalica
73eb441a26 refactor(*): use term msg to replace item
- `Msg` or `msg` is now the canonical term for the substructure in a
  room. It includes a `chat` subtype and (in the future) other
  administration subtypes like member joining or leaving.

- `Message` or `message` can used in human oriented context like docs
  and comments, but only when it is unambiguous.

- `message` is not chosen in code because it's hard to type (at least
  for me!), and have ambiguous meaning of:
  - "Human readable text" in context of `ApiError`'s field.
  - "A unit of data transfer, datagram" in context of WebSocket Message.

- `item` is not chosen because it is overly generic.
2024-09-13 03:32:11 -04:00
oxalica
98b2df2fdf feat(blahd): impl socket activation integration
This also allows arbitrary listening fd include UNIX domain sockets, via
environment variables as sd_listen_fds(3).
2024-09-11 13:17:52 -04:00
oxalica
348fdc2498 fix(config): set default value of database.in_memory 2024-09-10 16:34:50 -04:00
oxalica
ab4812e101 fix: deny room_admin on peer chat room 2024-09-10 12:46:47 -04:00
oxalica
1e944ead31 feat: impl basic peer chat 2024-09-10 12:26:37 -04:00
oxalica
4f48b390f7 feat(webapi): include member_permission in RoomMetadata
This is currently only included by `room_list` endpoint with
authentication.
2024-09-10 09:33:59 -04:00
oxalica
5eeb12c294 test(webapi): test last seen item 2024-09-10 09:20:32 -04:00
oxalica
74c6fa6f6a refactor(webapi): hoist RoomMetadata to blah_types and rename last_chat to last_item 2024-09-10 09:19:15 -04:00
oxalica
c0ec429c24 test(webapi): test room item posting and listing 2024-09-10 08:19:44 -04:00
oxalica
1a0347337c feat(webapi): differentiate no-room-permission from not-a-member error
- If a user is not a room member, HTTP 404 code=not_found will be
  returned. This also happen for posting into not-joined public rooms,
  and it can be interpreted as "room member is not found".

- If a user is a member but lacks the member permission to perform an
  action, HTTP 403 code=permission_denied will be returned.
2024-09-10 08:19:44 -04:00
oxalica
35b5aace08 refactor(tests): simplify and rename 2024-09-10 08:19:44 -04:00
oxalica
199985c6a2 build(toolchain),ci: switch to rust 1.82-beta for now
`precise_capturing` has no workaround but we need it in tests. The main
crate should still compile under stable rustc, which is enforced by CI.
2024-09-10 06:56:08 -04:00
oxalica
7160e5adbd refactor: reorganize docs and aux files 2024-09-10 03:59:31 -04:00
oxalica
0ac841e6fa refactor: move types crate into blahd-types subpackage 2024-09-10 03:47:41 -04:00
oxalica
0a0a4aefa9 doc: document WebSocket API 2024-09-10 03:33:21 -04:00
oxalica
8bca2ebddc doc: update and fix errors 2024-09-10 03:18:52 -04:00
oxalica
3bb6d1456d Enforce lint reasons 2024-09-10 01:29:21 -04:00
oxalica
61850aa1ed Make mock rng a fixture to allow dyn Rng 2024-09-10 01:29:21 -04:00
oxalica
e40ec6a324 Add tests for room join/leave and fix response status code 2024-09-10 01:29:21 -04:00
oxalica
5cd45232f4 Enable more local logging and disable dependencies' 2024-09-10 01:29:21 -04:00
oxalica
ff5b7e60a7 Add tests for room create/read and fix incorrect foreign keys 2024-09-10 01:29:21 -04:00
oxalica
c5263c607c Split out socket config and switch back to toml crate
basic-toml does not support externally-tagged enum yet.

See: https://github.com/dtolnay/basic-toml/issues/8
2024-09-10 01:29:21 -04:00
oxalica
4f0f1405dc Librarify blahd for testing 2024-09-10 01:29:21 -04:00
Shibo Lyu
a92f661003 doc: pin @stoplight/elements version & add sub-resource integrity 2024-09-09 11:26:59 +08:00
Shibo Lyu
8f0311c0d8 doc: openapi doc 2024-09-08 23:09:44 +08:00
oxalica
67ea6aaacc Impl untilToken for item_list to avoid over-fetching seen items 2024-09-06 04:01:06 -04:00
oxalica
8b096ba802 Impl room listing with filter=unseen 2024-09-06 04:00:08 -04:00
oxalica
e74da2812b Maintain room member's last seen item and fix docs 2024-09-06 03:33:21 -04:00
oxalica
51e2c8418b Include cid in item responses and update docs 2024-09-06 02:27:53 -04:00
oxalica
a7f260027d Use simplified Snowflake ID generation
This prevents leaking server information to client with little effort.
2024-09-06 02:06:44 -04:00
oxalica
59d51937da Switch room identifier from UUID to stringified i64 2024-09-06 02:06:14 -04:00
oxalica
236fb61832 Fix missed JSON error response and simplify 2024-09-06 02:05:32 -04:00
oxalica
d3c3961298 Use proper rejection type for Auth middleware 2024-09-06 02:05:32 -04:00
oxalica
99d1311d63 Avoid unnecessary unwrap 2024-09-06 02:05:32 -04:00
oxalica
81a566a097 Move database logic into submodule and do simple version check 2024-09-06 02:05:27 -04:00
oxalica
a37bc3f81e Return the latest message in room list for display 2024-09-03 15:09:54 -04:00