Greg Heartsfield
6800c2e39d
improvement: add NostrRepo trait, with sqlite implementation
...
This is inspired by the work of
v0l (https://github.com/v0l/nostr-rs-relay/ ).
A new trait abstracts the storage layer with an async API. Rusqlite
is still used with worker threads, but this allows for Postgresql or
other backends to be used.
There may be bugs, this has not been rigorously tested.
2023-01-22 09:49:49 -06:00
Greg Heartsfield
585fdd3884
fix: use data_dir from config.toml if present
...
fixes: https://todo.sr.ht/~gheartsfield/nostr-rs-relay/64
2023-01-16 17:21:12 -06:00
Greg Heartsfield
0db6487ce3
fix: allow tokio tracing to be enabled
...
fixes https://github.com/scsibug/nostr-rs-relay/issues/48
2023-01-14 09:47:23 -06:00
Rasmus Schlunsen
73f4f60cc7
improvement: use clap for command line args
2023-01-14 09:22:11 -06:00
JesterHodl
0e519f6b77
feat: add --help and --version flags
...
fixes: https://github.com/scsibug/nostr-rs-relay/issues/42
2023-01-03 17:39:21 -06:00
Greg Heartsfield
8ecce3f566
feat: show client IP in logs
2022-11-02 18:33:44 -05:00
Greg Heartsfield
6633f8b472
feat: replace logging with tracing
2022-09-28 07:19:59 -05:00
Greg Heartsfield
93dfed0a87
refactor: misc clippy suggestions
2022-09-24 19:28:02 -05:00
Greg Heartsfield
ccf9b8d47b
refactor: remove unnecessary return types
2022-09-24 08:39:41 -05:00
Greg Heartsfield
8fa58de49a
refactor: clippy suggestions
2022-09-24 08:30:22 -05:00
Greg Heartsfield
4fa8616c73
feat: enable use of tokio-console with diagnostics.tracing setting
...
View real-time tokio diagnostics by setting the configuration option
"diagnostics.tracing" to true.
2022-09-11 12:44:45 -05:00
Greg Heartsfield
2b03f11e5e
refactor: remove global/singleton settings object
2022-09-06 06:12:07 -05:00
Greg Heartsfield
8774416b92
refactor: move nostr server into library
2022-09-06 05:56:04 -05:00
Greg Heartsfield
1b9f364e15
chore: rustfmt
2022-09-02 12:38:31 -05:00
Greg Heartsfield
a754477a02
improvement: misc refactorings (clippy)
2022-09-02 12:26:00 -05:00
slaninas
77892b2064
fix: syntax error
2022-08-22 05:12:52 -07:00
Greg Heartsfield
4fe6191aa3
chore: formatting
2022-08-21 09:51:34 -07:00
Greg Heartsfield
79a982e3ef
improvement: send NOTICE for too-large messages
2022-08-21 09:28:31 -07:00
Greg Heartsfield
035cf34673
fix(NIP-12): correctly search for mixed-case hex-like tags
...
Only lowercase and even-length tag values are stored as binary BLOBs.
Previously there was an error which search results from being returned
if the tag value was mixed-case and could be interpreted as hex.
A new database migration has been created to repair the `tag` table
for existing relays.
fixes: https://todo.sr.ht/~gheartsfield/nostr-rs-relay/37
2022-08-17 16:34:11 -07:00
Greg Heartsfield
0a3b15f41f
fix(NIP-11): Add CORS header and content type for main page
2022-08-11 19:33:17 -07:00
Semisol
a36ad378f6
feat(NIP-15): Implement NIP15
...
NIP15 sends an EOSE notice to clients after all stored events are sent
to allow loading indicators and other use cases.
2022-05-30 21:43:00 -05:00
Greg Heartsfield
ed3a6b9692
refactor: simplify NOTICE messages
2022-02-26 17:34:58 -06:00
Greg Heartsfield
53990672ae
improvement: move db pool operations closer to query, do not panic on failure
2022-02-23 16:38:16 -06:00
Greg Heartsfield
2f63417646
improvement: better logging for connection resets
2022-02-21 08:57:07 -06:00
Greg Heartsfield
3b25160852
fix: abort on connection IO errors
2022-02-21 08:50:46 -06:00
Greg Heartsfield
f8b1fe5035
docs: line up comments with code
2022-02-17 16:18:05 -06:00
Greg Heartsfield
5913b9f87a
feat: send notices when authorization checks fail
2022-02-13 09:35:54 -06:00
Greg Heartsfield
77f35f9f43
feat: server-side pings and disconnects
2022-02-12 16:57:26 -06:00
Greg Heartsfield
9e06cc9482
improvement: better error messages on parse failures
2022-02-12 16:33:29 -06:00
Greg Heartsfield
e66fa4ac42
refactor: remove unnecessary Option wrapping
2022-02-12 16:29:27 -06:00
Greg Heartsfield
99e117f620
improvement: better handling of out-of-protocol messages
2022-02-12 16:26:55 -06:00
Greg Heartsfield
8250e00f05
fix: remove protostream module, and missing NOTICE
2022-02-12 16:22:12 -06:00
Greg Heartsfield
ceaa01e8b4
fix: removed manual nostr stream, so websocket pings work
2022-02-12 16:19:10 -06:00
Greg Heartsfield
234a8ba0ac
feat: limit event publishing to NIP-05 verified users
...
This adds a new configurable feature to restrict event publishing to
only users with NIP-05 verified metadata. Domains can be whitelisted
or blacklisted. Verification expiration and schedules are
configurable.
This upgrades the database to add a table for tracking verification
records.
2022-02-12 09:29:25 -06:00
Greg Heartsfield
4cc313fa2d
fix: cleanup database connections with same name
...
When a large number of subscriptions is created with identical names,
we do not send a signal over the abandon-read channel. This
eventually leads to resource exhaustion.
2022-01-30 15:14:02 -06:00
Greg Heartsfield
98c6fa6f39
feat: allow whitelisting of pubkeys for new events
...
This adds a configuration option, `authorization.pubkey_whitelist`
which is an array of pubkeys that are allowed to publish events on
this relay.
2022-01-26 21:39:03 -06:00
Greg Heartsfield
f1206e76f2
feat: database reader connection pooling
...
Added connection pooling for queries, as well as basic configuration
options for min/max connections.
2022-01-25 20:39:24 -06:00
Greg Heartsfield
da7968efef
fix: restore working websocket message size configuration options
2022-01-05 17:41:12 -05:00
Greg Heartsfield
19ed990c57
refactor: fix clippy errors for relay info response
2022-01-05 10:10:44 -05:00
Greg Heartsfield
2924da88bc
feat: incorporated improvements from NIP-11 discussion
...
Change descr to description. Add `id` for websocket URL. Use
integers for supported NIPs instead of strings. Top-level is object,
instead of the array before.
2022-01-03 22:03:30 -05:00
Greg Heartsfield
d3da4eb009
feat: implementation of proposed NIP-11 (server metadata)
2022-01-03 18:42:24 -05:00
Greg Heartsfield
1aa5a5458d
improvement: event signature validation is 100x faster
...
Switched to latest (git) release of secp256k1, which has more
efficient verification-only context for Schnorr. Switched to single
pre-instantiated instance of the verifier.
2022-01-01 09:08:19 -06:00
Greg Heartsfield
620e227699
fix: connection issues with Firefox
...
This adds Hyper, and a 200 response code. Prior to this, Firefox
would fail to connect. There is also a text document displayed at the
root URL to indicate this is a Nostr relay.
Fixes https://todo.sr.ht/~gheartsfield/nostr-rs-relay/15
2022-01-01 08:11:20 -06:00
Greg Heartsfield
4171a8870e
feat: reject events that are too large
...
A new configuration setting controls the maximum size of event
messages, and sends a notice to the client if they exceed it.
Fixes https://todo.sr.ht/~gheartsfield/nostr-rs-relay/14
2021-12-31 15:19:35 -06:00
Greg Heartsfield
415d32299b
fix: docker run references the correct database file
2021-12-31 14:05:11 -06:00
Greg Heartsfield
5a19a8876f
feat: allow database directory configuration
...
Adds configuration options for database directory, either on command
line through (--db dir-name) or the config.toml file.
Fixes: https://todo.sr.ht/~gheartsfield/nostr-rs-relay/13
2021-12-31 11:51:57 -06:00
Greg Heartsfield
20ee5a054c
feat: rate limit event creation
...
A configuration option, `messages_per_sec`, imposes a global limit on
the rate for which new events can be stored.
Fixes https://todo.sr.ht/~gheartsfield/nostr-rs-relay/6
2021-12-30 21:07:21 -06:00
Greg Heartsfield
f415295184
feat: reject future-dated events
...
If configured, reject events than are more than N seconds in the
future.
Fixes https://todo.sr.ht/~gheartsfield/nostr-rs-relay/5
2021-12-29 22:47:31 -06:00
Greg Heartsfield
d730bf0c59
feat: add configuration through file
...
A file named `config.toml` can now be used to load the address, port,
and some websocket configuration settings.
Fixes https://todo.sr.ht/~gheartsfield/nostr-rs-relay/3
2021-12-29 22:13:02 -06:00
Greg Heartsfield
55bb6bd440
feat: add resource limits for websocket messages
2021-12-19 16:26:32 -06:00