[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) [![Go Report Card](https://goreportcard.com/badge/git.farhan.codes/farhan/fedilogue)](https://goreportcard.com/report/git.farhan.codes/farhan/fedilogue) # Fedilogue Fedilogue is a fediverse cataloging and search platform. The intention is to create a centralized search system for use by fediverse users and APIs. ## How does Fedilogue gather data? Fedilogue employs multiple methods to gather post and account data. * Through publicly accessible timelines * Through publicly accessible relays * Through privately accessible timelines, requiring an account on a given instance (untested) * Through followed users using a mass following agent (planned) ## Supported Instances Fedilogue can retrieve Notes (posts) from any instance that supports the ActivityPub protocol. However, it can only pull from Mastodon and Pleroma. ## How to run ### Go version This code was written on Go 1.17. ### Build Fedilogue ``` git clone https://git.farhan.codes/farhan/fedilogue cd fedilogue/fedilogue go build ``` This will produce a fedilogue executable in the project directory. ### Prepopulate the Database Create the `fedilogue` database and the user fedilogue. The exact process for this is outside of the scope of this document ``` CREATE USER fedilogue WITH PASSWORD 'yoursecurepassword'; CREATE DATABASE fedilogue OWNER fedilogue; ``` Set the environment variable ``` export DATABASE_URL="postgres://fedilogue:yoursecurepassword@localhost/fedilogue" ``` Change accordingly if your username, hostname and database are different. ``` cd fedilogue/fedilogue psql -U fedilogue -h localhost < tables.sql ``` ### Generate private and public key This is only necessary if you are receiving posts from a relay. ``` cd fedilogue mkdir -p keys openssl genrsa -out keys/private.pem 3072 openssl rsa -in keys/private.pem -pubout -out keys/public.pem ``` ### Configuration Fedilogue is configured by the `config.jsonc` file. Start by copying the `config.jsonc.sample` file to `config.jsonc` and edit the file with your use-case values. The configuration file is written in jsonc and has enclosed explanations that should be self-explanatory. Over time, all configuration will be done through the database. ## Starting Fedilogue ### Starting the retrieval daemon ``` cd fedilogue ./fedilogue ``` ### Subscribe to a relay Make sure that the `hostname` variable is set to a host that points to your fedilogue instance. Forward port SSL/443 to port 8042. ``` ./fedictl -follow https://relay.social.tigwali.fr/inbox ``` ### Starting the RestAPI service Start the RestAPI service to make the data accessible to external services, such as the web interface (which is currently not written). ``` cd restapi go build . ./restapi ``` For documentation on how the API is located [here](restapi/RESTAPI.md). ## Contact Ping me at [@fikran@thebag.social](https://thebag.social/@fikran)