NuSkooler / enigma-bbs

ENiGMA½ BBS Software
https://nuskooler.github.io/enigma-bbs/
BSD 2-Clause "Simplified" License
534 stars 104 forks source link

ActivityPub / Mastadon #459

Open cognitivegears opened 1 year ago

cognitivegears commented 1 year ago

Is your feature request related to a problem? Please describe.

I know this would be a pretty major undertaking and kind of a crazy idea but I really think that ActivityPub integration for Enigma 1/2 would be amazing. That way an Enigma BBS could be a part of the Fediverse and interoperate with other ActivityPub systems like Mastodon. Mastodon strikes me as having many similarities with the BBS world - messages are distributed, sorta similar to FidoNet etc, while also split into local instances grouped by shared interests, similar to local BBSes.

Describe the solution you'd like

Implement the ActivityPub API on GitHub.

One possible implementation of this is to use express-activitypub as a reference, potentially using some of the code if the licensing etc is compatible.

Each user could map directly with their username, private email could be mapped to DMs, new menu options added to display feeds (following, local, federated) and search. One question could be how to map local boards into ActivityPub - I think we could use a strategy similar to this project:

Guppe Groups - Github

Using this approach, Mastadon users could follow a generic "user" for each board to see messages, and @ mention them to post something to the board.

Describe alternatives you've considered A clear and concise description of any alternative solutions or features you've considered.

I did consider creating a Mastadon client or full ActivityPub system as a Door, but: 1) for all the functionality needed for this, it would probably make sense to start with a fork of Enigma 1/2 anyway, and at that point better just to integrate the functionality 2) besides opening up the Fediverse to BBS users, by integrating it would also provide a new interface to the BBS itself if the client interface is implemented, which would be great to make a quick easy interface for the BBS when you are on mobile etc. 3) wouldn't it be great to have Enigma 1/2 listed alongside Mastodon, Diaspora, Pixelfed etc? Might bring some people back to the BBS.

Additional context

cognitivegears commented 1 year ago

By the way, if you agree I'd be happy to help with development any way I can - the idea was way too large for me to just put in a PR out of the blue (if even I could manage to figure it out by myself) but if you agree I'd be happy to take on parts of the integration as well with your direction.

NuSkooler commented 1 year ago

@cognitivegears I love this idea -- I've been pondering it a bit myself. The protocol is fairly simple in general I believe, and enig already has a web server built in that should be leverageable.

Funny, I opened a tab to look at closer just this morning: https://github.com/jakelazaroff/dumbo

Let me play some of this back to make sure I understand some of your proposals:

I'm not fully following the @ mention in connection with 'local boards' though?

Anyway, I'd love to collaborate on this!

Additional refs:

cognitivegears commented 1 year ago

@cognitivegears I love this idea -- I've been pondering it a bit myself. The protocol is fairly simple in general I believe, and enig already has a web server built in that should be leverageable.

Awesome! And I was thinking the exact same thing about the web server. Actually a lot of the design choices (for example UTF-8 internally) play into this really well also.

Funny, I opened a tab to look at closer just this morning: https://github.com/jakelazaroff/dumbo

Let me play some of this back to make sure I understand some of your proposals:

  • Map user directly to a particular BBS and server, e.g. @NuSkooler@xibalba.l33t.codes

Right exactly

  • Direct replies to said users would result in a inbox entry

    • We may even be able to allow them to then reply from the inbox; enig has a concept of foreign addresses for this purpose

Exactly, and that's great news as well, that's one area I was wondering about.

I'm not fully following the @ mention in connection with 'local boards' though?

So, I probably shouldn't have said board here - I meant each "message area".

For example, say I follow you "@NuSkooler@xibalba.l33t.codes" from my account "@cognitivegears@mastodon.social" and you posted in the General message area then I could see that on my feed. But say another person then replies directly on the BBS to that post. Since I don't follow that person though, I wouldn't see the reply at all. It would be great to be able to follow the message area itself and see everything posted on it.

So, to do that, we give each message area a "user" as well. So for General for example it could be something like "@xibalba-general@xibalba.l33t.codes" (probably configurable per message area or something.) Then if I follow that from "@cognitivegears@mastodon.social" then I would see all the posts on that message area no matter who they are from. The original poster can be tagged in the message as well.

To take that a step further, we could even allow (probably optional via setting) other people on Mastodon or other servers to post to that message area by tagging "@xibalba-general@xibalba.l33t.codes" in their message.

This is pretty deep into design here and definitely not a first step, but if we could get here then it would be super powerful. It would mean people could follow and contribute from anywhere with both users and message areas. Of course we'd then also need to support controls on this too like blocked servers or users etc.

Anyway, I'd love to collaborate on this!

Awesome I would love to help! I'll read up on some of these refs to get a better handle on the spec. I assume you'd start a long lived branch for this like you did with admin console? Just let me know and if there is some particular area you'd like me to help with. This sounds exciting 🙂

Additional refs:

NuSkooler commented 1 year ago

@cognitivegears OK yep, this all make sense, thanks!

Yep, feature branch works well here. We can devise a light spec then break up the work pretty easily I'd think. That will help me point out where various pieces of code live as well.

Mastodon has it's own extensions and information as well.

IRC/Discord/Whatever would help as well

cognitivegears commented 1 year ago

@cognitivegears OK yep, this all make sense, thanks!

Yep, feature branch works well here. We can devise a light spec then break up the work pretty easily I'd think. That will help me point out where various pieces of code live as well.

Mastodon has it's own extensions and information as well.

IRC/Discord/Whatever would help as well

Great - I'm cognitivegears#2645 on Discord. Happy to use something else if you prefer as well, lmk. I like the idea of coming up with a light spec - want to throw something in google docs or somewhere and we can just start throwing stuff against the wall?

NuSkooler commented 1 year ago

https://github.com/NuSkooler/enigma-bbs/wiki/ActivityPub-Integration

stlalpha commented 1 year ago

This is very cool. I think the abstraction of message bases/bbs covers the gap well and leaves room for you to add text into the message payload identifying the local user (that doesnt have a mastodon account)?

tracker1 commented 1 year ago

Wouldn't being a user of the BBS intrinsically mean there's a mastadon account @username@bbsname ?

cognitivegears commented 1 year ago

Wouldn't being a user of the BBS intrinsically mean there's a mastadon account @username@bbsname ?

Correct, that's the idea. It is expanding the bbs itself into the Fediverse. Technically they have an ActivityPub account, not specifically a Mastadon one, though we are aiming for Mastadon compatibility so practically it's pretty much the same thing.

cognitivegears commented 1 year ago

This is very cool. I think the abstraction of message bases/bbs covers the gap well and leaves room for you to add text into the message payload identifying the local user (that doesnt have a mastodon account)?

As I mentioned for the other comment, they actually do have an account (or more specifically an ActivityPub account, but it should be compatible with Mastodon so pretty much the same thing.) You are totally correct though that I am hoping we can add additional data that is BBS specific so that other people on BBSes can have an even richer experience when interacting via ActivityPub.

tracker1 commented 1 year ago

Also, realized after my prior comment that networked message bases would have non-local users, so that reference would be different.

cognitivegears commented 1 year ago

Also, realized after my prior comment that networked message bases would have non-local users, so that reference would be different.

Grew point - we haven't talked about what to do about networked message bases. Thoughts on what the best way to handle this is? Not sure if it should just be local only, or if there is actually a case for federating what is already a network. On the other hand, kinda reminds me of the old school Fidonet to internet gateways in the past.

NuSkooler commented 1 year ago

I am hoping we can add additional data that is BBS specific so that other people on BBSes can have an even richer experience when interacting via ActivityPub.

We can certainly add all the rel values we want. For example, imagine something like this:

{
  "rel": "ftn-address-list:v1",
  "type": "application/json",
  "href": "https://.../SOMEUSER/ftn-address-list"
}

Where fetching may yield:

{
  "ftn-address-list": {
    "fsxnet": "NuSkooler@21:1/121"
  }
}
NuSkooler commented 1 year ago

I have a list of bug fixes, minor improvements, etc. to finish up in the alpha, then this can go to main. Features can then be contributed.

If anyone else wants to test: https://xibalba.l33t.codes (ask NuSkooler for beta access)

snan commented 1 year ago

One question could be how to map local boards into ActivityPub

For boards, something compatible with kbin's "magazines" or lemmy's "communities" would kick! ♥

NuSkooler commented 1 year ago

Lemmy's communities follow a FEP proposal for groups - https://codeberg.org/fediverse/fep/src/branch/main/fep/1b12/fep-1b12.md

I"m not yet sure how kbin does it, but sticking to a FEP, which a lot of AP authors have started working together on would be good.

snan commented 1 year ago

Kbin also uses that FEP, I think

christiansacks commented 5 days ago

Has this been implemented for other people to use/try? I would love to get my enigma into the fediverse to join xibalba.