94 lines
2.7 KiB
JavaScript
94 lines
2.7 KiB
JavaScript
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);
|
|
}
|