feat: Update path to not need /hns
This commit is contained in:
132
server.js
132
server.js
@@ -13,9 +13,134 @@ const app = express();
|
||||
app.use(cors());
|
||||
app.use(morgan('dev'));
|
||||
app.use(express.json());
|
||||
|
||||
// Define reserved paths that should not be treated as Handshake domains
|
||||
const RESERVED_PATHS = [
|
||||
'api',
|
||||
'hns',
|
||||
'public',
|
||||
'assets',
|
||||
'static',
|
||||
'images',
|
||||
'css',
|
||||
'js',
|
||||
'favicon.ico'
|
||||
];
|
||||
|
||||
// Serve static files
|
||||
app.use(express.static(path.join(__dirname, 'public')));
|
||||
|
||||
// Routes
|
||||
// Status endpoint
|
||||
app.get('/api/status', (req, res) => {
|
||||
res.json({ status: 'online', version: '0.1.1' });
|
||||
});
|
||||
|
||||
// New route: Handle root domain requests with direct domain format
|
||||
app.get('/:domain', async (req, res, next) => {
|
||||
const domain = req.params.domain;
|
||||
|
||||
// Skip this handler for reserved paths
|
||||
if (RESERVED_PATHS.includes(domain)) {
|
||||
return next();
|
||||
}
|
||||
|
||||
try {
|
||||
console.log(`Processing request for domain root: ${domain}`);
|
||||
|
||||
// Resolve Handshake domain to get IPFS CID
|
||||
const cid = await resolveHandshake(domain);
|
||||
|
||||
if (!cid) {
|
||||
console.warn(`No IPFS CID found for domain: ${domain}`);
|
||||
return res.status(404).json({
|
||||
error: 'Domain not found or has no IPFS record',
|
||||
domain: domain
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`Resolved ${domain} to IPFS CID: ${cid}`);
|
||||
|
||||
// Fetch content from IPFS (root path)
|
||||
const content = await fetchFromIpfs(cid, '');
|
||||
|
||||
if (!content) {
|
||||
return res.status(404).json({
|
||||
error: 'Content not found on IPFS network',
|
||||
cid: cid
|
||||
});
|
||||
}
|
||||
|
||||
// Set appropriate content type
|
||||
if (content.mimeType) {
|
||||
res.setHeader('Content-Type', content.mimeType);
|
||||
}
|
||||
|
||||
// Return the content
|
||||
res.send(content.data);
|
||||
} catch (error) {
|
||||
console.error('Error handling request:', error);
|
||||
res.status(500).json({
|
||||
error: 'Server error processing request',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// New route: Handle domain requests with subpaths using direct domain format
|
||||
app.get('/:domain/*', async (req, res, next) => {
|
||||
const domain = req.params.domain;
|
||||
|
||||
// Skip this handler for reserved paths
|
||||
if (RESERVED_PATHS.includes(domain)) {
|
||||
return next();
|
||||
}
|
||||
|
||||
try {
|
||||
const subPath = req.params[0] || '';
|
||||
|
||||
console.log(`Processing request for domain: ${domain}, path: ${subPath}`);
|
||||
|
||||
// Resolve Handshake domain to get IPFS CID
|
||||
const cid = await resolveHandshake(domain);
|
||||
|
||||
if (!cid) {
|
||||
console.warn(`No IPFS CID found for domain: ${domain}`);
|
||||
return res.status(404).json({
|
||||
error: 'Domain not found or has no IPFS record',
|
||||
domain: domain
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`Resolved ${domain} to IPFS CID: ${cid}`);
|
||||
|
||||
// Fetch content from IPFS
|
||||
const content = await fetchFromIpfs(cid, subPath);
|
||||
|
||||
if (!content) {
|
||||
return res.status(404).json({
|
||||
error: 'Content not found on IPFS network',
|
||||
cid: cid,
|
||||
path: subPath
|
||||
});
|
||||
}
|
||||
|
||||
// Set appropriate content type
|
||||
if (content.mimeType) {
|
||||
res.setHeader('Content-Type', content.mimeType);
|
||||
}
|
||||
|
||||
// Return the content
|
||||
res.send(content.data);
|
||||
} catch (error) {
|
||||
console.error('Error handling request:', error);
|
||||
res.status(500).json({
|
||||
error: 'Server error processing request',
|
||||
message: error.message
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Routes (keeping original routes for backward compatibility)
|
||||
app.get('/hns/:domain/*', async (req, res) => {
|
||||
try {
|
||||
const domain = req.params.domain;
|
||||
@@ -109,11 +234,6 @@ app.get('/hns/:domain', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// Status endpoint
|
||||
app.get('/api/status', (req, res) => {
|
||||
res.json({ status: 'online', version: '0.1.0' });
|
||||
});
|
||||
|
||||
// Start server
|
||||
app.listen(PORT, () => {
|
||||
console.log(`Fire Portal server running on port ${PORT}`);
|
||||
|
||||
Reference in New Issue
Block a user