| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
| |
I said some boastful words about Kittybox being able to horizontally
scale and I wanted to prove them. This is the proof.
This test creates an NFS file server, then spawns three
VMs. Provisioning a website on one of them, it then queries the
website on all of the three machines. This shows that a shared backing
store can make Kittybox infinitely scale horizontally depending on how
much traffic you're getting.
|
| |
|
|
|
|
|
|
|
|
| |
This bit of code is still disabled for now though. I need to actually
gather and render facepiles.
Additionally, now details won't even show if there were no reactions
to the post, which saves space.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
They really use the same framework, so for now a unit test for like
posts is sufficient. Of course, for proper coverage, one can introduce
tests for bookmarks too, especially if one chooses to render them
differently. The logic will be pretty much the same though.
Replies might use the same logic, since those are also
Webmention-oriented posts.
(It looks like another way to classify MF2 documents is slowly forming
in my brain. Maybe I should write about it on my blog.)
|
|
|
|
|
|
|
| |
There were lots of unneccesary Option::unwrap() invocations that could
be replaced with `if let` statements. This makes the code cleaner and
less likely to panic in case a corrupted, incomplete or manually
injected MF2-JSON document needs to be rendered.
|
|
|
|
| |
Now everyone will know where to get my software if they see it.
|
|
|
|
|
|
| |
It mostly checks the same old things as with notes, but does check for
a name (and as it's explicitly provided, it does work with the buggy
version of the `microformats` crate.
|
|
|
|
|
|
|
|
|
|
| |
New generators include:
- Articles (h-entry with a name)
- Replies (notes with an in-reply-to)
- Likes (h-entries with a like-of)
For replies and likes, there are variants with an h-cite (full reply
context) or a link (partial reply context).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These unit tests generate a random MF2-JSON post, convert it to
MF2-HTML using the template and then read it back using the
`microformats` crate.
The only problem is that it has a nasty bug with overstuffing implied
properties. This is being worked on:
https://gitlab.com/maxburon/microformats-parser/-/issues/7
For now the tests marked as ignored because they fail. But the
function itself that generates them should remain here for
documentation and potential code sharing with the `microformats`
crate, potentially even migrating to a subcrate there.
|
| |
|
|
|
|
|
|
|
| |
These features share some code since they both require fetching reply
contexts, so it makes sense to implement them together.
TODO cover webmention sending with integration tests
|
| |
|
|
|
|
|
|
| |
It looks like previous versions did not check Content-Type and I was
able to get away with it. Warp is much more strict in that regard (and
it is good).
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
| |
Now I will know if something breaks horribly again.
|
|
|
|
|
|
| |
Iterator::skip_while() returns the last item. Reimplement the
combinator that I need using a loop over Iterator::by_ref()
instead. This will terminate after the end is reached.
|
| |
|
|
|
|
| |
Closes #4.
|
|
|
|
|
|
|
|
| |
This will ease future extraction of the media endpoint to a separate
crate. This is highly desirable since it will allow Kittybox's media
endpoint to be used separately in instances where a standalone media
endpoint is desirable (e.g. custom solutions using my code to polyfill
for desired functionality that is undesirable to implement by oneself)
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
- Somehow it looks like zlib is required, but wasn't passed
- Log level in the test is set to (mostly) info
- A needless comment is deleted
- Single-step build is enabled. Since this is a multi-crate workspace
now, naersk will not offer much in terms of incrementality (and I
use `nix develop` anyway with a dev-shell)
|
|
|
|
|
| |
Match blocks and ifs are actually perfectly usable as expressions. I
forgot about that when writing that code.
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Flake lock file updates:
• Updated input 'naersk':
'github:nmattia/naersk/8cc379478819e6a22ce7595a761fe1e17c8d7458' (2022-04-16)
→ 'github:nmattia/naersk/f21309b38e1da0d61b881b6b6d41b81c1aed4e1d' (2022-05-03)
• Updated input 'nixpkgs':
'github:kisik21/nixpkgs/bf819aeeb2f0954506a748ff117962edc8cf732d' (2022-03-28)
→ 'github:vikanezrimaya/nixpkgs/bf819aeeb2f0954506a748ff117962edc8cf732d' (2022-03-28)
• Updated input 'rust':
'github:oxalica/rust-overlay/26b570500cdd7a359526524e9abad341891122a6' (2022-04-17)
→ 'github:oxalica/rust-overlay/88991ffbd57e10b474ea768ec0b54c4f379c566c' (2022-05-04)
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- 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!)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Flake lock file updates:
• Updated input 'naersk':
'github:nmattia/naersk/e09c320446c5c2516d430803f7b19f5833781337' (2021-06-17)
→ 'github:nmattia/naersk/8cc379478819e6a22ce7595a761fe1e17c8d7458' (2022-04-16)
• Updated input 'nixpkgs':
'github:kisik21/nixpkgs/e2b7e226ac2f83039d0f116c3693619a8bd6444c' (2021-11-23)
→ 'github:kisik21/nixpkgs/bf819aeeb2f0954506a748ff117962edc8cf732d' (2022-03-28)
• Updated input 'rust':
'github:oxalica/rust-overlay/885ef5bf9d2857dff8689292aedb511dfc952862' (2021-11-23)
→ 'github:oxalica/rust-overlay/26b570500cdd7a359526524e9abad341891122a6' (2022-04-17)
|
| |
|
| |
|
| |
|
|
|
|
| |
It's an advanced HTTP client that can do more than vanilla Hyper does.
|
|
|
|
|
| |
Sometimes it's cumbersome to include them, and I plan to make them
embedded in the app anyway. This is my reminder to do it ASAP.
|
|
|
|
|
|
| |
Now Kittybox can gracefully shutdown on SIGTERM. Nice!
TODO: consider shutting down on multiple signals
|
| |
|
|
|
|
|
|
| |
This stubs the neccesary code with enough stuff that it will work and
be accepted by most compliant Micropub implementations. Later, this
can be extended when the neccesary amendments and refactors are done.
|
| |
|
|
|
|
|
|
| |
This is so minimal it can't be much less than this.
Use it with `docker load`.
|
| |
|
| |
|
| |
|