Fix case-insensitive address search

This commit is contained in:
joeuhren
2019-10-17 21:51:13 -06:00
parent e645ee8635
commit 4508309173
3 changed files with 25 additions and 15 deletions
+2 -2
View File
@@ -68,7 +68,7 @@ app.use('/ext/getmoneysupply', function(req,res){
}); });
app.use('/ext/getaddress/:hash', function(req,res){ app.use('/ext/getaddress/:hash', function(req,res){
db.get_address(req.params.hash, function(address){ db.get_address(req.params.hash, false, function(address){
if (address) { if (address) {
var a_ext = { var a_ext = {
address: address.a_id, address: address.a_id,
@@ -85,7 +85,7 @@ app.use('/ext/getaddress/:hash', function(req,res){
}); });
app.use('/ext/getbalance/:hash', function(req,res){ app.use('/ext/getbalance/:hash', function(req,res){
db.get_address(req.params.hash, function(address){ db.get_address(req.params.hash, false, function(address){
if (address) { if (address) {
res.send((address.balance / 100000000).toString().replace(/(^-+)/mg, '')); res.send((address.balance / 100000000).toString().replace(/(^-+)/mg, ''));
} else { } else {
+21 -11
View File
@@ -20,14 +20,24 @@ var mongoose = require('mongoose')
, stex = require('./markets/stex') , stex = require('./markets/stex')
, coindesk = require('./apis/coindesk'); , coindesk = require('./apis/coindesk');
function find_address(hash, cb) { function find_address(hash, caseSensitive, cb) {
Address.findOne({a_id: { $regex: hash, $options: 'i' }}, function(err, address) { if (caseSensitive) {
if(address) { // faster search but only matches exact string including case
return cb(address); Address.findOne({a_id: hash}, function(err, address) {
} else { if (address)
return cb(); return cb(address);
} else
}); return cb();
});
} else {
// slower search but matches exact string ignoring case
Address.findOne({a_id: {$regex: '^' + hash + '$', $options: 'i'}}, function(err, address) {
if (address)
return cb(address);
else
return cb();
});
}
} }
function find_richlist(coin, cb) { function find_richlist(coin, cb) {
@@ -42,7 +52,7 @@ function find_richlist(coin, cb) {
function update_address(hash, txid, amount, type, cb) { function update_address(hash, txid, amount, type, cb) {
// Check if address exists // Check if address exists
find_address(hash, function(address) { find_address(hash, true, function(address) {
if (address) { if (address) {
// if coinbase (new coins PoW), update sent only and return cb. // if coinbase (new coins PoW), update sent only and return cb.
if ( hash == 'coinbase' ) { if ( hash == 'coinbase' ) {
@@ -308,8 +318,8 @@ module.exports = {
}); });
}, },
get_address: function(hash, cb) { get_address: function(hash, caseSensitive, cb) {
find_address(hash, function(address){ find_address(hash, caseSensitive, function(address){
return cb(address); return cb(address);
}); });
}, },
+2 -2
View File
@@ -93,7 +93,7 @@ function route_get_index(res, error) {
} }
function route_get_address(res, hash, count) { function route_get_address(res, hash, count) {
db.get_address(hash, function(address) { db.get_address(hash, false, function(address) {
if (address) { if (address) {
var txs = []; var txs = [];
var hashes = address.txs.reverse(); var hashes = address.txs.reverse();
@@ -252,7 +252,7 @@ router.post('/search', function(req, res) {
}); });
} }
} else { } else {
db.get_address(query, function(address) { db.get_address(query, false, function(address) {
if (address) { if (address) {
res.redirect('/address/' + address.a_id); res.redirect('/address/' + address.a_id);
} else { } else {