Wallet/src/js/services/fingerprintService.js

95 lines
2.5 KiB
JavaScript
Raw Normal View History

'use strict';
2016-06-07 11:19:25 -03:00
angular.module('copayApp.services').factory('fingerprintService', function($log, gettextCatalog, configService, platformInfo) {
var root = {};
2016-06-07 11:19:25 -03:00
var _isAvailable = false;
2016-06-08 13:42:04 -03:00
if (platformInfo.isCordova) {
2016-06-07 11:19:25 -03:00
window.plugins.touchid = window.plugins.touchid || {};
window.plugins.touchid.isAvailable(
function(msg) {
_isAvailable = 'IOS';
},
function(msg) {
FingerprintAuth.isAvailable(function() {
_isAvailable = 'ANDROID';
}, function() {
_isAvailable = false;
});
});
};
var requestFinger = function(cb) {
try {
FingerprintAuth.show({
clientId: 'Copay',
clientSecret: 'hVu1NvCZOyUuGgr46bFL',
},
function(result) {
if (result.withFingerprint) {
$log.debug('Finger OK');
return cb();
} else if (result.withPassword) {
$log.debug("Finger: Authenticated with backup password");
return cb();
}
},
function(msg) {
$log.debug('Finger Failed:' + JSON.stringify(msg));
return cb(gettextCatalog.getString('Finger Scan Failed') + ': ' + msg.localizedDescription);
}
);
} catch (e) {
$log.warn('Finger Scan Failed:' + JSON.stringify(e));
return cb(gettextCatalog.getString('Finger Scan Failed'));
};
};
var requestTouchId = function(cb) {
try {
window.plugins.touchid.verifyFingerprint(
gettextCatalog.getString('Scan your fingerprint please'),
function(msg) {
$log.debug('Touch ID OK');
return cb();
},
function(msg) {
$log.debug('Touch ID Failed:' + JSON.stringify(msg));
return cb(gettextCatalog.getString('Touch ID Failed') + ': ' + msg.localizedDescription);
}
);
} catch (e) {
$log.debug('Touch ID Failed:' + JSON.stringify(e));
return cb(gettextCatalog.getString('Touch ID Failed'));
};
};
2016-06-07 11:19:25 -03:00
var isNeeded = function(client) {
if (!_isAvailable) return false;
var config = configService.getSync();
config.touchIdFor = config.touchIdFor || {};
2016-06-07 11:19:25 -03:00
return config.touchIdFor[client.credentials.walletId];
};
root.isAvailable = function(client) {
return _isAvailable;
};
root.check = function(client, cb) {
2016-06-07 11:19:25 -03:00
if (isNeeded(client)) {
2016-06-07 11:39:01 -03:00
$log.debug('FingerPrint Service:', _isAvailable);
2016-06-07 11:19:25 -03:00
if (_isAvailable == 'IOS')
return requestTouchId(cb);
else
return requestFinger(cb);
} else {
return cb();
}
};
return root;
});