Gitea federation task list #3

Open
opened 2 months ago by Ta180m · 0 comments
Ta180m commented 2 months ago (Migrated from github.com)
Owner

This is a detailed task list of things that need to be accomplished for Gitea federation.

User keypairs

This is done.

  • Create public/private keypair #17071
  • HTTP signature middleware #19133

Discovery

This is done.

  • Nodeinfo endpoint #16758 #19561
  • WebFinger #19462
  • ActivityPub-specific information in the WebFinger endpoint #19133
  • Implement .well-known/host-meta? This is probably not necessary but Mastodon and PeerTube do it.

Actors

This is almost done.

  • Mapping Gitea's concepts ("People", "Teams") into AP "Actor" concepts
  • Mapping Gitea's actor concepts into the ontology
  • Assign Actor IRIs #19133 #6
  • Manage inbox and outbox #6
  • Database storage for inbox and outbox #5
  • Generate user outbox from actions table
  • Send out an activity for each user action (reuse exisitng notification code)
  • Federated notifications

ForgeFed

  • Revive ForgeFed
  • Adapt Commit forgefed vocabulary for the needs of Gitea
  • Adapt Repository forgefed vocabulary for the needs of Gitea
  • Figure out the best way to represent pull requests in ForgeFed #88
  • Add milestones to ForgeFed
  • Add project board federation to ForgeFed
  • Add wiki federation to ForgeFed (probably can reuse Repo and Commit federation)

go-ap

We need to add ForgeFed types to go-ap. Mastodon discussion, mailing list discussion, current code

  • Implement Commit type
  • Implement Repository type
  • Implement Branch type
  • Implement Push type
  • Implement Ticket type
  • Tests
  • Export more JSON functions from go-ap/activitypub

Sending/receiving activities

  • Actor inbox and outbox IRIs #19133
  • Addressing (currently we just send to the IRI in the To field which is a bad hack)
  • Transport (HTTPS with HTTP signatures) #19133
  • sharedInbox? (probably not necessary)
  • C2S ActivityPub? (longshot, work on this later)

Database representation of remote data

  • Remote federated users #2
  • Remote organizations
  • Remote repositories
  • External issues (and reference in comments)
  • External PRs (and reference in comments)
  • External projects (and reference in comments)

Serving/fetching ActivityStreams

  • Fetch remote ActivityStreams resources
  • Generate ActivityStreams representation of repos
  • Render remote users in the UI
  • Render remote organizations in the UI
  • Render remote repositories in the UI

Remote interactions

  • Remote interactions pop-up UI (like Mastodon)
  • authorize_interaction?uri= page (like Mastodon)
  • Federated collaborators or organization members
  • Cross-instance Git push
  • Federated following
  • Federated starring
  • Federated issues
  • Federated commenting
  • Federated forks
  • Federated PRs
  • Federated milestones
  • Federated wikis
  • Federated project boards

Migrations

  • Add migrations to ForgeFed spec #149
  • Username or repo renames
  • Moving a user or repo to a different instance
  • Official way to migrate entire GitHub account to a Gitea instance
  • Official way to migrate entire GitHub organization to a Gitea instance
  • Configurable cooldown period in which usernames cannot be claimed
  • Periodically fetch and update cached remote users' data

User eXperience and User Interface

Interoperability

  • Federated following with Mastodon, Pleroma, etc
  • Federated commenting on issues from Mastodon, etc

Testing

  • Server-to-server federation integration testing (do we need to spin up two instances for these tests?)

Documentation

Moderation

  • Disable all federation features by default
  • Blocking a user
  • Blocking a server
  • Moderation UI
  • Collection pagination
  • Rate limit federation requests
  • Rate limit user signups
  • Rate limit issue creation/commenting in UI
This is a detailed task list of things that need to be accomplished for [Gitea federation](https://gitea.com/Ta180m/gitea/wiki/Useful-links). ## User keypairs This is done. - [x] Create public/private keypair [#17071](https://github.com/go-gitea/gitea/pull/17071) - [x] HTTP signature middleware [#19133](https://github.com/go-gitea/gitea/pull/19133) ## Discovery This is done. - [x] Nodeinfo endpoint [#16758](https://github.com/go-gitea/gitea/issues/16758) [#19561](https://github.com/go-gitea/gitea/pull/19561) - [x] WebFinger [#19462](https://github.com/go-gitea/gitea/pull/19462) - [x] ActivityPub-specific information in the WebFinger endpoint [#19133](https://github.com/go-gitea/gitea/pull/19133) - [ ] Implement .well-known/host-meta? This is probably not necessary but Mastodon and PeerTube do it. ## Actors This is almost done. - [x] Mapping Gitea's concepts ("People", "Teams") into AP "Actor" concepts - [x] Mapping Gitea's actor concepts into the ontology - [x] Assign Actor IRIs [#19133](https://github.com/go-gitea/gitea/pull/19133) #6 - [x] Manage inbox and outbox #6 - [x] Database storage for inbox and outbox #5 - [ ] Generate user outbox from actions table - [ ] Send out an activity for each user action (reuse exisitng notification code) - [ ] Federated notifications ## ForgeFed - [x] Revive [ForgeFed](https://forgefed.org) - [ ] Adapt Commit forgefed vocabulary for the needs of Gitea - [x] Adapt Repository forgefed vocabulary for the needs of Gitea - [ ] Figure out the best way to represent pull requests in ForgeFed [#88](https://codeberg.org/ForgeFed/ForgeFed/issues/88) - [ ] Add milestones to ForgeFed - [ ] Add project board federation to ForgeFed - [ ] Add wiki federation to ForgeFed (probably can reuse Repo and Commit federation) ## go-ap We need to add ForgeFed types to go-ap. [Mastodon discussion](https://social.exozy.me/@ta180m/108466642486831048), [mailing list discussion](https://lists.sr.ht/~mariusor/activitypub-go/%3C6aivY9YmilsvQ6CauRoaXbvXX2bdZEXOEv-xnaTD0JLvodqKPZ2FMdQHmXYKmEOdzrPZU9Ipro5sOynfe-hJbi5f31MiqOV8EI4rDOw88wg%3D%40proton.me%3E), [current code](https://gitea.com/Ta180m/gitea/src/branch/main/models/forgefed) - [x] Implement Commit type - [x] Implement Repository type - [x] Implement Branch type - [x] Implement Push type - [x] Implement Ticket type - [ ] Tests - [ ] Export more JSON functions from go-ap/activitypub ## Sending/receiving activities - [x] Actor inbox and outbox IRIs [#19133](https://github.com/go-gitea/gitea/pull/19133) - [ ] Addressing (currently we just send to the IRI in the `To` field which is a bad hack) - [x] Transport (HTTPS with HTTP signatures) [#19133](https://github.com/go-gitea/gitea/pull/19133) - [ ] sharedInbox? (probably not necessary) - [ ] C2S ActivityPub? (longshot, work on this later) ## Database representation of remote data - [x] Remote federated users [#2](https://gitea.com/Ta180m/gitea/issues/2) - [ ] Remote organizations - [ ] Remote repositories - [ ] External issues (and reference in comments) - [ ] External PRs (and reference in comments) - [ ] External projects (and reference in comments) ## Serving/fetching ActivityStreams - [x] Fetch remote ActivityStreams resources - [x] Generate ActivityStreams representation of repos - [ ] Render remote users in the UI - [ ] Render remote organizations in the UI - [ ] Render remote repositories in the UI ## Remote interactions - [ ] Remote interactions pop-up UI (like Mastodon) - [ ] `authorize_interaction?uri=` page (like Mastodon) - [ ] Federated collaborators or organization members - [ ] Cross-instance Git push - [x] Federated following - [ ] Federated starring - [ ] Federated issues - [ ] Federated commenting - [ ] Federated forks - [ ] Federated PRs - [ ] Federated milestones - [ ] Federated wikis - [ ] Federated project boards ## Migrations - [ ] Add migrations to ForgeFed spec [#149](https://codeberg.org/ForgeFed/ForgeFed/issues/149) - [ ] Username or repo renames - [ ] Moving a user or repo to a different instance - [ ] Official way to migrate entire GitHub account to a Gitea instance - [ ] Official way to migrate entire GitHub organization to a Gitea instance - [ ] Configurable cooldown period in which usernames cannot be claimed - [ ] Periodically fetch and update cached remote users' data ## User eXperience and User Interface - [ ] Use cases ([federated issues](https://forum.forgefriends.org/t/forgefriends-full-description/13#presentation-1) etc.) - [ ] Drafting UX in PenPot ## Interoperability - [ ] Federated following with Mastodon, Pleroma, etc - [ ] Federated commenting on issues from Mastodon, etc ## Testing - [ ] Server-to-server federation integration testing (do we need to spin up two instances for these tests?) ## Documentation - [x] [Federation.md](https://socialhub.activitypub.rocks/t/guide-for-new-activitypub-implementers/479#federationmd-31) ## Moderation - [ ] Disable all federation features by default - [ ] Blocking a user - [ ] Blocking a server - [ ] Moderation UI - [ ] Collection pagination - [x] Rate limit federation requests - [ ] Rate limit user signups - [ ] Rate limit issue creation/commenting in UI
Ta180m changed title from Gitea federation status to Are we federated yet? 1 month ago
Ta180m changed title from Are we federated yet? to Gitea federation task list 1 month ago
Sign in to join this conversation.
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date

No due date set.

Dependencies

No dependencies set.

Reference: Ta180m/gitea#3
Loading…
There is no content yet.