| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
Using `tokio::task::block_in_place` downgrades the thread temporarily
to avoid starvation.
|
|
|
|
| |
Micropub types are now more coherent and gathered in one place.
|
|
|
|
|
|
|
|
| |
yes you can finally sign in
this is also supposed to show private posts intended for you!
maybe i can also reveal my email to those who sign in! :3
|
|
|
|
|
| |
Now the database objects can be uniformly created from a URI. They can
also optionally do sanity checks and one-time initialization.
|
|
|
|
| |
This makes the interface more consistent and resistant to misuse.
|
|
|
|
| |
Warning, untested. But hopefully works!
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Kittybox's source code is moved to a subfolder
- This improves build caching by Nix since it doesn't take changes
to other files into account
- Package and test definitions were spun into separate files
- This makes my flake.nix much easier to navigate
- This also makes it somewhat possible to use without flakes (but
it is still not easy, so use flakes!)
- Some attributes were moved in compliance with Nix 2.8's changes to
flake schema
|
| |
|
|
|
|
| |
Now I will know if something breaks horribly again.
|
|
|
|
|
|
|
|
|
| |
Templates and utility types are now separate crates to speed up
compilation, linting and potential reuse/replacement.
Potentially more crates could be split out/modularized, resulting in
speedups, smaller binaries (whenever features are excluded) and even
more reuse capabilities.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Reads don't lock anymore. At all.
- Writes create a temporary file and use `rename(2)` to atomically
replace it
- since OpenOptions::create_new(true) is used, tempfile creation is
atomic (and since tempfile names are per-post, a post can only be
edited by one request at a time)
- Since written files get atomically replaced, readers can't read a
corrupted file
Potential pitfalls:
1. This approach is not covered by unit tests (yet)
2. Stale tempfiles can prevent editing posts (can be solved by
throwing out tempfiles that are older than, say, a day)
3. Crashed edits can leave stale tempfiles (honestly that sounds
better than corrupting the whole database, doesn't sound like a bug to
me at all!)
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Warp allows requests to be applied as "filters", allowing to flexibly
split up logic and have it work in a functional style, similar to
pipes.
Tokio is just an alternative runtime. I thought that maybe switching
runtimes and refactoring the code might allow me to fish out that
pesky bug with the whole application hanging after a certain amount of
requests...
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Thanks to @Kloenk I was able to get rid of the unsafety and
tell the compiler how to properly check what I needed for
the StorageError to be declared thread-safe.
|
| |
|
| |
|
| |
|
|
|
|
|
|
| |
Now the Redis dependencies are optional and only required if you want
to test the backend or actually use it in production. The app displays
a hint if you try to launch with an unsupported backend.
|
|
|
|
|
|
|
|
|
|
|
| |
There was a bug where `File::write()` would not write the entire
buffer, and this condition was left unchecked by the code. All
`File::write()` calls are now replaced with `File::write_all()` which
ensures the whole buffer is written to the backing file.
Additionally added a smoke check for the file updates. It is in no way
comprehensive nor it is able to catch all the possible failures but
it's a good way of testing the functionality without way too much hassle.
|
|
|
|
|
|
|
| |
Currently unavailable for use and only has basic GET and POST operations
implemented. A lot more work is needed to make it truly usable.
Locking is implemented using flock() system call on Linux.
|
|
|
|
|
|
| |
for future reference: stream operations returning Result satisfy
conditions for the futures::stream::TryStreamExt trait, allowing you to
use `TryStreamExt::try_collect::<T>()` and receive a Result<T>.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
tests to use the Redis database instead of a fake one
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|