56 lines
1.6 KiB
JavaScript
56 lines
1.6 KiB
JavaScript
|
/**
|
||
|
* @module util-identities
|
||
|
*/
|
||
|
|
||
|
'use strict'
|
||
|
|
||
|
const util = require('./util')
|
||
|
const debuglog = util.debuglog
|
||
|
const flatList = util.flatList
|
||
|
const execFileAsync = util.execFileAsync
|
||
|
|
||
|
/**
|
||
|
* @constructor
|
||
|
* @param {string} name - Name of the signing identity.
|
||
|
* @param {String} hash - SHA-1 hash of the identity.
|
||
|
*/
|
||
|
var Identity = module.exports.Identity = function (name, hash) {
|
||
|
this.name = name
|
||
|
this.hash = hash
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function returns a promise checking the indentity proposed and updates the identity option to a exact finding from results.
|
||
|
* @function
|
||
|
* @param {Object} opts - Options.
|
||
|
* @param {string} identity - The proposed identity.
|
||
|
* @returns {Promise} Promise.
|
||
|
*/
|
||
|
module.exports.findIdentitiesAsync = function (opts, identity) {
|
||
|
// Only to look for valid identities, excluding those flagged with
|
||
|
// CSSMERR_TP_CERT_EXPIRED or CSSMERR_TP_NOT_TRUSTED. Fixes #9
|
||
|
|
||
|
var args = [
|
||
|
'find-identity',
|
||
|
'-v'
|
||
|
]
|
||
|
if (opts.keychain) {
|
||
|
args.push(opts.keychain)
|
||
|
}
|
||
|
|
||
|
return execFileAsync('security', args)
|
||
|
.then(function (result) {
|
||
|
return result.split('\n').map(function (line) {
|
||
|
if (line.indexOf(identity) >= 0) {
|
||
|
var identityFound = line.substring(line.indexOf('"') + 1, line.lastIndexOf('"'))
|
||
|
var identityHashFound = line.substring(line.indexOf(')') + 2, line.indexOf('"') - 1)
|
||
|
debuglog('Identity:', '\n',
|
||
|
'> Name:', identityFound, '\n',
|
||
|
'> Hash:', identityHashFound)
|
||
|
return new Identity(identityFound, identityHashFound)
|
||
|
}
|
||
|
})
|
||
|
})
|
||
|
.then(flatList)
|
||
|
}
|