Movie reviews bot playground.
Find a file
2022-11-23 14:56:29 +00:00
.cargo Rewrite wallet address validator to work with non-ethereum addresses 2022-08-15 15:45:21 +00:00
contracts Enable contract feature detection 2022-06-30 12:20:14 +00:00
contrib Add support for SOCKS proxy 2022-10-19 20:29:24 +00:00
docs Add token gate feature flag to instance info 2022-11-16 15:11:25 +00:00
files Add files directory, update readme 2021-11-26 22:39:54 +00:00
migrations Add hostname column to actor_profile table and replace acct with generated column 2022-10-04 16:51:22 +00:00
scripts Add contracts to debian package 2022-06-03 20:33:46 +00:00
src Add signature type to the output of get_json_signature function 2022-11-23 14:56:29 +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 Bump version 2022-11-19 22:43:43 +00:00
Cargo.toml Bump version 2022-11-19 22:43:43 +00:00
config.yaml.example Rename daemon_url parameter in monero config to node_url 2022-09-24 20:26:34 +00:00
CONTRIBUTING.md Add MSRV policy to CONTRIBUTING.md 2022-11-13 21:31:23 +00:00
docker-compose.yaml Create docker volume for storing wallet data 2022-09-10 21:47:56 +00:00
FEDERATION.md Add FEP-8b32 to the list of supported FEPs 2022-11-19 18:12:28 +00:00
LICENSE Initial commit 2021-09-14 12:24:05 +00:00
README.md Add FEP-8b32 to the list of supported FEPs 2022-11-19 18:12:28 +00:00

Mitra

Federated micro-blogging platform and content subscription service.

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

Subscriptions provide a way to receive monthly payments from subscribers and to publish private content made exclusively for them.

Supported payment methods:

  • Monero.
  • ERC-20 tokens (on Ethereum and other EVM-compatible blockchains).

Other features:

  • Sign-in with a wallet.
  • Donation buttons.
  • Token-gated registration (can be used to verify membership in some group or to stop bots).
  • Converting posts into NFTs.
  • Saving posts to IPFS.

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

Network stats: https://the-federation.info/mitra

Matrix chat: #mitra:halogen.city

Code

Server: https://codeberg.org/silverpill/mitra (this repo)

Web client: https://codeberg.org/silverpill/mitra-web

Ethereum contracts: https://codeberg.org/silverpill/mitra-contracts

Requirements

  • Rust 1.54+ (when building from source)
  • PostgreSQL 12+
  • IPFS node (optional, see guide)
  • Ethereum node (optional)
  • Monero node and Monero wallet (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 USER mitra WITH PASSWORD 'mitra';
CREATE DATABASE mitra OWNER mitra;

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:

CREATE USER mitra WITH PASSWORD 'mitra';
CREATE DATABASE mitra OWNER mitra;

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.

Monero

Install Monero node or choose a public one.

Configure and start monero-wallet-rpc daemon.

Create a wallet for your instance.

Add blockchain configuration to blockchains array in your configuration file.

Ethereum

Install Ethereum client or choose a JSON-RPC API provider.

Deploy contracts on the blockchain. Instructions can be found at https://codeberg.org/silverpill/mitra-contracts.

Add blockchain configuration to blockchains array in your configuration file.

Development

See CONTRIBUTING.md

Start database server

docker-compose up -d

Test connection:

psql -h localhost -p 55432 -U mitra mitra

Start Monero node and wallet server

(this step is optional)

docker-compose --profile monero up -d

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

CLI

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

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

Commands

Print help:

mitractl --help

Generate RSA private key:

mitractl generate-rsa-key

Generate invite code:

mitractl generate-invite-code

List generated invites:

mitractl list-invite-codes

Set or change password:

mitractl set-password <user-id> <password>

Delete profile:

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

Delete post:

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

Remove remote posts and media older than 30 days:

mitractl delete-extraneous-posts 30

Delete attachments that don't belong to any post:

mitractl delete-unused-attachments 5

Delete empty remote profiles:

mitractl delete-empty-profiles 100

Generate ethereum address:

mitractl generate-ethereum-address

Update synchronization starting block of Ethereum blockchain:

mitractl update-current-block 2000000

Create Monero wallet:

mitractl create-monero-wallet "mitra-wallet" "passw0rd"

License

AGPL-3.0

Support

Monero: 8Ahza5RM4JQgtdqvpcF1U628NN5Q87eryXQad3Fy581YWTZU8o3EMbtScuioQZSkyNNEEE1Lkj2cSbG4VnVYCW5L1N4os5p