901b02fbdca1b07e8e6713037aa08a5a13b61e76
Reviewed-on: #1
Fire Portal
Fire Portal is an experimental IPFS gateway for Handshake domains
Overview
This gateway allows you to access IPFS content through Handshake domain names. It resolves Handshake domains and maps them to their corresponding IPFS content identifiers (CIDs).
Features
- Resolves Handshake domains to IPFS content
- Uses HNSDoH.com for secure DNS resolution (DoH and DoT supported)
- Supports TXT records with
ipfs=andip6=prefixes for IPFS CIDs - Caches IPFS content for faster access
- Simple web interface for manual lookups
Installation
# Clone the repository
git clone https://git.woodburn.au/nathanwoodburn/fireportal.git
cd fireportal
# Install dependencies
npm install
# Configure environment variables
cp .env.example .env
# Edit .env with your settings
Configuration
Edit the .env file to configure:
- IPFS gateway settings
- Handshake resolution method (DoH, DoT, or local)
- HNSDoH.com settings
- Cache settings
- Server port
Resolution Methods
Fire Portal supports multiple methods for resolving Handshake domains:
doh: Uses DNS-over-HTTPS via HNSDoH.com (default, recommended)dot: Uses DNS-over-TLS via HNSDoH.com (TODO: Implement)local: Uses a local Handshake resolver
Supported TXT Record Formats
Fire Portal supports several TXT record formats for Handshake domains:
| Format | Example | Description |
|---|---|---|
ipfs=Hash... |
ipfs=QmdbRRQ2CYSFRUEQcUC7TtbsmsWU9411KaHiVJXZFscBNn |
Standard format with equals sign |
ipfs:Hash... |
ipfs:QmdbRRQ2CYSFRUEQcUC7TtbsmsWU9411KaHiVJXZFscBNn |
Alternative format with colon |
ip6=Hash... |
ip6=QmdbRRQ2CYSFRUEQcUC7TtbsmsWU9411KaHiVJXZFscBNn |
Legacy format (equivalent to ipfs=) |
Usage
# Start the server
npm start
Then access Handshake+IPFS content via:
http://localhost:3000/ipfs.act(replace "ipfs.act" with a Handshake domain)- Direct web interface at
http://localhost:3000
Testing
1. Basic Server Testing
# Start the server
npm start
# Verify the server is running
curl http://localhost:3000/api/status
# Should return: {"status":"online","version":"0.1.0"}
2. Testing with Sample Handshake Domains
You can test with known Handshake domains that have IPFS content:
http://localhost:3000/ipfs.act- Example
Host proxying
To proxy Handshake domains to IPFS, you can use the following nginx configuration:
server {
listen 80;
server_name _; # Catch-all for all domains
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Description
Languages
JavaScript
73.8%
HTML
21%
CSS
5.2%