From 499891adb2ee90bdc14de4527302e1d964b25589 Mon Sep 17 00:00:00 2001 From: sneedgroup-holder Date: Wed, 6 Nov 2024 19:41:50 +0000 Subject: [PATCH] Add README.md --- README.md | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fa7648 --- /dev/null +++ b/README.md @@ -0,0 +1,174 @@ +# Mayaspace Backend + +Mayaspace Backend is a federated social network backend implementation that follows the **ActivityPub** protocol. It includes user registration, password authentication using JWT tokens, post creation, and following activities. It uses **SQLite** via the `quick.db` library for data storage. + +## Features + +- **Federated**: Supports ActivityPub protocol to allow federated communication with other ActivityPub-compatible platforms. +- **Password Authentication**: User authentication with password hashing (using bcrypt) and JWT tokens. +- **SQLite Backend**: Data storage using SQLite via `quick.db`. +- **RESTful API**: Basic routes for user registration, login, post creation, and followers management. + +## Technologies + +- **Node.js** for backend. +- **Express.js** for routing and middleware. +- **ActivityPub-Express** for ActivityPub protocol handling. +- **quick.db** for persistent SQLite storage. +- **bcryptjs** for password hashing. +- **jsonwebtoken** for user authentication and token management. +- **uuid** for unique post IDs. +- **node-fetch** for making federated requests. + +## Installation and Setup + +Follow these steps to set up the Mayaspace Backend locally: + +### Prerequisites + +- Install **Node.js** (v14.0.0 or above). +- Ensure **npm** is installed. + +### 1. Clone the Repository + +First, clone the project to your local machine: + +```bash +git clone https://github.com/yourusername/mayaspace-backend.git +cd mayaspace-backend +``` + +### 2. Install Dependencies +Install the required dependencies using npm: + +```bash +npm install +``` + +This will install the following dependencies: + +activitypub-express: For handling ActivityPub protocol. +bcryptjs: For securely hashing passwords. +body-parser: For parsing incoming request bodies. +jsonwebtoken: For managing JWT tokens. +quick.db: For SQLite storage. +uuid: For generating unique post IDs. +node-fetch: For federated network communication. +express: For building the API server. + +### 3. Run the Server +Start the backend server: + +```bash +npm start +``` + +This will run the backend on http://localhost:3000. + +### 4. API Endpoints +Here are the main API endpoints available: + +User Registration +Create a new user (actor) with a username, display name, and password. + +```bash +POST /users +``` + +Request Body: + +```json +{ + "username": "alice", + "displayName": "Alice", + "password": "password123" +} +``` + +#### User Login +Authenticate the user and get a JWT token. + +```bash +POST /login +``` + +Request Body: + +```json +{ + "username": "alice", + "password": "password123" +}``` + +Response: + +```json +{ + "token": "" +}``` +#### Create a Post (Status Update) +Create a post (note) for the authenticated user. Authentication is required using the JWT token in the Authorization header. + +```bash +POST /users/:username/posts +```` +Request Body: + +```json +{ + "content": "Hello, federated world!" +} +``` +#### Get User's Posts +Fetch posts for the authenticated user. Authentication is required using the JWT token in the Authorization header. + +```bash +GET /users/:username/posts +``` +#### ActivityPub - Follow +This endpoint handles incoming follow activities for federated interactions. + +```bash +POST /users/:username/inbox +Request Body: +``` + +```json +{ + "type": "Follow", + "actor": { + "id": "http://example.com/users/bob" + } +} +``` + +### 5. Testing the API +To test the API, you can use Postman or cURL to make requests. + +Here are some example cURL commands to test the basic functionality: + +### Create a new user: +```bash +curl -X POST http://localhost:3000/users -H "Content-Type: application/json" -d '{"username": "alice", "displayName": "Alice", "password": "password123"}'``` + +#### Login to get a token: +```bash +curl -X POST http://localhost:3000/login -H "Content-Type: application/json" -d '{"username": "alice", "password": "password123"}'``` + +#### Create a post (Authenticated): +```bash +curl -X POST http://localhost:3000/users/alice/posts -H "Content-Type: application/json" -H "Authorization: Bearer " -d '{"content": "Hello, federated world!"}' +``` + +#### Get posts (Authenticated): +```bash +curl http://localhost:3000/users/alice/posts -H "Authorization: Bearer " +``` +### 6. Federated Interaction +If you want to integrate with other federated servers, you can send ActivityPub requests to follow users on other servers or receive activities through the /users/:username/inbox endpoint. + +### License +The license is the SPL-R5, see the file named "LICENSE" for details. + +### Contributing +Feel free to contribute to this project. Fork the repository, make changes, and submit pull requests to improve Mayaspace Backend. \ No newline at end of file