107 lines
3.1 KiB
Markdown
107 lines
3.1 KiB
Markdown
# 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](CONTAINER_INSTRUCTIONS.md).
|
|
|
|
Quick start:
|
|
```bash
|
|
# 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:
|
|
- Web interface: http://localhost:8000
|
|
- API endpoints:
|
|
- http://localhost:8000/api/slds
|
|
- http://localhost:8000/api/slds/{sld}
|
|
|
|
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)
|
|
|
|
## API Endpoints
|
|
|
|
- `/api/uploads` - Get all uploads
|
|
- `/api/slds` - Get all SLDs (Second Level Domains)
|
|
- `/api/slds/{sld}` - Get domains by SLD
|
|
- `/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
|
|
- `tld` - Filter by Top Level Domain
|
|
- `sld` - Filter by Second Level Domain
|
|
- `domain` - Search by domain name
|
|
|
|
Example: `/api/dns?record_type=A&tld=com&upload_id=upload_20250408120000`
|