fuwuqi/README.md

54 lines
3.2 KiB
Markdown
Raw Normal View History

2023-01-18 00:18:22 +00:00
# fuwuqi
2023-01-18 06:41:18 +00:00
Fuwuqi (fúwùqì or 服务器 means "server" in Chinese) is a useless C2S ActivityPub server for "extremely hardcore" ActivityPub enthusiasts. Craft your own exquisite WebFinger response! Customize your actor object exactly like you want! Hack and extend the (100+ε)-line Python server code! 100% guarenteed™ to federate with Mastodon! It's like [Honk](https://humungus.tedunangst.com/r/honk), but instead of politely refusing to hold your hand, it chucks you straight into the deep end of the pool.
2023-01-18 01:19:53 +00:00
## Configuration
2023-01-18 06:48:18 +00:00
You will need:
1. 1x server with a domain name and reverse proxy
2. 1x client device (can be same as server)
2023-01-18 18:29:57 +00:00
3. 2x Python, `cryptography`, `requests` on both server and client
2023-01-18 06:48:18 +00:00
3. 1x brain fluent in Python and ActivityPub
4. 1x pain tolerance
2023-01-18 06:23:36 +00:00
First, clone this repo on your server and your client device.
2023-01-18 01:19:53 +00:00
Now, generate an RSA keypair on your client device:
```bash
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
```
2023-01-18 06:23:36 +00:00
On the server, rename `users/test.jsonld` to your username and pop it open in your favorite text editor. You should change `0.exozy.me` to match your server's domain name, `test` to your username, and the `publicKeyPem` field to the public key you just generated.
2023-01-18 01:19:53 +00:00
2023-01-18 06:23:36 +00:00
Onward! Now open `.well-known/webfinger` in your editor, and modify it similarly. Finally, open `server.py` and update the domain, obviously.
2023-01-18 01:19:53 +00:00
That wasn't so bad, was it? (sobbing sounds)
## Usage
2023-01-18 06:48:18 +00:00
Alright, time for the real deal. Start up `python server.py` on your server, and reverse-proxy it so you actually have TLS. If you want to customize the port or whatever, just change the source code.
2023-01-18 01:19:53 +00:00
2023-01-18 19:52:11 +00:00
Now on your client device, open up your favorite C2S ActivityPub client... oh wait... there aren't any! Welp, you'll just have to settle for reading the [AP spec](https://www.w3.org/TR/activitypub/), writing some homemade JSON, and figuring out how `python client.py` works. That's rough, buddy. You'll have to learn how to manually write `Note`s, manually accept follow requests, and more! You can find some examples in this repo. HTTP signatures are generated client-side, for no good reason other than it works. If you want to view your unread messages, just `curl` your inbox and pipe it into `jq`. Easy as that. (screaming in pain sounds)
2023-01-18 01:19:53 +00:00
2023-01-18 06:23:36 +00:00
Enjoy your new "extremely hardcore" ActivityPub server!!! 🎉😎🚀🙃🥳
2023-01-18 01:19:53 +00:00
## Features
2023-01-18 06:41:59 +00:00
Since Fuwuqi's code is super duper easy to read and extend, the following features are left as an exercise to the reader:
- Multi-user support (hint: dynamically generate `.well-known/webfinger` instead of serving a static file)
2023-01-18 20:06:17 +00:00
- S2S server-side processing
2023-01-18 19:48:11 +00:00
- Deleting posts
- JSON-LD (hint: don't do it, your brain will thank you)
- Lots of pain
2023-01-18 01:19:53 +00:00
## Resources
- https://www.w3.org/TR/activitypub/
- https://blog.joinmastodon.org/2018/06/how-to-implement-a-basic-activitypub-server/
- https://blog.joinmastodon.org/2018/07/how-to-make-friends-and-verify-requests/
2023-01-18 06:23:36 +00:00
- https://docs.joinmastodon.org/spec/
- https://socialhub.activitypub.rocks/t/python-mastodon-server-post-with-http-signature/2757
2023-01-18 19:50:20 +00:00
- https://socialhub.activitypub.rocks/t/activitypub-client-to-server-faq/1941
- https://codeberg.org/forgejo/forgejo/issues/59#contributing