var express = require('express') , swig = require('swig') , path = require('path'); module.exports.app = function(port, coin, settings, winston) { var app = express(); app.use(express.static(path.join(__dirname, '/static'))); app.use(express.basicAuth(function(user, password) { var success = settings.webadmin.users[user] == password; if(success) winston.info('%s logged into webadmin', user); else winston.warn('Failed webadmin login as %s', user); return success; })); var tpl = swig.compileFile(path.join(__dirname, '/views/index.html')); app.get('/', function(req, res) { var accounts = []; coin.listAccounts(5, function(err, balances) { if(err) { winston.error('Tried to get account listing but failed.', err); res.send(500, 'Could not get account list'); return; } coin.listAccounts(0, function(err, unconfirmed_balances) { if(err) { winston.error('Tried to get account listing but failed.', err); res.send(500, 'Could not get account list'); return; } var total = 0; var total_unconfirmed = 0; for(var user in balances) { if(user !== "") accounts.push({ nick: user , balance: balances[user] , unconfirmed_balance: unconfirmed_balances[user] - balances[user] }); total += balances[user]; total_unconfirmed += unconfirmed_balances[user] - balances[user]; }; accounts.sort(function(a, b) { return b.balance - a.balance }); var body = tpl({ accounts: accounts , coin: settings.coin , total: total , total_unconfirmed: total_unconfirmed }); res.setHeader('Content-Type', 'text/html'); res.setHeader('Content-Length', Buffer.byteLength(body)); res.end(body); }); }); }); app.get('/user/:user', function(req, res) { var user = req.params.user; coin.listReceivedByAddress(settings.coin.min_confirmations, true, function(err, reply) { if(err) { winston.error('Tried to get address listing but failed.', err); res.send(500, 'Could not get address list'); return; } var addresses = []; for(var key in reply) { var address = reply[key]; if(address.account.toLowerCase() == user.toLowerCase()) { addresses.push({address: address.address, amount: address.amount}) } } var body = JSON.stringify({ addresses: addresses }); res.setHeader('Content-Type', 'text/json'); res.setHeader('Content-Length', Buffer.byteLength(body)); res.end(body); }); }); app.listen(port); }