Parsee/README.MD
2024-08-31 13:16:58 +02:00

5.5 KiB

Parsee - the jealous XMPP<=>Matrix bridge

Parsee is a Matrix<=>XMPP bridge written in C99, with Cytoplasm, similar to Bifrost, but it is NOT a drop-in replacment.

Why?

Naming

The name 'Parsee' is actually a reference to Parsee Mizuhashi, a "bridge princess".

Reasoning (personal to LDA)

I hate Bifrost. I also wanted to dip my toes in XMPP, XML, and bridges a bit. Also, as a sister project to KappaChat, this means that I can integrate Parsee with KappaChat however I wish it to be, which allows me to mess around with a codebase I'm already familiar with. A more "up-to-date" reason may be to have a small, 'Just Werks' bridging solution that is good.

Well, I'm trying to do that, at least. Please scream at me if that fails(or just doesn't run on a overclocked Raspberry Pi 4B, which, by the way, is literally where Parsee+XMPP is running for now.)

"Why not just use Matrix lol"

"Why not just use XMPP lol"

These two having the same answer should be enough information. Also can I just have fun? One could also argue that both sides need to migrate(onboard) the other side, so a bridge may be a good way to start.

BUILDING

$ make # This generates a 'parsee' executable.
$ cd tools # If you want to build more tools
$ make && cd ..
$ make ayadoc # If you want to build HTML documentation
$ make [PREFIX=(install path)] install # To install Parsee.

If there are any Cytoplasm-related build failures, you may want to check the Makefile to change a few variables (you can set CYTO_INC and CYTO_LIB for Cytoplasm's include and library paths specifically.)

DEPENDENCIES

Parsee tries to avoid dependencies aside from Cytoplasm. Itself optionally depends on a good POSIX implementation, and optionally OpenSSL/LMDB (highly recommended, but you can get away without those if you're adventurous).

RUNNING

First off, you may want to configure Parsee by running the config tool(generally named parsee-config in most cases), with the correct flags, like here.

parsee-config \
    -d data/ \
    -m 'https://media.blow.hole/' \ # You will need to reverse proxy media.blow.hole to point 
                                    # to Parsee (port 7642)
    -H 'blow.hole' \ # Matrix homeserver name
    -J 'parsee.blow.hole' \ # XMPP component host, must be reachable
    -s 'A very secure XMPP component secret' \
    -p 5347

If everything goes well, it should generate a parsee.json file.

To start Parsee, run it in the same directory as the parsee.json with the -g flag. It should start properly and produce a parsee.yaml file, which you can chuck into your Matrix homeserver. To test if the homeserver can talk to Parsee, try reaching it over HTTP at the port 7642. If it returns with a landing page, then this side works. You can read it for some more information.

DOCS

Currently, the main sources of documentation are the Ayadocs(for headers) and the manpages (see etc/man)

TODOS before 1.0 rolls around

  • Add libomemo or something as an optional dependency.
    • It depends on more stuff anyways, and I don't want to weigh down the dependency list of Parsee for that.
    • Matrix's libolm is deprecated. They replaced it with a Rust version that pulls in way too many dependencies, and that lacks a C binding. We may put in the work of either forking off libolm or making a binding to KappaChat.
      • Josh did infact tell me that maybe C bindings may happen. I'd be willing to help out, but IDK. In any case, this will at best be an extension packagers may integrate properly.
  • Get rid of the '?'-syntax and use another invalid Matrix char/valid XMPP char ('$'?) for escaped?
  • PROPER FUCKING AVATARS XMPP->Matrix is decent, Matrix->XMPP is effectiveny not done
  • Consider making room/MUC admins/owners be able to plumb instead of it being restricted to Parsee admins, with permission from MUC owners, too
    • Limiting to admins may be a way to "control" consent for both, but this is only if Parsee admins are good-willed, which we must assume such statment to be false by default.
  • Look at XEPS-TBD.TXT for XEPs to be done
  • Add a MUC server to Parsee, such that it may be able to hook onto it and therefore support XMPP->Matrix bridging.
  • Manage MUC DMs in a reasonable manner. Thanks @freeoffers4u:matrix.org for being a fucking annoyance and DMing an old Parsee semi-anon user for no clear reason.
  • Deadlocks. It's always deadlocks.

DONATING/CONTRIBUTING

If you know things about XMPP or Matrix, yet aren't familiar with C99, or just want to suggest a feature, you may open an issue.

Packaging Parsee (and Cytoplasm) for your specific platform might be a nice to have, to make Parsee easier to setup and manage.

If you want, you may want to give this project some word-of-mouth as advertisment.

(DON'T FOR NOW, THERE IS LITERALLY NOWHERE THIS GOES TO) You may also donate to the LiberaPay, alongside Telodendria's, as it is the project currently maintaining Cytoplasm.

IM chats

Please avoid asking for help/issues here. If you really want, you may just open an issue and link it over it. Basic respect for others/not being an asshat is required. (Also, these are temporary room aliases.)