fix: more linting

This commit is contained in:
Richard Schneider 2017-12-07 00:16:38 +13:00
parent 409a9990cd
commit 7c44c91788
5 changed files with 55 additions and 46 deletions

View File

@ -1,11 +1,10 @@
'use strict' 'use strict'
const async = require('async') const async = require('async')
const sanitize = require("sanitize-filename") const sanitize = require('sanitize-filename')
const forge = require('node-forge') const forge = require('node-forge')
const deepmerge = require('deepmerge') const deepmerge = require('deepmerge')
const crypto = require('crypto') const crypto = require('libp2p-crypto')
const libp2pCrypto = require('libp2p-crypto')
const util = require('./util') const util = require('./util')
const CMS = require('./cms') const CMS = require('./cms')
const DS = require('interface-datastore') const DS = require('interface-datastore')
@ -32,7 +31,6 @@ const defaultOptions = {
function validateKeyName (name) { function validateKeyName (name) {
if (!name) return false if (!name) return false
return name === sanitize(name.trim()) return name === sanitize(name.trim())
} }
@ -44,6 +42,7 @@ function validateKeyName (name) {
* *
* @param {function(Error)} callback - The caller * @param {function(Error)} callback - The caller
* @param {string | Error} err - The error * @param {string | Error} err - The error
* @returns {undefined}
*/ */
function _error (callback, err) { function _error (callback, err) {
const min = 200 const min = 200
@ -55,6 +54,9 @@ function _error(callback, err) {
/** /**
* Converts a key name into a datastore name. * Converts a key name into a datastore name.
*
* @param {string} name
* @returns {DS.Key}
*/ */
function DsName (name) { function DsName (name) {
return new DS.Key('/' + name) return new DS.Key('/' + name)
@ -62,6 +64,9 @@ function DsName (name) {
/** /**
* Converts a datastore name into a key name. * Converts a datastore name into a key name.
*
* @param {DS.Key} name - A datastore name
* @returns {string}
*/ */
function KsName (name) { function KsName (name) {
return name.toString().slice(1) return name.toString().slice(1)
@ -123,6 +128,7 @@ class Keychain {
} }
const dsname = DsName(name) const dsname = DsName(name)
self.store.has(dsname, (err, exists) => { self.store.has(dsname, (err, exists) => {
if (err) return _error(callback, err)
if (exists) return _error(callback, `Key '${name}' already exists'`) if (exists) return _error(callback, `Key '${name}' already exists'`)
switch (type.toLowerCase()) { switch (type.toLowerCase()) {
@ -133,14 +139,14 @@ class Keychain {
forge.pki.rsa.generateKeyPair({bits: size, workers: -1}, (err, keypair) => { forge.pki.rsa.generateKeyPair({bits: size, workers: -1}, (err, keypair) => {
if (err) return _error(callback, err) if (err) return _error(callback, err)
const pem = forge.pki.encryptRsaPrivateKey(keypair.privateKey, this._()); const pem = forge.pki.encryptRsaPrivateKey(keypair.privateKey, this._())
return self.store.put(dsname, pem, (err) => { return self.store.put(dsname, pem, (err) => {
if (err) return _error(callback, err) if (err) return _error(callback, err)
self._getKeyInfo(name, callback) self._getKeyInfo(name, callback)
}) })
}) })
break; break
default: default:
return _error(callback, `Invalid key type '${type}'`) return _error(callback, `Invalid key type '${type}'`)
@ -181,6 +187,7 @@ class Keychain {
} }
const dsname = DsName(name) const dsname = DsName(name)
self.store.has(dsname, (err, exists) => { self.store.has(dsname, (err, exists) => {
if (err) return _error(callback, err)
if (!exists) return _error(callback, `Key '${name}' does not exist'`) if (!exists) return _error(callback, `Key '${name}' does not exist'`)
self.store.delete(dsname, callback) self.store.delete(dsname, callback)
@ -203,6 +210,7 @@ class Keychain {
} }
const pem = res.toString() const pem = res.toString()
self.store.has(newDsname, (err, exists) => { self.store.has(newDsname, (err, exists) => {
if (err) return _error(callback, err)
if (exists) return _error(callback, `Key '${newName}' already exists'`) if (exists) return _error(callback, `Key '${newName}' already exists'`)
const batch = self.store.batch() const batch = self.store.batch()
@ -256,13 +264,14 @@ class Keychain {
} }
const dsname = DsName(name) const dsname = DsName(name)
self.store.has(dsname, (err, exists) => { self.store.has(dsname, (err, exists) => {
if (err) return _error(callback, err)
if (exists) return _error(callback, `Key '${name}' already exists'`) if (exists) return _error(callback, `Key '${name}' already exists'`)
try { try {
const privateKey = forge.pki.decryptRsaPrivateKey(pem, password) const privateKey = forge.pki.decryptRsaPrivateKey(pem, password)
if (privateKey === null) { if (privateKey === null) {
return _error(callback, 'Cannot read the key, most likely the password is wrong') return _error(callback, 'Cannot read the key, most likely the password is wrong')
} }
const newpem = forge.pki.encryptRsaPrivateKey(privateKey, this._()); const newpem = forge.pki.encryptRsaPrivateKey(privateKey, this._())
return self.store.put(dsname, newpem, (err) => { return self.store.put(dsname, newpem, (err) => {
if (err) return _error(callback, err) if (err) return _error(callback, err)
@ -280,23 +289,25 @@ class Keychain {
return _error(callback, `Invalid key name '${name}'`) return _error(callback, `Invalid key name '${name}'`)
} }
if (!peer || !peer.privKey) { if (!peer || !peer.privKey) {
return _error(callback, 'Peer.privKey \is required') return _error(callback, 'Peer.privKey is required')
} }
const dsname = DsName(name) const dsname = DsName(name)
self.store.has(dsname, (err, exists) => { self.store.has(dsname, (err, exists) => {
if (err) return _error(callback, err)
if (exists) return _error(callback, `Key '${name}' already exists'`) if (exists) return _error(callback, `Key '${name}' already exists'`)
const privateKeyProtobuf = peer.marshalPrivKey() const privateKeyProtobuf = peer.marshalPrivKey()
libp2pCrypto.keys.unmarshalPrivateKey(privateKeyProtobuf, (err, key) => { crypto.keys.unmarshalPrivateKey(privateKeyProtobuf, (err, key) => {
if (err) return _error(callback, err)
try { try {
const der = key.marshal() const der = key.marshal()
const buf = forge.util.createBuffer(der.toString('binary')); const buf = forge.util.createBuffer(der.toString('binary'))
const obj = forge.asn1.fromDer(buf) const obj = forge.asn1.fromDer(buf)
const privateKey = forge.pki.privateKeyFromAsn1(obj) const privateKey = forge.pki.privateKeyFromAsn1(obj)
if (privateKey === null) { if (privateKey === null) {
return _error(callback, 'Cannot read the peer private key') return _error(callback, 'Cannot read the peer private key')
} }
const pem = forge.pki.encryptRsaPrivateKey(privateKey, this._()); const pem = forge.pki.encryptRsaPrivateKey(privateKey, this._())
return self.store.put(dsname, pem, (err) => { return self.store.put(dsname, pem, (err) => {
if (err) return _error(callback, err) if (err) return _error(callback, err)
@ -314,9 +325,9 @@ class Keychain {
* *
* @param {string} name * @param {string} name
* @param {function(Error, string)} callback * @param {function(Error, string)} callback
* @returns {undefined}
*/ */
_getPrivateKey (name, callback) { _getPrivateKey (name, callback) {
const self = this
if (!validateKeyName(name)) { if (!validateKeyName(name)) {
return _error(callback, `Invalid key name '${name}'`) return _error(callback, `Invalid key name '${name}'`)
} }
@ -329,7 +340,6 @@ class Keychain {
} }
_getKeyInfo (name, callback) { _getKeyInfo (name, callback) {
const self = this
if (!validateKeyName(name)) { if (!validateKeyName(name)) {
return _error(callback, `Invalid key name '${name}'`) return _error(callback, `Invalid key name '${name}'`)
} }
@ -356,7 +366,6 @@ class Keychain {
} }
}) })
} }
} }
module.exports = Keychain module.exports = Keychain

View File

@ -14,7 +14,7 @@ exports.keyId = (privateKey, callback) => {
try { try {
const publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e) const publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e)
const spki = pki.publicKeyToSubjectPublicKeyInfo(publicKey) const spki = pki.publicKeyToSubjectPublicKeyInfo(publicKey)
const der = new Buffer(forge.asn1.toDer(spki).getBytes(), 'binary') const der = Buffer.from(forge.asn1.toDer(spki).getBytes(), 'binary')
const jwk = rsaUtils.pkixToJwk(der) const jwk = rsaUtils.pkixToJwk(der)
const rsa = new rsaClass.RsaPublicKey(jwk) const rsa = new rsaClass.RsaPublicKey(jwk)
rsa.hash((err, kid) => { rsa.hash((err, kid) => {
@ -33,12 +33,12 @@ exports.certificateForKey = (privateKey, callback) => {
if (err) return callback(err) if (err) return callback(err)
const publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e) const publicKey = pki.setRsaPublicKey(privateKey.n, privateKey.e)
const cert = pki.createCertificate(); const cert = pki.createCertificate()
cert.publicKey = publicKey; cert.publicKey = publicKey
cert.serialNumber = '01'; cert.serialNumber = '01'
cert.validity.notBefore = new Date(); cert.validity.notBefore = new Date()
cert.validity.notAfter = new Date(); cert.validity.notAfter = new Date()
cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 10); cert.validity.notAfter.setFullYear(cert.validity.notBefore.getFullYear() + 10)
var attrs = [{ var attrs = [{
name: 'organizationName', name: 'organizationName',
value: 'ipfs' value: 'ipfs'
@ -48,9 +48,9 @@ exports.certificateForKey = (privateKey, callback) => {
}, { }, {
name: 'commonName', name: 'commonName',
value: kid value: kid
}]; }]
cert.setSubject(attrs); cert.setSubject(attrs)
cert.setIssuer(attrs); cert.setIssuer(attrs)
cert.setExtensions([{ cert.setExtensions([{
name: 'basicConstraints', name: 'basicConstraints',
cA: true cA: true
@ -77,7 +77,7 @@ exports.certificateForKey = (privateKey, callback) => {
sslCA: true, sslCA: true,
emailCA: true, emailCA: true,
objCA: true objCA: true
}]); }])
// self-sign certificate // self-sign certificate
cert.sign(privateKey) cert.sign(privateKey)

View File

@ -4,9 +4,6 @@
const async = require('async') const async = require('async')
const LevelStore = require('datastore-level') const LevelStore = require('datastore-level')
// use in the browser with level.js
const browserStore = new LevelStore('my/db/name', {db: require('level-js')})
describe('browser', () => { describe('browser', () => {
const datastore1 = new LevelStore('test-keystore-1', {db: require('level-js')}) const datastore1 = new LevelStore('test-keystore-1', {db: require('level-js')})
const datastore2 = new LevelStore('test-keystore-2', {db: require('level-js')}) const datastore2 = new LevelStore('test-keystore-2', {db: require('level-js')})

View File

@ -1,3 +1,4 @@
/* eslint max-nested-callbacks: ["error", 8] */
/* eslint-env mocha */ /* eslint-env mocha */
'use strict' 'use strict'
@ -112,7 +113,6 @@ module.exports = (datastore1, datastore2) => {
}) })
}) })
}) })
}) })
describe('query', () => { describe('query', () => {
@ -177,7 +177,7 @@ module.exports = (datastore1, datastore2) => {
}) })
it('is a PKCS #7 message', (done) => { it('is a PKCS #7 message', (done) => {
ks.cms.readData("not CMS", (err) => { ks.cms.readData('not CMS', (err) => {
expect(err).to.exist() expect(err).to.exist()
done() done()
}) })
@ -205,7 +205,6 @@ module.exports = (datastore1, datastore2) => {
done() done()
}) })
}) })
}) })
describe('exported key', () => { describe('exported key', () => {
@ -252,6 +251,7 @@ module.exports = (datastore1, datastore2) => {
before(function (done) { before(function (done) {
const encoded = Buffer.from(alicePrivKey, 'base64') const encoded = Buffer.from(alicePrivKey, 'base64')
PeerId.createFromPrivKey(encoded, (err, id) => { PeerId.createFromPrivKey(encoded, (err, id) => {
expect(err).to.not.exist()
alice = id alice = id
done() done()
}) })
@ -351,6 +351,5 @@ module.exports = (datastore1, datastore2) => {
}) })
}) })
}) })
}) })
} }

View File

@ -24,6 +24,7 @@ describe('peer ID', () => {
before(function (done) { before(function (done) {
const encoded = Buffer.from(sample.privKey, 'base64') const encoded = Buffer.from(sample.privKey, 'base64')
PeerId.createFromPrivKey(encoded, (err, id) => { PeerId.createFromPrivKey(encoded, (err, id) => {
expect(err).to.not.exist()
peer = id peer = id
done() done()
}) })
@ -44,6 +45,7 @@ describe('peer ID', () => {
// get protobuf version of the private key // get protobuf version of the private key
const privateKeyProtobuf = peer.marshalPrivKey() const privateKeyProtobuf = peer.marshalPrivKey()
crypto.keys.unmarshalPrivateKey(privateKeyProtobuf, (err, key) => { crypto.keys.unmarshalPrivateKey(privateKeyProtobuf, (err, key) => {
expect(err).to.not.exist()
// console.log('private key', key) // console.log('private key', key)
// console.log('\nprivate key der', key.marshal().toString('base64')) // console.log('\nprivate key der', key.marshal().toString('base64'))
done() done()
@ -56,6 +58,7 @@ describe('peer ID', () => {
const rsa = new rsaClass.RsaPublicKey(jwk) const rsa = new rsaClass.RsaPublicKey(jwk)
// console.log('rsa', rsa) // console.log('rsa', rsa)
rsa.hash((err, keyId) => { rsa.hash((err, keyId) => {
expect(err).to.not.exist()
// console.log('err', err) // console.log('err', err)
// console.log('keyId', keyId) // console.log('keyId', keyId)
// console.log('id decoded', multihash.decode(keyId)) // console.log('id decoded', multihash.decode(keyId))
@ -78,6 +81,7 @@ describe('peer ID', () => {
const rsa = new rsaClass.RsaPublicKey(jwk) const rsa = new rsaClass.RsaPublicKey(jwk)
// console.log('rsa', rsa) // console.log('rsa', rsa)
rsa.hash((err, keyId) => { rsa.hash((err, keyId) => {
expect(err).to.not.exist()
// console.log('err', err) // console.log('err', err)
// console.log('keyId', keyId) // console.log('keyId', keyId)
// console.log('id decoded', multihash.decode(keyId)) // console.log('id decoded', multihash.decode(keyId))
@ -96,10 +100,10 @@ describe('peer ID', () => {
// get protobuf version of the private key // get protobuf version of the private key
const privateKeyProtobuf = peer.marshalPrivKey() const privateKeyProtobuf = peer.marshalPrivKey()
crypto.keys.unmarshalPrivateKey(privateKeyProtobuf, (err, key) => { crypto.keys.unmarshalPrivateKey(privateKeyProtobuf, (err, key) => {
expect(err).to.not.exist()
// console.log('private key', key) // console.log('private key', key)
// console.log('\nprivate key der', key.marshal().toString('base64')) // console.log('\nprivate key der', key.marshal().toString('base64'))
done() done()
}) })
}) })
}) })