Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit a320571

Browse files
committed
Add /object/links to http-api
1 parent 2ad55d1 commit a320571

File tree

3 files changed

+114
-0
lines changed

3 files changed

+114
-0
lines changed

src/http-api/resources/object.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,3 +214,32 @@ exports.data = {
214214
})
215215
}
216216
}
217+
218+
exports.links = {
219+
// uses common parseKey method that returns a `key`
220+
parseArgs: exports.parseKey,
221+
222+
// main route handler which is called after the above `parseArgs`, but only if the args were valid
223+
handler: (request, reply) => {
224+
const key = request.pre.args.key
225+
226+
ipfs.object.links(key, (err, links) => {
227+
if (err) {
228+
log.error(err)
229+
return reply({
230+
Message: 'Failed to get object: ' + err,
231+
Code: 0
232+
}).code(500)
233+
}
234+
235+
return reply({
236+
Hash: bs58.encode(key).toString(),
237+
Links: links.map((link) => ({
238+
Name: link.name,
239+
Hash: bs58.encode(link.hash).toString(),
240+
Size: link.size
241+
}))
242+
})
243+
})
244+
}
245+
}

src/http-api/routes/object.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,15 @@ module.exports = (server) => {
6161
handler: resources.object.data.handler
6262
}
6363
})
64+
65+
api.route({
66+
method: '*',
67+
path: '/api/v0/object/links',
68+
config: {
69+
pre: [
70+
{ method: resources.object.links.parseArgs, assign: 'args' }
71+
],
72+
handler: resources.object.links.handler
73+
}
74+
})
6475
}

tests/test-http-api/test-object.js

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,49 @@ describe('object', () => {
223223
})
224224
})
225225
})
226+
227+
describe('/object/links', () => {
228+
it('returns 400 for request without argument', (done) => {
229+
api.inject({
230+
method: 'GET',
231+
url: '/api/v0/object/links'
232+
}, (res) => {
233+
expect(res.statusCode).to.equal(400)
234+
expect(res.result).to.be.a('string')
235+
done()
236+
})
237+
})
238+
239+
it('returns 500 for request with invalid argument', (done) => {
240+
api.inject({
241+
method: 'GET',
242+
url: '/api/v0/object/links?arg=invalid'
243+
}, (res) => {
244+
expect(res.statusCode).to.equal(500)
245+
expect(res.result.Code).to.equal(0)
246+
expect(res.result.Message).to.be.a('string')
247+
done()
248+
})
249+
})
250+
251+
it('returns value', (done) => {
252+
const expectedResult = {
253+
Hash: 'QmZZmY4KCu9r3e7M2Pcn46Fc5qbn6NpzaAGaYb22kbfTqm',
254+
Links: [
255+
{ Name: 'some link', Hash: 'QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V', Size: 8 }
256+
]
257+
}
258+
259+
api.inject({
260+
method: 'GET',
261+
url: '/api/v0/object/links?arg=QmZZmY4KCu9r3e7M2Pcn46Fc5qbn6NpzaAGaYb22kbfTqm'
262+
}, (res) => {
263+
expect(res.statusCode).to.equal(200)
264+
expect(res.result).to.deep.equal(expectedResult)
265+
done()
266+
})
267+
})
268+
})
226269
})
227270

228271
describe('using js-ipfs-api', () => {
@@ -351,5 +394,36 @@ describe('object', () => {
351394
})
352395
})
353396
})
397+
398+
describe('ipfs.object.links', () => {
399+
it('returns error for request without argument', (done) => {
400+
ctl.object.links(null, (err, result) => {
401+
expect(err).to.exist
402+
done()
403+
})
404+
})
405+
406+
it('returns error for request with invalid argument', (done) => {
407+
ctl.object.links('invalid', (err, result) => {
408+
expect(err).to.exist
409+
done()
410+
})
411+
})
412+
413+
it('returns value', (done) => {
414+
const expectedResult = {
415+
Hash: 'QmZZmY4KCu9r3e7M2Pcn46Fc5qbn6NpzaAGaYb22kbfTqm',
416+
Links: [
417+
{ Name: 'some link', Hash: 'QmXg9Pp2ytZ14xgmQjYEiHjVjMFXzCVVEcRTWJBmLgR39V', Size: 8 }
418+
]
419+
}
420+
421+
ctl.object.links('QmZZmY4KCu9r3e7M2Pcn46Fc5qbn6NpzaAGaYb22kbfTqm', (err, result) => {
422+
expect(err).to.not.exist
423+
expect(result).to.deep.equal(expectedResult)
424+
done()
425+
})
426+
})
427+
})
354428
})
355429
})

0 commit comments

Comments
 (0)