From 4508309173f54a334a01211e7f6b5d882a96e5ad Mon Sep 17 00:00:00 2001 From: joeuhren Date: Thu, 17 Oct 2019 21:51:13 -0600 Subject: [PATCH] Fix case-insensitive address search --- app.js | 4 ++-- lib/database.js | 32 +++++++++++++++++++++----------- routes/index.js | 4 ++-- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/app.js b/app.js index 9c16850..074fabe 100644 --- a/app.js +++ b/app.js @@ -68,7 +68,7 @@ app.use('/ext/getmoneysupply', 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) { var a_ext = { address: address.a_id, @@ -85,7 +85,7 @@ app.use('/ext/getaddress/: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) { res.send((address.balance / 100000000).toString().replace(/(^-+)/mg, '')); } else { diff --git a/lib/database.js b/lib/database.js index fe366b9..9b8d2e4 100644 --- a/lib/database.js +++ b/lib/database.js @@ -20,14 +20,24 @@ var mongoose = require('mongoose') , stex = require('./markets/stex') , coindesk = require('./apis/coindesk'); -function find_address(hash, cb) { - Address.findOne({a_id: { $regex: hash, $options: 'i' }}, function(err, address) { - if(address) { - return cb(address); - } else { - return cb(); - } - }); +function find_address(hash, caseSensitive, cb) { + if (caseSensitive) { + // faster search but only matches exact string including case + Address.findOne({a_id: hash}, function(err, address) { + if (address) + 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) { @@ -42,7 +52,7 @@ function find_richlist(coin, cb) { function update_address(hash, txid, amount, type, cb) { // Check if address exists - find_address(hash, function(address) { + find_address(hash, true, function(address) { if (address) { // if coinbase (new coins PoW), update sent only and return cb. if ( hash == 'coinbase' ) { @@ -308,8 +318,8 @@ module.exports = { }); }, - get_address: function(hash, cb) { - find_address(hash, function(address){ + get_address: function(hash, caseSensitive, cb) { + find_address(hash, caseSensitive, function(address){ return cb(address); }); }, diff --git a/routes/index.js b/routes/index.js index d1ae74a..45fc4c1 100644 --- a/routes/index.js +++ b/routes/index.js @@ -93,7 +93,7 @@ function route_get_index(res, error) { } function route_get_address(res, hash, count) { - db.get_address(hash, function(address) { + db.get_address(hash, false, function(address) { if (address) { var txs = []; var hashes = address.txs.reverse(); @@ -252,7 +252,7 @@ router.post('/search', function(req, res) { }); } } else { - db.get_address(query, function(address) { + db.get_address(query, false, function(address) { if (address) { res.redirect('/address/' + address.a_id); } else {