Movie reviews bot playground.
Find a file
2022-07-17 00:11:02 +00:00
.cargo Move Undo(Announce) builder function to builders::undo_announce_note module 2022-07-14 10:57:17 +00:00
contracts Enable contract feature detection 2022-06-30 12:20:14 +00:00
contrib Add mapping with additional blockchain info to instance API response 2022-06-22 21:38:04 +00:00
docs Send notification to sender when subscription expires 2022-07-15 23:53:21 +00:00
files Add files directory, update readme 2021-11-26 22:39:54 +00:00
migrations Add updated_at column to actor_profile table 2022-07-08 20:02:28 +00:00
scripts Add contracts to debian package 2022-06-03 20:33:46 +00:00
src Send Remove(Person) activity when subscription expires 2022-07-17 00:11:02 +00:00
.editorconfig Set indent size in JSON files to 2 2021-09-14 13:35:41 +00:00
.env Add cargo feature for making production build 2022-05-04 22:06:12 +00:00
.gitignore Add files directory, update readme 2021-11-26 22:39:54 +00:00
Cargo.lock Use tokio::spawn instead of actix_rt::spawn 2022-07-17 00:03:43 +00:00
Cargo.toml Use tokio::spawn instead of actix_rt::spawn 2022-07-17 00:03:43 +00:00
config.yaml.example Add mapping with additional blockchain info to instance API response 2022-06-22 21:38:04 +00:00
docker-compose.yaml Change default PostgreSQL port 2022-03-09 20:41:56 +00:00
FEDERATION.md Send Delete(Person) activity when deleting local user 2022-06-02 16:28:40 +00:00
LICENSE Initial commit 2021-09-14 12:24:05 +00:00
README.md Check storage directory ownership at startup 2022-07-12 22:25:55 +00:00

Mitra

Federated social network with smart contracts.

Built on ActivityPub protocol, self-hosted, lightweight. Part of the Fediverse.

Unique features enabled by blockchain integration:

  • Sign-in with a wallet. A combination of domain-based and key-based identity.
  • Donations.
  • Recurring payments. Subscribers-only posts.
  • Token-gated registration (can be used to verify membership in some group or to stop bots).
  • Converting posts into NFTs.

Currently only Ethereum and other EVM-compatible blockchains are supported.

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

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

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

Matrix chat: #mitra:halogen.city

Requirements

  • Rust 1.54+ (when building from source)
  • PostgreSQL 12+
  • IPFS node (optional, see guide)
  • Ethereum node (optional)

Installation

Building from source

Run:

cargo build --release --features production

This command will produce two binaries in target/release directory, mitra and mitractl.

Install PostgreSQL and create the database.

Create configuration file by copying contrib/mitra_config.yaml and configure the instance. Default config file path is /etc/mitra/config.yaml, but it can be changed using CONFIG_PATH environment variable.

Start Mitra:

./mitra

An HTTP server will be needed to handle HTTPS requests and serve the frontend. See the example of nginx configuration file.

Building instructions for mitra-web frontend can be found at https://codeberg.org/silverpill/mitra-web#project-setup.

To run Mitra as a systemd service, check out the systemd unit file example.

Debian package

Download and install Mitra package:

dpkg -i mitra.deb

Install PostgreSQL and create the database. Open configuration file /etc/mitra/config.yaml and configure the instance.

Start Mitra:

systemctl start mitra

An HTTP server will be needed to handle HTTPS requests and serve the frontend. See the example of nginx configuration file.

Development

Create database

docker-compose up

Test connection:

psql -h localhost -p 55432 -U mitra mitra

Run web service

Create config file, adjust 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

Federation

See FEDERATION.md

Client API

Mastodon API

Most methods are similar to Mastodon API, but Mitra is not fully compatible.

OpenAPI spec (incomplete)

CLI

Commands must be run as the same user as the web service:

su mitra -c "mitractl generate-invite-code"

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

Remove remote posts and media older than 30 days:

mitractl delete-extraneous-posts -d 30

Delete attachments that doesn't belong to any post:

mitractl delete-unused-attachments -d 5

Generate ethereum address:

mitractl generate-ethereum-address

Update blockchain synchronization starting block:

mitractl update-current-block -n 2000000

License

AGPL-3.0

Support

Monero: 8Ahza5RM4JQgtdqvpcF1U628NN5Q87eryXQad3Fy581YWTZU8o3EMbtScuioQZSkyNNEEE1Lkj2cSbG4VnVYCW5L1N4os5p