@ . , , ( foo/bar, ):
var cached;
module.exports = function fetchGoogleCerts(options, callback) {
var now = Date.now();
if (ttl > now && cached) {
callback(null, cached);
return;
}
request({
uri: options.certsUrl || defaultCertsUrl,
strictSSL: true
}, function (err, response, body) {
var error, certs;
if (!err && response.statusCode === 200) {
certs = jsonParse(body);
if (!certs) {
callback('parse_error', null);
return;
}
cached = certs;
callback(null, cached);
} else {
error = {
error: err,
statusCode: response.statusCode
};
log.error(error, 'error fetching google certs');
callback(error);
}
});
}
};
:
fetchGoogleCerts = require('./google-certs.js'),
module.exports = function fetchCertsAndDecodeIdToken(token, options, callback) {
fetchGoogleCerts(options, function (err, googleCerts) {
if (err) {
callback({
errorCode: codes.io_error,
errorMsg: 'Unable to fetch Google certificates',
error: err
});
return;
}
decodeAndVerifyGoogleIdToken(googleCerts, token, options, callback);
});
};
, callback .
, , EventEmitter, , . , .