Federated social network
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
silverpill e43e6c3d0a Paginate home timeline 3 days ago
.cargo Configure linter and fix its warnings 3 weeks ago
contracts Update contracts 1 month ago
files Add files directory, update readme 1 week ago
migrations Add API endpoints for making and deleting reposts 1 week ago
src Paginate home timeline 3 days ago
.editorconfig Set indent size in JSON files to 2 3 months ago
.env Initial commit 3 months ago
.gitignore Add files directory, update readme 1 week ago
Cargo.lock Use ULIDs instead of v4 UUIDs for identifiers 3 days ago
Cargo.toml Use ULIDs instead of v4 UUIDs for identifiers 3 days ago
LICENSE Initial commit 3 months ago
README.md Send notification when user's post is reposted 4 days ago
config.yaml.example Set post visibility to public by default 2 weeks ago
docker-compose.yaml Initial commit 3 months ago

README.md

Mitra

Federated social network with smart contracts.

  • Built on ActivityPub protocol.
  • Lightweight.
  • Sign-in with Ethereum.
  • Proving membership with a token.
  • Converting posts into NFTs.
  • More crypto features in the future.

Smart contracts repo: https://codeberg.org/silverpill/mitra-contracts

Frontend repo: https://codeberg.org/silverpill/mitra-web

Matrix chat: #mitra:halogen.city

Demo instance: https://mitra.social/ (invite-only)

Requirements

  • Rust 1.51+
  • Postgresql
  • IPFS node (optional)
  • Ethereum node (optional)

Development

Create database

docker-compose up

Test connection:

psql -h localhost -p 5432 -U mitra mitra

Run web service

Generate instance key:

cargo run --bin mitractl generate-rsa-key

Create config file, set instance_rsa_key, adjust other settings if needed:

cp config.yaml.example config.yaml

Compile and run service:

cargo run

Run CLI

cargo run --bin mitractl

Run linter

cargo clippy

Run tests

cargo test

Build for production

cargo build --release

Federation

The following activities are supported:

  • Accept(Follow)
  • Reject(Follow)
  • Undo(Follow)
  • Create(Note)
  • Delete(Note)
  • Like(Note)
  • Announce(Note)
  • Follow(Person)
  • Update(Person)

And these additional standards:

Client API

Mastodon API

Most methods are similar to Mastodon API:

POST /api/v1/accounts
GET /api/v1/accounts/{account_id}
GET /api/v1/accounts/verify_credentials
PATCH /api/v1/accounts/update_credentials
GET /api/v1/accounts/relationships
POST /api/v1/accounts/{account_id}/follow
POST /api/v1/accounts/{account_id}/unfollow
GET /api/v1/directory
GET /api/v1/instance
GET /api/v1/markers
POST /api/v1/markers
POST /api/v1/media
GET /api/v1/notifications
GET /api/v2/search
POST /api/v1/statuses
GET /api/v1/statuses/{status_id}
GET /api/v1/statuses/{status_id}/context
POST /api/v1/statuses/{status_id}/favourite
POST /api/v1/statuses/{status_id}/unfavourite
POST /api/v1/statuses/{status_id}/reblog
POST /api/v1/statuses/{status_id}/unreblog
GET /api/v1/timelines/home

Additional methods:

POST /api/v1/statuses/{status_id}/make_permanent
GET /api/v1/statuses/{status_id}/signature

CLI commands

Generate RSA private key:

mitractl generate-rsa-key

Generate invite code:

mitractl generate-invite-code

List generated invites:

mitractl list-invite-codes

Delete profile:

mitractl delete-profile -i 55a3005f-f293-4168-ab70-6ab09a879679

Delete post:

mitractl delete-post -i 55a3005f-f293-4168-ab70-6ab09a879679

Generate ethereum address:

mitractl generate-ethereum-address

License

AGPL-3.0