mockforge-registry-server

Crates.iomockforge-registry-server
lib.rsmockforge-registry-server
version0.3.20
created_at2025-12-15 13:58:57.398286+00
updated_at2025-12-31 14:18:40.284497+00
descriptionPlugin registry server for MockForge
homepage
repository
max_upload_size
id1986140
size1,318,508
Ray Clanan (rclanan)

documentation

README

MockForge Registry Server

Central plugin registry backend for MockForge.

Overview

This crate implements the REST API server that powers the MockForge plugin marketplace. It handles:

  • Plugin search and discovery
  • Plugin publishing and versioning
  • User authentication and authorization
  • Reviews and ratings
  • Download statistics
  • Plugin storage (S3-compatible)

Architecture

┌─────────────────┐
│   CLI Client    │  mockforge plugin registry search ...
└────────┬────────┘
         │
         │ HTTPS
         │
┌────────▼────────────────────────────────────────┐
│          Registry Server (this crate)           │
│                                                  │
│  ┌────────────┐  ┌──────────┐  ┌────────────┐ │
│  │  Axum API  │──│   Auth   │──│  Storage   │ │
│  │  Handlers  │  │   (JWT)  │  │    (S3)    │ │
│  └─────┬──────┘  └──────────┘  └────────────┘ │
│        │                                        │
│  ┌─────▼───────────────────────────────────┐  │
│  │         PostgreSQL Database             │  │
│  │  (plugins, versions, users, reviews)    │  │
│  └─────────────────────────────────────────┘  │
└─────────────────────────────────────────────────┘

Quick Start

Prerequisites

  • Rust 1.75+
  • PostgreSQL 15+
  • S3-compatible storage (AWS S3, MinIO, etc.)

Development Setup

  1. Start dependencies:
# Using Docker Compose (recommended)
cd crates/mockforge-registry-server
docker-compose up -d

This starts:

  • PostgreSQL on port 5432
  • MinIO (S3) on ports 9000 (API) and 9001 (console)
  1. Configure environment:
# Create .env file
cat > .env <<EOF
DATABASE_URL=postgres://postgres:password@localhost:5432/mockforge_registry
JWT_SECRET=your-secret-key-change-me
S3_BUCKET=mockforge-plugins
S3_REGION=us-east-1
S3_ENDPOINT=http://localhost:9000
AWS_ACCESS_KEY_ID=minioadmin
AWS_SECRET_ACCESS_KEY=minioadmin
PORT=8080
EOF
  1. Run migrations:
cargo install sqlx-cli
sqlx migrate run
  1. Start server:
cargo run --package mockforge-registry-server

The server will start on http://localhost:8080.

Testing the API

# Health check
curl http://localhost:8080/health

# Register user
curl -X POST http://localhost:8080/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "username": "testuser",
    "email": "test@example.com",
    "password": "securepassword"
  }'

# Search plugins
curl -X POST http://localhost:8080/api/v1/plugins/search \
  -H "Content-Type: application/json" \
  -d '{
    "query": "auth",
    "page": 0,
    "per_page": 20
  }'

API Endpoints

Public Endpoints

  • GET /health - Health check
  • POST /api/v1/plugins/search - Search plugins
  • GET /api/v1/plugins/:name - Get plugin details
  • GET /api/v1/plugins/:name/versions/:version - Get version details
  • GET /api/v1/plugins/:name/reviews - Get plugin reviews
  • GET /api/v1/stats - Get registry statistics

Authentication Endpoints

  • POST /api/v1/auth/register - Register new user
  • POST /api/v1/auth/login - Login and get JWT token

Authenticated Endpoints (requires JWT)

  • POST /api/v1/plugins/publish - Publish new plugin version
  • DELETE /api/v1/plugins/:name/versions/:version/yank - Yank version
  • POST /api/v1/plugins/:name/reviews - Submit review

Admin Endpoints (requires admin role)

  • POST /api/v1/admin/plugins/:name/verify - Verify plugin (add badge)

Database Schema

See docs/PLUGIN_MARKETPLACE_IMPLEMENTATION.md for complete schema.

Key tables:

  • plugins - Plugin metadata
  • plugin_versions - Version information
  • users - User accounts
  • reviews - Plugin reviews
  • tags - Tag catalog
  • plugin_tags - Plugin-tag associations

Deployment

Docker

# Build image
docker build -t mockforge-registry:latest .

# Run container
docker run -p 8080:8080 \
  -e DATABASE_URL=... \
  -e JWT_SECRET=... \
  mockforge-registry:latest

Production Checklist

  • Set strong JWT_SECRET
  • Configure production database (RDS, etc.)
  • Set up S3 bucket with proper permissions
  • Enable HTTPS/TLS
  • Configure CORS for your domain
  • Set up monitoring and logging
  • Configure backups
  • Enable rate limiting
  • Set up CDN for plugin downloads

Development

Adding New Endpoints

  1. Add handler to src/handlers/
  2. Register route in src/routes.rs
  3. Add database queries if needed
  4. Write tests

Running Tests

cargo test --package mockforge-registry-server

Database Migrations

# Create new migration
sqlx migrate add <name>

# Run migrations
sqlx migrate run

# Revert last migration
sqlx migrate revert

Configuration

All configuration via environment variables:

Variable Required Default Description
DATABASE_URL Yes - PostgreSQL connection string
JWT_SECRET Yes - Secret for signing JWT tokens
S3_BUCKET No mockforge-plugins S3 bucket name
S3_REGION No us-east-1 S3 region
S3_ENDPOINT No - Custom S3 endpoint (MinIO, etc.)
PORT No 8080 Server port
MAX_PLUGIN_SIZE No 52428800 Max plugin size (50MB)
RATE_LIMIT_PER_MINUTE No 60 API rate limit

Security

  • JWT-based authentication
  • Password hashing with bcrypt
  • Checksum verification for uploads
  • Rate limiting
  • CORS configuration
  • SQL injection protection (SQLx)

License

MIT OR Apache-2.0

Commit count: 0

cargo fmt