spaceapi-server/README.md
2025-06-13 23:11:59 +02:00

2.4 KiB

SpaceAPI Server

A Flask-based server implementation of the SpaceAPI specification, designed to provide real-time status information about a hackerspace. This server allows you to expose your space's status through a standardized API endpoint and update it using a secure token-based authentication system.

Features

  • Compliant with SpaceAPI v14 and v15 specifications
  • Secure token-based authentication for state updates
  • Docker support for easy deployment
  • Real-time space status updates
  • Configurable space information (name, location, contact details, etc.)
  • Production-ready with Gunicorn WSGI server

Prerequisites

  • Docker (for containerized deployment)
  • Python 3.11+ (for local development)

Environment Variables

The following environment variables need to be set:

  • SPACEAPI_TOKEN: A secret token used to authenticate state update requests
  • FLASK_APP: Set to app.py (automatically set in Docker)
  • FLASK_ENV: Set to production (automatically set in Docker)

Deployment with Docker

  1. Clone the repository:

    git clone <repository-url>
    cd spaceapi-server
    
  2. Create a .env file with your configuration:

    cp .env.example .env
    # Edit .env and set your SPACEAPI_TOKEN
    
  3. Build and run the Docker container:

    docker build -t spaceapi-server .
    docker run -p 5000:5000 --env-file .env spaceapi-server
    

The server will be available at http://localhost:5000.

API Endpoints

GET /

Returns the current space status in SpaceAPI format.

POST /state

Updates the space status. Requires authentication using the X-SpaceAPI-Token header.

Example request:

curl -X POST http://localhost:5000/state \
  -H "Content-Type: application/json" \
  -H "X-SpaceAPI-Token: your-token-here" \
  -d '{"open": true}'

Local Development

  1. Create a virtual environment:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  2. Install dependencies:

    pip install -r requirements.txt
    
  3. Set up environment variables and run the server:

    # For development (using Flask's development server)
    export SPACEAPI_TOKEN=your-token-here
    flask run
    
    # For production-like environment (using Gunicorn)
    export SPACEAPI_TOKEN=your-token-here
    gunicorn --bind 0.0.0.0:5000 --workers 1 app:app
    

License

[Add your license information here]