2025-06-17 23:17:19 +10:00
2025-06-18 16:34:17 +10:00
2025-06-24 22:43:56 +10:00
2025-06-17 18:28:35 +10:00
2025-06-17 18:28:35 +10:00
2025-06-17 23:25:38 +10:00
2025-06-17 23:25:38 +10:00
2025-06-18 16:14:58 +10:00
2025-06-24 22:43:56 +10:00

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= and ip6= 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 ~^(?<domain>.+)$;


    location / {
        proxy_pass http://127.0.0.1:3000/$domain;

        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
IPFS Gateway for Handshake Domains
https://ipfs.hnshosting.au
Readme 2.8 MiB
Languages
JavaScript 73.8%
HTML 21%
CSS 5.2%