4.5 KiB
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:
git clone https://github.com/yourusername/mayaspace-backend.git
cd mayaspace-backend
2. Install Dependencies
Install the required dependencies using npm:
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:
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.
POST /users
Request Body:
{
"username": "alice",
"displayName": "Alice",
"password": "password123"
}
User Login
Authenticate the user and get a JWT token.
POST /login
Request Body:
{
"username": "alice",
"password": "password123"
}
Response:
{
"token": "<JWT_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.
POST /users/:username/posts
Request Body:
{
"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.
GET /users/:username/posts
ActivityPub - Follow
This endpoint handles incoming follow activities for federated interactions.
POST /users/:username/inbox
Request Body:
{
"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:
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 <YOUR_JWT_TOKEN>" -d '{"content": "Hello, federated world!"}'
Get posts (Authenticated):
curl http://localhost:3000/users/alice/posts -H "Authorization: Bearer <YOUR_JWT_TOKEN>"
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.