-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathserver.js
More file actions
55 lines (44 loc) · 1.86 KB
/
server.js
File metadata and controls
55 lines (44 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const _ = require('lodash');
const dns = require('native-dns');
const namesrv = dns.createServer();
const logger = require('morgan');
const app = new (require('express'))();
const webpack = require('webpack');
const webpackDevMiddleware = require('webpack-dev-middleware');
const webpackHotMiddleware = require('webpack-hot-middleware');
const config = require('./webpack.config');
const compiler = webpack(config);
const ports = {web: 3000, dns: 1053};
const BlockchainDNS = artifacts.require("BlockchainDNS");
app.use(logger('dev'));
app.use(webpackDevMiddleware(compiler, {noInfo: true, publicPath: config.output.publicPath}));
app.use(webpackHotMiddleware(compiler));
app.get('/', (req, res) => res.sendFile(__dirname + '/server/index.html'));
module.exports = async () => {
const contract = await BlockchainDNS.deployed();
const networkId = await new Promise((resolve, reject) =>
web3.version.getNetwork((err, res) => err ? reject(err) : resolve(res)));
app.get('/init', (req, res) => res.json({
networkId,
contract: contract.address,
abi: contract.abi
}));
app.listen(ports.web, (error) => {
if (error) throw(error);
console.log('Web server working at port', ports.web);
});
namesrv.on('request', async (req, res) => {
let name = req.question[0].name;
let count = (await contract.domainServersLen(name)).toNumber();
let r = _.range(count).map((_, i) => contract.domainServer(name, i));
for (let addr of await Promise.all(r)) {
res.answer.push(dns.A({ name: name, address: addr[1].toString(), ttl: 600 }));
}
res.send();
});
namesrv.on('error', (err, buff, req, res) => console.log(err.stack));
namesrv.serve(ports.dns, (error) => {
if (error) throw(error);
console.log('Name server working at port', ports.dns);
});
}