diff --git a/www/js/controllers/wot-controllers.js b/www/js/controllers/wot-controllers.js index 2e3c8645cbce6135e9e9365fe764b0d19a36f2df..b7d9cd2c2b31cfbaa38f359d0c9eae164a11a8f6 100644 --- a/www/js/controllers/wot-controllers.js +++ b/www/js/controllers/wot-controllers.js @@ -162,7 +162,7 @@ angular.module('cesium.wot.controllers', ['cesium.services']) ; function WotLookupController($scope, $state, $q, $timeout, $focus, $location, $ionicPopover, $ionicHistory, - UIUtils, csConfig, csCurrency, csSettings, Device, BMA, csWallet, csWot) { + UIUtils, csConfig, csCurrency, csSettings, Device, BMA, csWallet, csWot, csCrypto) { 'ngInject'; var defaultSearchLimit = 10; @@ -293,10 +293,28 @@ function WotLookupController($scope, $state, $q, $timeout, $focus, $location, $i $scope.search.loading = true; $scope.search.type = 'text'; + + // If checksum is correct, search on simple pubkey + let pubkeyWithCk; + if (BMA.regexp.PUBKEY_WITH_CHECKSUM.test(text)) { + console.debug("[wot] Validating pubkey checksum... "); + let matches = BMA.regexp.PUBKEY_WITH_CHECKSUM.exec(text); + console.log(matches) + pubkey = matches[1]; + let checksum = matches[2]; + let expectedChecksum = csCrypto.util.pkChecksum(pubkey); + if (checksum === expectedChecksum) { + console.debug("[wot] checksum {" + checksum + "} valid for pubkey {" + pubkey + "}") + text = pubkey + pubkeyWithCk = pubkey + ':' + checksum + } + } + return csWot.search(text) .then(function(idties){ if ($scope.search.type !== 'text') return; // could have change - if ($scope.search.text.trim() !== text) return; // search text has changed before received response + originText = $scope.search.text.trim(); + if (originText !== text && originText !== pubkeyWithCk) return; // search text has changed before received response if ((!idties || !idties.length) && (BMA.regexp.PUBKEY.test(text) || BMA.regexp.PUBKEY_WITH_CHECKSUM.test(text))) { return BMA.uri.parse(text) diff --git a/www/js/services/wot-services.js b/www/js/services/wot-services.js index 87faa4c2c8144447df266a31f8b50e3aca06435e..da5e8b73378c0826f302f3d5c5e44061f3023d14 100644 --- a/www/js/services/wot-services.js +++ b/www/js/services/wot-services.js @@ -856,6 +856,15 @@ angular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.c return api.data.raisePromise.search(text, idties, 'pubkey') .then(function() { + // remove CS+ ids that match pubkey regex (considered attacks) - fix #959 + idties = idties.filter(function(idty) { + if (BMA.regexp.PUBKEY.test(text) || BMA.regexp.PUBKEY_WITH_CHECKSUM.test(text)) { + text_pk = text.split(':')[0] + return idty.pubkey == text_pk + } + return true; + }) + // Make sure to add uid to new results - fix #488 if (idties.length > lookupResultCount) { var idtiesWithoutUid = _.filter(idties, function(idty) {