No description
Find a file
2025-05-13 15:14:29 +02:00
docs Initial commit 2025-04-02 06:46:59 +02:00
src/anonchat Remove email functionality 2025-05-13 15:14:29 +02:00
tests Initial commit 2025-04-02 06:46:59 +02:00
.dockerignore Initial commit 2025-04-02 06:46:59 +02:00
.env.dev Refactor init and readme 2025-04-07 09:14:05 +02:00
.gitignore Unignore poetry.lock 2025-04-11 20:30:08 +02:00
docker-compose.yml Make delete delay tweakable 2025-04-02 19:42:09 +02:00
Dockerfile Initial commit 2025-04-02 06:46:59 +02:00
entrypoint.sh Inquiry closing 2025-04-02 18:40:57 +02:00
fly.toml update misc 2025-04-11 15:44:18 +02:00
LICENSE.txt Relicense 2025-04-02 19:53:22 +02:00
poetry.lock Unignore poetry.lock 2025-04-11 20:30:08 +02:00
pyproject.toml update misc 2025-04-11 15:44:18 +02:00
README.md Refactor init and readme 2025-04-07 09:14:05 +02:00

anonchat

A simple Flask-based web application for anonymous inquiries or messages, designed for easy deployment and management.

Features

  • Anonymous Inquiries: Allows users to submit inquiries without revealing their identity.
  • Admin Interface: Secure area for administrators to view and manage inquiries.
  • Webhook Notifications: Optionally sends notifications to a specified URL upon new inquiry submissions.
  • Automatic Data Deletion: Periodically deletes inquiries older than a configurable duration (default: 48 hours) to maintain privacy.
  • Rate Limiting: Protects against abuse by limiting the number of requests from a single IP address.
  • CSRF Protection: Implemented using Flask-WTF to prevent cross-site request forgery attacks.
  • Configurable: Easily configured using environment variables.
  • Containerized: Ready for deployment using Docker and Docker Compose.
  • Database Migrations: Simple migration system managed via Flask CLI commands.
  • Optional Sentry Integration: Supports error tracking with Sentry.

Technology Stack

  • Backend: Python 3.11+, Flask
  • Database: PostgreSQL (recommended) or SQLite (default) via Flask-SQLAlchemy
  • Session Management: Redis (recommended) or Filesystem via Flask-Session
  • Rate Limiting: Redis via Flask-Limiter
  • Task Scheduling: Flask-APScheduler
  • Password Hashing: Argon2 via argon2-cffi
  • WSGI Server: Gunicorn
  • Dependency Management: Poetry
  • Containerization: Docker, Docker Compose
  • Deployment: Configured for Fly.io (optional)

Configuration

The application is configured via environment variables. You can set these in a .env file in the project root or directly in your deployment environment.

Required:

  • SECRET_KEY: A long, random string used for session signing and security. Generate one using python -c 'import secrets; print(secrets.token_hex(24))'.
  • DATABASE_URL: The connection string for your database (e.g., postgresql://user:password@host:port/dbname or sqlite:///instance/anonchat.db).
  • REDIS_URL: The connection string for your Redis instance (e.g., redis://localhost:6379/0). Used for sessions (if SESSION_TYPE=redis) and rate limiting.
  • ADMIN_PASSWORD: The password for the admin user. Set this on first run or when needing to reset.

Optional:

  • SITE_TITLE: The title displayed on the website (default: AnonChat).
  • WEBHOOK_ENABLED: Set to true to enable webhook notifications (default: false).
  • WEBHOOK_URL: The URL to send webhook notifications to.
  • WEBHOOK_SECRET: A secret key to sign webhook payloads (recommended if webhooks are enabled).
  • ADMIN_USERNAME: The username for the admin user (default: admin).
  • ADMIN_FORCE_RESET: Set to true to force reset the admin password on startup using ADMIN_PASSWORD.
  • AUTO_DELETE_HOURS: The number of hours after which inquiries are automatically deleted (default: 48).
  • RATELIMIT_STORAGE_URI: Overrides REDIS_URL specifically for rate limiting.
  • BEHIND_PROXY: Set to true if the application is running behind a reverse proxy (e.g., Nginx, Traefik) to correctly identify client IPs (default: false).
  • SESSION_TYPE: redis (default) or filesystem.
  • SESSION_FILE_DIR: Directory for filesystem sessions (if SESSION_TYPE=filesystem, default: /dev/shm/flask_session).
  • SENTRY_DSN: Your Sentry DSN to enable error tracking.

Setup and Installation

Prerequisites:

  • Python 3.11+
  • Poetry
  • Docker & Docker Compose (Recommended for ease of setup)
  • Redis Server (if using Redis for sessions/rate limiting)
  • PostgreSQL Server (if using PostgreSQL)

1. Clone the Repository:

git clone <repository-url>
cd anonchat

2. Using Docker (Recommended):

This is the easiest way to get started.

  • Create a .env file: Copy .env.example (if it exists) or create a new .env file and fill in the required environment variables (see Configuration section). Pay special attention to SECRET_KEY, DATABASE_URL, REDIS_URL, and ADMIN_PASSWORD.
  • Build and Run:
    docker-compose up --build -d
    

The application should now be accessible at http://localhost:5000 (or the port mapped in docker-compose.yml).

3. Local Development (Without Docker):

  • Install Dependencies:
    poetry install
    
  • Set Environment Variables: Create a .env file in the project root and define the necessary variables (see Configuration).
  • Ensure Services are Running: Make sure your PostgreSQL (if used) and Redis servers are running and accessible based on your .env configuration.
  • Run the Development Server:
    poetry run start
    

The application should be running at http://localhost:5000.

Running the Application

  • Docker: Use docker-compose up -d to start and docker-compose down to stop.
  • Local: Use poetry run start for the development server. For production-like environments without Docker, use gunicorn:
    # Example gunicorn command (adjust workers as needed)
    poetry run gunicorn --workers 4 --bind 0.0.0.0:5000 "anonchat:app"
    

Deployment

This application includes configuration files for deployment:

  • Dockerfile: Defines the container image.
  • docker-compose.yml: For local multi-container setups (app, db, redis).
  • fly.toml: Configuration for deploying to Fly.io.

Refer to the specific platform's documentation for deployment steps using these files. Ensure all necessary environment variables are set in your deployment environment.

License

This project is licensed under the 0BSD license - see the LICENSE.txt file for details.