Skip to content

Commit

Permalink
Merge pull request #31 from nginnever/master
Browse files Browse the repository at this point in the history
Check ipfs path with is-ipfs
  • Loading branch information
daviddias committed Mar 29, 2016
2 parents 2648508 + 770b695 commit 805aa79
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 15 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
},
"dependencies": {
"ipfs-blocks": "^0.1.0",
"is-ipfs": "^0.2.0",
"multihashing": "^0.2.0",
"protocol-buffers": "^3.1.4",
"stable": "^0.1.5"
Expand Down
29 changes: 24 additions & 5 deletions src/dag-service.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
var DAGNode = require('./dag-node').DAGNode
var Block = require('ipfs-blocks').Block
const DAGNode = require('./dag-node').DAGNode
const Block = require('ipfs-blocks').Block
const isIPFS = require('is-ipfs')
const base58 = require('bs58')

exports = module.exports = DAGService

Expand All @@ -23,10 +25,27 @@ function DAGService (blockService) {
// this.addRecursive

// get retrieves a DAGNode, using the Block Service
this.get = (multihash, callback) => {
if (!multihash) { return callback(new Error('Invalid Key')) }
this.get = function (multihash, callback) {
const isMhash = isIPFS.multihash(multihash)
const isPath = isIPFS.path(multihash)

if (!isMhash && !isPath) {
return callback(new Error('Invalid Key'))
}

if (isMhash) {
this.getWith(multihash, callback)
}

if (isPath) {
var ipfsKey = multihash.replace('/ipfs/', '')
this.getWith(ipfsKey, callback)
}
}

this.bs.getBlock(multihash, (err, block) => {
this.getWith = function (key, callback) {
const formatted = typeof key === 'string' ? new Buffer(base58.decode(key)) : key
this.bs.getBlock(formatted, (err, block) => {
if (err) { return callback(err) }
var node = new DAGNode()
node.unMarshal(block.data)
Expand Down
65 changes: 55 additions & 10 deletions tests/merkle-dag-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -154,17 +154,62 @@ module.exports = function (repo) {
})
})

it('get a mdag node', (done) => {
const node = new DAGNode(new Buffer('more data data data'))
dagService.add(node, (err) => {
it('get a mdag node from base58 encoded string', (done) => {
var encodedMh = 'QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG'
dagService.get(encodedMh, (err, fetchedNode) => {
expect(err).to.not.exist
var mh = node.multihash()
dagService.get(mh, (err, fetchedNode) => {
expect(err).to.not.exist
expect(node.data).to.deep.equal(fetchedNode.data)
expect(node.links).to.deep.equal(fetchedNode.links)
done()
})
expect(fetchedNode.data).to.deep.equal(new Buffer(bs58.decode('cL')))
// just picking the second link and comparing mhash buffer to expected
expect(fetchedNode.links[1].hash).to.deep.equal(new Buffer(bs58.decode('QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y')))
done()
})
})

it('get a mdag node from a multihash buffer', (done) => {
var mh = new Buffer(bs58.decode('QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG'))
dagService.get(mh, (err, fetchedNode) => {
expect(err).to.not.exist
expect(fetchedNode.data).to.deep.equal(new Buffer(bs58.decode('cL')))
expect(fetchedNode.links[1].hash).to.deep.equal(new Buffer(bs58.decode('QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y')))
done()
})
})

it('get a mdag node from a /ipfs/ path', (done) => {
var ipfsPath = '/ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG'
dagService.get(ipfsPath, (err, fetchedNode) => {
expect(err).to.not.exist
expect(fetchedNode.data).to.deep.equal(new Buffer(bs58.decode('cL')))
expect(fetchedNode.links[1].hash).to.deep.equal(new Buffer(bs58.decode('QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y')))
done()
})
})

it('supply an improperly formatted string path', (done) => {
var mh = 'bad path'
var ipfsPath = '/ipfs/' + mh
dagService.get(ipfsPath, (err, fetchedNode) => {
var error = 'Error: Invalid Key'
expect(err.toString()).to.equal(error)
done()
})
})

it('supply improperly formatted multihash buffer', (done) => {
var mh = new Buffer('more data data data')
dagService.get(mh, (err, fetchedNode) => {
var error = 'Error: Invalid Key'
expect(err.toString()).to.equal(error)
done()
})
})

it('supply something weird', (done) => {
var mh = 3
dagService.get(mh, (err, fetchedNode) => {
var error = 'Error: Invalid Key'
expect(err.toString()).to.equal(error)
done()
})
})

Expand Down

0 comments on commit 805aa79

Please sign in to comment.