132 lines
3.3 KiB
JavaScript
132 lines
3.3 KiB
JavaScript
const express = require('express');
|
|
const router = express.Router();
|
|
const { authenticateUser, isValidDomain } = require('../middleware/auth');
|
|
const {
|
|
generateDomainVerificationToken,
|
|
verifyDomainOwnership,
|
|
verifyAethexDomain,
|
|
getVerificationStatus
|
|
} = require('../utils/domainVerification');
|
|
|
|
/**
|
|
* POST /api/passport/domain/request-verification
|
|
* Request domain verification token
|
|
*/
|
|
router.post('/request-verification', authenticateUser, async (req, res) => {
|
|
try {
|
|
const { domain } = req.body;
|
|
|
|
// Validate input
|
|
if (!domain) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Domain is required'
|
|
});
|
|
}
|
|
|
|
if (!isValidDomain(domain)) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Invalid domain format. Please enter a valid domain (e.g., example.com or sub.example.com)'
|
|
});
|
|
}
|
|
|
|
// Generate verification token
|
|
const verification = await generateDomainVerificationToken(req.user.id, domain);
|
|
|
|
res.json({
|
|
success: true,
|
|
verification: verification
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Request verification error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Failed to generate verification token. Please try again.'
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* POST /api/passport/domain/verify
|
|
* Verify domain ownership via DNS or blockchain
|
|
*/
|
|
router.post('/verify', authenticateUser, async (req, res) => {
|
|
try {
|
|
const { domain, walletAddress } = req.body;
|
|
|
|
// Validate input
|
|
if (!domain) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Domain is required'
|
|
});
|
|
}
|
|
|
|
if (!isValidDomain(domain)) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Invalid domain format'
|
|
});
|
|
}
|
|
|
|
// Check if it's a .aethex domain (blockchain verification)
|
|
let result;
|
|
if (domain.endsWith('.aethex')) {
|
|
if (!walletAddress) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
error: 'Wallet address is required for .aethex domain verification'
|
|
});
|
|
}
|
|
|
|
result = await verifyAethexDomain(req.user.id, domain, walletAddress);
|
|
} else {
|
|
// DNS verification for traditional domains
|
|
result = await verifyDomainOwnership(req.user.id, domain);
|
|
}
|
|
|
|
if (result.verified) {
|
|
res.json({
|
|
success: true,
|
|
verified: true,
|
|
domain: result.domain,
|
|
verifiedAt: result.verifiedAt
|
|
});
|
|
} else {
|
|
res.status(400).json({
|
|
success: false,
|
|
verified: false,
|
|
error: result.error
|
|
});
|
|
}
|
|
|
|
} catch (error) {
|
|
console.error('Verify domain error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
verified: false,
|
|
error: 'Verification failed. Please try again.'
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* GET /api/passport/domain/status
|
|
* Get current verification status for user
|
|
*/
|
|
router.get('/status', authenticateUser, async (req, res) => {
|
|
try {
|
|
const status = await getVerificationStatus(req.user.id);
|
|
res.json(status);
|
|
} catch (error) {
|
|
console.error('Get status error:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
error: 'Failed to get verification status'
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|