No description
Find a file
2025-04-09 20:03:38 +02:00
templates CHANGE position of API information 2025-04-09 20:03:38 +02:00
.dockerignore fresh start 2025-04-08 23:41:24 +02:00
.gitignore fresh start 2025-04-08 23:41:24 +02:00
CONTAINER_INSTRUCTIONS.md fresh start 2025-04-08 23:41:24 +02:00
Dockerfile fresh start 2025-04-08 23:41:24 +02:00
main.py ADD export function to tables 2025-04-09 19:59:19 +02:00
README.md ADD base domain information on Index page and API endpoint 2025-04-09 19:54:24 +02:00
requirements.txt fresh start 2025-04-08 23:41:24 +02:00
run_container.sh fresh start 2025-04-08 23:41:24 +02:00

Domain and DNS Management System

A FastAPI application that allows users to upload CSV files containing domain and DNS records, storing them in a database and displaying them via an interactive UI and API interface.

Features

  • File upload system with detailed upload history, including ability to delete uploads
  • Main SLD view with filtering by upload and time
  • Comprehensive DNS Records view with multi-faceted filtering
  • TinyDB database storage with precise timestamps for data persistence
  • Deduplicated DNS records (by domain, class, and type) and domains (by FQDN) showing most recent entries
  • Option to view only records from a specific upload
  • Clean, simplified interface showing only the latest records
  • Server-side filtering by upload, record type, class, TLD, and SLD (no JavaScript needed)
  • Provides comprehensive RESTful API endpoints for programmatic access
  • Responsive design that works on desktop and mobile

Containerized Deployment

The application can be easily deployed in a secure rootless container using Podman or Docker.

For detailed container instructions, see CONTAINER_INSTRUCTIONS.md.

Quick start:

# Make the run script executable
chmod +x run_container.sh

# Run the container (automatically uses podman if available, falls back to docker)
./run_container.sh

Setup with Virtual Environment (Development)

  1. Create a virtual environment:

    python -m venv venv
    
  2. Activate the virtual environment:

    • On Windows:
      venv\Scripts\activate
      
    • On macOS/Linux:
      source venv/bin/activate
      
  3. Install dependencies:

    pip install -r requirements.txt
    
  4. Run the application:

    python main.py
    
  5. Access the application:

  6. Deactivate the virtual environment when finished:

    deactivate
    

CSV File Format

The application accepts CSV files with the following format:

domain.example.com,3600,IN,A,192.168.1.1
domain.example.com,3600,IN,MX,10 mail.example.com.
subdomain.example.com,3600,IN,CNAME,domain.example.com.

Where columns are:

  1. Domain name (fully qualified domain name)
  2. TTL (Time To Live) in seconds
  3. Record Class (usually IN for Internet)
  4. Record Type (A, AAAA, MX, CNAME, TXT, etc.)
  5. Record Data (IP address, hostname, or other data depending on record type)

Domain Base Name Detection

The application includes functionality to identify base domains from fully qualified domain names, including handling of multi-part TLDs like ".co.uk" or ".com.au".

Multi-Part TLD List

The application uses a hardcoded list of common multi-part TLDs to correctly extract base domains (e.g., "example.co.uk" from "mail.example.co.uk").

This list can be found in main.py as MULTI_PART_TLDS.

Updating the TLD List

To ensure accurate domain parsing, you should periodically update the multi-part TLD list. The best sources for this information are:

  1. Public Suffix List (PSL): The most comprehensive and authoritative source

  2. IANA's TLD Database: The official registry of top-level domains

  3. Commercial Domain Registrars: Often provide lists of available TLDs

    • Examples: GoDaddy, Namecheap, etc.

For the most accurate and comprehensive implementation, consider implementing a parser for the Public Suffix List or using a library that maintains this list (e.g., publicsuffix2 for Python).

API Endpoints

  • /api/uploads - Get all uploads
  • /api/domains - Get all domains
  • /api/base-domains - Get only unique base domains (e.g., example.com, example.co.uk) with simplified response format
  • /api/domains/{domain} - Get domains by name
  • /api/dns - Get all DNS records
  • /api/dns/types - Get unique values for filters

Query Parameters

You can filter the API results using the following query parameters:

  • upload_id - Filter by specific upload
  • record_type - Filter by DNS record type
  • record_class - Filter by DNS record class
  • domain - Search by domain name
  • base_domains_only - Only show base domains (e.g., example.com not mail.example.com)
  • deduplicate - For DNS records, control whether to show all records or deduplicate

Examples:

  • /api/domains?base_domains_only=true - Show only base domains
  • /api/base-domains - Get a simplified list of unique base domains
  • /api/dns?record_type=A&domain=example.com&deduplicate=false - Show all A records for example.com without deduplication

Response Format Examples

  1. Base Domains Endpoint (/api/base-domains):
[
  {
    "domain": "example.com",
    "timestamp": "2025-04-08T12:00:00"
  },
  {
    "domain": "example.co.uk",
    "timestamp": "2025-04-08T12:00:00"
  }
]