@@ -40,7 +40,15 @@ exports.new = (request, reply) => {
40
40
} ) . code ( 500 )
41
41
}
42
42
43
- return reply ( node . toJSON ( ) )
43
+ node . toJSON ( ( err , nodeJSON ) => {
44
+ if ( err ) {
45
+ return reply ( {
46
+ Message : 'Failed to get object: ' + err ,
47
+ Code : 0
48
+ } ) . code ( 500 )
49
+ }
50
+ return reply ( nodeJSON )
51
+ } )
44
52
} )
45
53
}
46
54
@@ -62,37 +70,73 @@ exports.get = {
62
70
} ) . code ( 500 )
63
71
}
64
72
65
- const res = node . toJSON ( )
66
- res . Data = res . Data ? res . Data . toString ( ) : ''
67
- return reply ( res )
73
+ node . toJSON ( ( err , nodeJSON ) => {
74
+ if ( err ) {
75
+ return reply ( {
76
+ Message : 'Failed to get object: ' + err ,
77
+ Code : 0
78
+ } ) . code ( 500 )
79
+ }
80
+
81
+ nodeJSON . Data = nodeJSON . Data ? nodeJSON . Data . toString ( ) : ''
82
+ return reply ( nodeJSON )
83
+ } )
68
84
} )
69
85
}
70
86
}
71
87
72
88
exports . put = {
73
- // pre request handler that parses the args and returns `node` which is assigned to `request.pre.args`
89
+ // pre request handler that parses the args and returns `node`
90
+ // which is assigned to `request.pre.args`
74
91
parseArgs : ( request , reply ) => {
75
92
if ( ! request . payload ) {
76
93
return reply ( "File argument 'data' is required" ) . code ( 400 ) . takeover ( )
77
94
}
78
95
79
96
const enc = request . query . inputenc
80
-
81
97
const parser = multipart . reqParser ( request . payload )
82
- var file
83
98
84
- parser . on ( 'file' , ( fileName , fileStream ) => {
85
- fileStream . on ( 'data' , ( data ) => {
99
+ let file
100
+ let finished = true
101
+
102
+ parser . on ( 'file' , ( name , stream ) => {
103
+ finished = false
104
+ // TODO fix: stream is not emitting the 'end' event
105
+ stream . on ( 'data' , ( data ) => {
86
106
if ( enc === 'protobuf' ) {
87
- const n = new DAGNode ( ) . unMarshal ( data )
88
- file = new Buffer ( JSON . stringify ( n . toJSON ( ) ) )
107
+ dagPB . util . deserialize ( data , ( err , node ) => {
108
+ if ( err ) {
109
+ return reply ( {
110
+ Message : 'Failed to receive protobuf encoded: ' + err ,
111
+ Code : 0
112
+ } ) . code ( 500 ) . takeover ( )
113
+ }
114
+
115
+ node . toJSON ( ( err , nodeJSON ) => {
116
+ if ( err ) {
117
+ return reply ( {
118
+ Message : 'Failed to receive protobuf encoded: ' + err ,
119
+ Code : 0
120
+ } ) . code ( 500 ) . takeover ( )
121
+ }
122
+ file = new Buffer ( JSON . stringify ( nodeJSON ) )
123
+ finished = true
124
+ } )
125
+ } )
89
126
} else {
90
127
file = data
128
+
129
+ finished = true
91
130
}
92
131
} )
93
132
} )
94
133
95
- parser . on ( 'end' , ( ) => {
134
+ parser . on ( 'end' , finish )
135
+
136
+ function finish ( ) {
137
+ if ( ! finished ) {
138
+ return setTimeout ( finish , 10 )
139
+ }
96
140
if ( ! file ) {
97
141
return reply ( "File argument 'data' is required" ) . code ( 400 ) . takeover ( )
98
142
}
@@ -107,23 +151,33 @@ exports.put = {
107
151
Code : 0
108
152
} ) . code ( 500 ) . takeover ( )
109
153
}
110
- } )
154
+ }
111
155
} ,
112
156
113
157
// main route handler which is called after the above `parseArgs`, but only if the args were valid
114
158
handler : ( request , reply ) => {
115
- const node = request . pre . args . node
116
- const dagNode = new DAGNode ( new Buffer ( node . Data ) , node . Links )
159
+ const nodeJSON = request . pre . args . node
160
+ const node = new DAGNode ( new Buffer ( nodeJSON . Data ) , nodeJSON . Links )
117
161
118
- request . server . app . ipfs . object . put ( dagNode , ( err , obj ) => {
162
+ request . server . app . ipfs . object . put ( node , ( err , obj ) => {
119
163
if ( err ) {
120
164
log . error ( err )
121
165
return reply ( {
122
166
Message : 'Failed to put object: ' + err ,
123
167
Code : 0
124
168
} ) . code ( 500 )
125
169
}
126
- return reply ( dagNode . toJSON ( ) )
170
+
171
+ node . toJSON ( ( err , nodeJSON ) => {
172
+ if ( err ) {
173
+ return reply ( {
174
+ Message : 'Failed to put object: ' + err ,
175
+ Code : 0
176
+ } ) . code ( 500 )
177
+ }
178
+
179
+ return reply ( nodeJSON )
180
+ } )
127
181
} )
128
182
}
129
183
}
@@ -189,10 +243,17 @@ exports.links = {
189
243
} ) . code ( 500 )
190
244
}
191
245
192
- const res = node . toJSON ( )
193
- return reply ( {
194
- Hash : res . Hash ,
195
- Links : res . Links
246
+ node . toJSON ( ( err , nodeJSON ) => {
247
+ if ( err ) {
248
+ return reply ( {
249
+ Message : 'Failed to get object: ' + err ,
250
+ Code : 0
251
+ } ) . code ( 500 )
252
+ }
253
+ return reply ( {
254
+ Hash : nodeJSON . Hash ,
255
+ Links : nodeJSON . Links
256
+ } )
196
257
} )
197
258
} )
198
259
}
@@ -225,7 +286,8 @@ exports.parseKeyAndData = (request, reply) => {
225
286
try {
226
287
return reply ( {
227
288
data : file ,
228
- key : new Buffer ( bs58 . decode ( request . query . arg ) ) // TODO: support ipfs paths: https://github.com/ipfs/http-api-spec/pull/68/files#diff-2625016b50d68d922257f74801cac29cR3880
289
+ key : new Buffer ( bs58 . decode ( request . query . arg ) )
290
+ // TODO: support ipfs paths: https://github.com/ipfs/http-api-spec/pull/68/files#diff-2625016b50d68d922257f74801cac29cR3880
229
291
} )
230
292
} catch ( err ) {
231
293
return reply ( {
@@ -255,7 +317,15 @@ exports.patchAppendData = {
255
317
} ) . code ( 500 )
256
318
}
257
319
258
- return reply ( node . toJSON ( ) )
320
+ node . toJSON ( ( err , nodeJSON ) => {
321
+ if ( err ) {
322
+ return reply ( {
323
+ Message : 'Failed to get object: ' + err ,
324
+ Code : 0
325
+ } ) . code ( 500 )
326
+ }
327
+ return reply ( nodeJSON )
328
+ } )
259
329
} )
260
330
}
261
331
}
@@ -279,10 +349,17 @@ exports.patchSetData = {
279
349
} ) . code ( 500 )
280
350
}
281
351
282
- const res = node . toJSON ( )
283
- return reply ( {
284
- Hash : res . Hash ,
285
- Links : res . Links
352
+ node . toJSON ( ( err , nodeJSON ) => {
353
+ if ( err ) {
354
+ return reply ( {
355
+ Message : 'Failed to get object: ' + err ,
356
+ Code : 0
357
+ } ) . code ( 500 )
358
+ }
359
+ return reply ( {
360
+ Hash : nodeJSON . Hash ,
361
+ Links : nodeJSON . Links
362
+ } )
286
363
} )
287
364
} )
288
365
}
@@ -339,19 +416,44 @@ exports.patchAddLink = {
339
416
} ) . code ( 500 )
340
417
}
341
418
342
- const link = new DAGLink ( name , linkedObj . size ( ) , linkedObj . multihash ( ) )
343
-
344
- request . server . app . ipfs . object . patch . addLink ( root , link , ( err , node ) => {
419
+ linkedObj . size ( ( err , size ) => {
345
420
if ( err ) {
346
- log . error ( err )
347
-
348
421
return reply ( {
349
- Message : 'Failed to add link to object: ' + err ,
422
+ Message : 'Failed to get linked object: ' + err ,
350
423
Code : 0
351
424
} ) . code ( 500 )
352
425
}
353
-
354
- return reply ( node . toJSON ( ) )
426
+ linkedObj . multihash ( ( err , multihash ) => {
427
+ if ( err ) {
428
+ return reply ( {
429
+ Message : 'Failed to get linked object: ' + err ,
430
+ Code : 0
431
+ } ) . code ( 500 )
432
+ }
433
+
434
+ const link = new DAGLink ( name , size , multihash )
435
+
436
+ request . server . app . ipfs . object . patch . addLink ( root , link , ( err , node ) => {
437
+ if ( err ) {
438
+ log . error ( err )
439
+
440
+ return reply ( {
441
+ Message : 'Failed to add link to object: ' + err ,
442
+ Code : 0
443
+ } ) . code ( 500 )
444
+ }
445
+
446
+ node . toJSON ( ( err , nodeJSON ) => {
447
+ if ( err ) {
448
+ return reply ( {
449
+ Message : 'Failed to get object: ' + err ,
450
+ Code : 0
451
+ } ) . code ( 500 )
452
+ }
453
+ return reply ( nodeJSON )
454
+ } )
455
+ } )
456
+ } )
355
457
} )
356
458
} )
357
459
}
@@ -393,14 +495,21 @@ exports.patchRmLink = {
393
495
request . server . app . ipfs . object . patch . rmLink ( root , link , ( err , node ) => {
394
496
if ( err ) {
395
497
log . error ( err )
396
-
397
498
return reply ( {
398
499
Message : 'Failed to add link to object: ' + err ,
399
500
Code : 0
400
501
} ) . code ( 500 )
401
502
}
402
503
403
- return reply ( node . toJSON ( ) )
504
+ node . toJSON ( ( err , nodeJSON ) => {
505
+ if ( err ) {
506
+ return reply ( {
507
+ Message : 'Failed to get object: ' + err ,
508
+ Code : 0
509
+ } ) . code ( 500 )
510
+ }
511
+ return reply ( nodeJSON )
512
+ } )
404
513
} )
405
514
}
406
515
}
0 commit comments