Commit 08321fdd28495d2cb08d4f7256ed2f6aab925315
respect privacy better. hides who is in a private thread, does not show private messages in user feed, also does not show like/vote as thread replies
Dominic Tarr committed on 4/15/2018, 8:15:08 PMParent: 2c291337776846d8c4edf05609c74fac530254e6
Files changed
index.js | changed |
index.js | |||
---|---|---|---|
@@ -119,8 +119,11 @@ | |||
119 | 119 … | } | |
120 | 120 … | ||
121 | 121 … | pull( | |
122 | 122 … | sbot.createUserStream({ id: feedId, reverse: true, limit: showAll ? -1 : (ext == 'rss' ? 25 : 10) }), | |
123 … | + pull.filter(function (data) { | ||
124 … | + return 'object' === typeof data.value.content | ||
125 … | + }), | ||
123 | 126 … | pull.collect(function (err, logs) { | |
124 | 127 … | if (err) return respond(res, 500, err.stack || err) | |
125 | 128 … | res.writeHead(200, { | |
126 | 129 … | 'Content-Type': ctype(ext) | |
@@ -149,36 +152,36 @@ | |||
149 | 152 … | var channelSubscriptions = [] | |
150 | 153 … | ||
151 | 154 … | getAbout(feedId, function (err, about) { | |
152 | 155 … | pull( | |
153 | - sbot.createUserStream({ id: feedId }), | ||
154 | - pull.filter((msg) => { | ||
155 | - return !msg.value || | ||
156 | - msg.value.content.type == 'contact' || | ||
157 | - (msg.value.content.type == 'channel' && | ||
158 | - typeof msg.value.content.subscribed != 'undefined') | ||
159 | - }), | ||
160 | - pull.collect(function (err, msgs) { | ||
161 | - msgs.forEach((msg) => { | ||
162 | - if (msg.value.content.type == 'contact') | ||
163 | - { | ||
164 | - if (msg.value.content.following) | ||
165 | - following[msg.value.content.contact] = 1 | ||
166 | - else | ||
167 | - delete following[msg.value.content.contact] | ||
168 | - } | ||
169 | - else // channel subscription | ||
170 | - { | ||
171 | - if (msg.value.content.subscribed) | ||
172 | - channelSubscriptions[msg.value.content.channel] = 1 | ||
173 | - else | ||
174 | - delete channelSubscriptions[msg.value.content.channel] | ||
175 | - } | ||
176 | - }) | ||
177 | - | ||
178 | - serveFeeds(req, res, following, channelSubscriptions, feedId, | ||
156 … | + sbot.createUserStream({ id: feedId }), | ||
157 … | + pull.filter((msg) => { | ||
158 … | + return !msg.value || | ||
159 … | + msg.value.content.type == 'contact' || | ||
160 … | + (msg.value.content.type == 'channel' && | ||
161 … | + typeof msg.value.content.subscribed != 'undefined') | ||
162 … | + }), | ||
163 … | + pull.collect(function (err, msgs) { | ||
164 … | + msgs.forEach((msg) => { | ||
165 … | + if (msg.value.content.type == 'contact') | ||
166 … | + { | ||
167 … | + if (msg.value.content.following) | ||
168 … | + following[msg.value.content.contact] = 1 | ||
169 … | + else | ||
170 … | + delete following[msg.value.content.contact] | ||
171 … | + } | ||
172 … | + else // channel subscription | ||
173 … | + { | ||
174 … | + if (msg.value.content.subscribed) | ||
175 … | + channelSubscriptions[msg.value.content.channel] = 1 | ||
176 … | + else | ||
177 … | + delete channelSubscriptions[msg.value.content.channel] | ||
178 … | + } | ||
179 … | + }) | ||
180 … | + | ||
181 … | + serveFeeds(req, res, following, channelSubscriptions, feedId, | ||
179 | 182 … | 'user feed ' + (about ? about.name : "")) | |
180 | - }) | ||
183 … | + }) | ||
181 | 184 … | ) | |
182 | 185 … | }) | |
183 | 186 … | } | |
184 | 187 … | ||
@@ -191,29 +194,29 @@ | |||
191 | 194 … | ||
192 | 195 … | pull( | |
193 | 196 … | sbot.createLogStream({ reverse: true, limit: 5000 }), | |
194 | 197 … | pull.filter((msg) => { | |
195 | - return !msg.value || | ||
196 | - (msg.value.author in following || | ||
197 | - msg.value.content.channel in channelSubscriptions) | ||
198 … | + return !msg.value || | ||
199 … | + (msg.value.author in following || | ||
200 … | + msg.value.content.channel in channelSubscriptions) | ||
198 | 201 … | }), | |
199 | 202 … | pull.take(150), | |
200 | 203 … | pull.collect(function (err, logs) { | |
201 | - if (err) return respond(res, 500, err.stack || err) | ||
202 | - res.writeHead(200, { | ||
203 | - 'Content-Type': ctype("html") | ||
204 | - }) | ||
205 | - pull( | ||
206 | - pull.values(logs), | ||
207 | - paramap(addAuthorAbout, 8), | ||
208 | - paramap(addFollowAbout, 8), | ||
209 | - paramap(addVoteMessage, 8), | ||
210 | - paramap(addGitLinks, 8), | ||
211 | - pull(renderThread(feedOpts), wrapPage(name)), | ||
212 | - toPull(res, function (err) { | ||
213 | - if (err) console.error('[viewer]', err) | ||
214 | - }) | ||
215 | - ) | ||
204 … | + if (err) return respond(res, 500, err.stack || err) | ||
205 … | + res.writeHead(200, { | ||
206 … | + 'Content-Type': ctype("html") | ||
207 … | + }) | ||
208 … | + pull( | ||
209 … | + pull.values(logs), | ||
210 … | + paramap(addAuthorAbout, 8), | ||
211 … | + paramap(addFollowAbout, 8), | ||
212 … | + paramap(addVoteMessage, 8), | ||
213 … | + paramap(addGitLinks, 8), | ||
214 … | + pull(renderThread(feedOpts), wrapPage(name)), | ||
215 … | + toPull(res, function (err) { | ||
216 … | + if (err) console.error('[viewer]', err) | ||
217 … | + }) | ||
218 … | + ) | ||
216 | 219 … | }) | |
217 | 220 … | ) | |
218 | 221 … | } | |
219 | 222 … | ||
@@ -225,23 +228,23 @@ | |||
225 | 228 … | ||
226 | 229 … | pull( | |
227 | 230 … | sbot.query.read({ limit: showAll ? 300 : 10, reverse: true, query: [{$filter: { value: { content: { channel: channelId }}}}]}), | |
228 | 231 … | pull.collect(function (err, logs) { | |
229 | - if (err) return respond(res, 500, err.stack || err) | ||
230 | - res.writeHead(200, { | ||
231 | - 'Content-Type': ctype("html") | ||
232 | - }) | ||
233 | - pull( | ||
234 | - pull.values(logs), | ||
235 | - paramap(addAuthorAbout, 8), | ||
236 | - paramap(addVoteMessage, 8), | ||
237 | - pull(renderThread(defaultOpts, '', | ||
238 | - renderShowAll(showAll, req.url)), | ||
239 | - wrapPage('#' + channelId)), | ||
240 | - toPull(res, function (err) { | ||
241 | - if (err) console.error('[viewer]', err) | ||
242 | - }) | ||
243 | - ) | ||
232 … | + if (err) return respond(res, 500, err.stack || err) | ||
233 … | + res.writeHead(200, { | ||
234 … | + 'Content-Type': ctype("html") | ||
235 … | + }) | ||
236 … | + pull( | ||
237 … | + pull.values(logs), | ||
238 … | + paramap(addAuthorAbout, 8), | ||
239 … | + paramap(addVoteMessage, 8), | ||
240 … | + pull(renderThread(defaultOpts, '', | ||
241 … | + renderShowAll(showAll, req.url)), | ||
242 … | + wrapPage('#' + channelId)), | ||
243 … | + toPull(res, function (err) { | ||
244 … | + if (err) console.error('[viewer]', err) | ||
245 … | + }) | ||
246 … | + ) | ||
244 | 247 … | }) | |
245 | 248 … | ) | |
246 | 249 … | } | |
247 | 250 … | ||
@@ -278,49 +281,58 @@ | |||
278 | 281 … | ||
279 | 282 … | var format = formatMsgs(id, ext, opts) | |
280 | 283 … | if (format === null) return respond(res, 415, 'Invalid format') | |
281 | 284 … | ||
282 | - pull( | ||
283 | - sbot.links({dest: id, values: true }), | ||
284 | - includeRoot && prepend(getMsg, id), | ||
285 | - pull.unique('key'), | ||
286 | - pull.collect(function (err, links) { | ||
287 | - if (err) return respond(res, 500, err.stack || err) | ||
288 | - var etag = hash(sort.heads(links).concat(appHash, ext, qs)) | ||
289 | - if (req.headers['if-none-match'] === etag) return respond(res, 304) | ||
290 | - res.writeHead(200, { | ||
291 | - 'Content-Type': ctype(ext), | ||
292 | - 'etag': etag | ||
285 … | + function render (links) { | ||
286 … | + var etag = hash(sort.heads(links).concat(appHash, ext, qs)) | ||
287 … | + if (req.headers['if-none-match'] === etag) return respond(res, 304) | ||
288 … | + res.writeHead(200, { | ||
289 … | + 'Content-Type': ctype(ext), | ||
290 … | + 'etag': etag | ||
291 … | + }) | ||
292 … | + pull( | ||
293 … | + pull.values(sort(links)), | ||
294 … | + paramap(addAuthorAbout, 8), | ||
295 … | + format, | ||
296 … | + toPull(res, function (err) { | ||
297 … | + if (err) console.error('[viewer]', err) | ||
293 | 298 … | }) | |
294 | - pull( | ||
295 | - pull.values(sort(links)), | ||
296 | - paramap(addAuthorAbout, 8), | ||
297 | - format, | ||
298 | - toPull(res, function (err) { | ||
299 | - if (err) console.error('[viewer]', err) | ||
300 | - }) | ||
301 | - ) | ||
302 | - }) | ||
303 | - ) | ||
299 … | + ) | ||
300 … | + } | ||
301 … | + | ||
302 … | + getMsgWithValue(sbot, id, function (err, root) { | ||
303 … | + if (err) return respond(res, 500, err.stack || err) | ||
304 … | + if('string' === typeof root.value.content) | ||
305 … | + return render([root]) | ||
306 … | + | ||
307 … | + pull( | ||
308 … | + sbot.links({dest: id, values: true, rel: 'root' }), | ||
309 … | + pull.unique('key'), | ||
310 … | + pull.collect(function (err, links) { | ||
311 … | + if (err) return respond(res, 500, err.stack || err) | ||
312 … | + render(links) | ||
313 … | + }) | ||
314 … | + ) | ||
315 … | + }) | ||
304 | 316 … | } | |
305 | 317 … | ||
306 | 318 … | function addFollowAbout(msg, cb) { | |
307 | 319 … | if (msg.value.content.contact) | |
308 | 320 … | getAbout(msg.value.content.contact, function (err, about) { | |
309 | - if (err) return cb(err) | ||
310 | - msg.value.content.contactAbout = about | ||
311 | - cb(null, msg) | ||
321 … | + if (err) return cb(err) | ||
322 … | + msg.value.content.contactAbout = about | ||
323 … | + cb(null, msg) | ||
312 | 324 … | }) | |
313 | 325 … | else | |
314 | 326 … | cb(null, msg) | |
315 | 327 … | } | |
316 | 328 … | ||
317 | 329 … | function addVoteMessage(msg, cb) { | |
318 | 330 … | if (msg.value.content.type == 'vote' && msg.value.content.vote.link[0] == '%') | |
319 | 331 … | getMsg(msg.value.content.vote.link, function (err, linkedMsg) { | |
320 | - if (linkedMsg) | ||
321 | - msg.value.content.vote.linkedText = linkedMsg.value.content.text | ||
322 | - cb(null, msg) | ||
332 … | + if (linkedMsg) | ||
333 … | + msg.value.content.vote.linkedText = linkedMsg.value.content.text | ||
334 … | + cb(null, msg) | ||
323 | 335 … | }) | |
324 | 336 … | else | |
325 | 337 … | cb(null, msg) | |
326 | 338 … | } | |
@@ -335,17 +347,17 @@ | |||
335 | 347 … | ||
336 | 348 … | function addGitLinks(msg, cb) { | |
337 | 349 … | if (msg.value.content.type == 'git-update') | |
338 | 350 … | getMsg(msg.value.content.repo, function (err, gitRepo) { | |
339 | - if (gitRepo) | ||
340 | - msg.value.content.repoName = gitRepo.value.content.name | ||
341 | - cb(null, msg) | ||
351 … | + if (gitRepo) | ||
352 … | + msg.value.content.repoName = gitRepo.value.content.name | ||
353 … | + cb(null, msg) | ||
342 | 354 … | }) | |
343 | 355 … | else if (msg.value.content.type == 'issue') | |
344 | 356 … | getMsg(msg.value.content.project, function (err, gitRepo) { | |
345 | - if (gitRepo) | ||
346 | - msg.value.content.repoName = gitRepo.value.content.name | ||
347 | - cb(null, msg) | ||
357 … | + if (gitRepo) | ||
358 … | + msg.value.content.repoName = gitRepo.value.content.name | ||
359 … | + cb(null, msg) | ||
348 | 360 … | }) | |
349 | 361 … | else | |
350 | 362 … | cb(null, msg) | |
351 | 363 … | } | |
@@ -431,21 +443,25 @@ | |||
431 | 443 … | fs.createReadStream(file).pipe(res) | |
432 | 444 … | }) | |
433 | 445 … | } | |
434 | 446 … | ||
435 | -function prepend(fn, arg) { | ||
436 | - return function (read) { | ||
437 | - return function (abort, cb) { | ||
438 | - if (fn && !abort) { | ||
439 | - var _fn = fn | ||
440 | - fn = null | ||
441 | - return _fn(arg, function (err, value) { | ||
442 | - if (err) return read(err, function (err) { | ||
443 | - cb(err || true) | ||
444 | - }) | ||
445 | - cb(null, value) | ||
446 | - }) | ||
447 | - } | ||
448 | - read(abort, cb) | ||
449 | - } | ||
450 | - } | ||
451 | -} | ||
447 … | +//function prepend(fn, arg) { | ||
448 … | +// return function (read) { | ||
449 … | +// return function (abort, cb) { | ||
450 … | +// if (fn && !abort) { | ||
451 … | +// var _fn = fn | ||
452 … | +// fn = null | ||
453 … | +// return _fn(arg, function (err, value) { | ||
454 … | +// if (err) return read(err, function (err) { | ||
455 … | +// cb(err || true) | ||
456 … | +// }) | ||
457 … | +// cb(null, value) | ||
458 … | +// }) | ||
459 … | +// } | ||
460 … | +// read(abort, cb) | ||
461 … | +// } | ||
462 … | +// } | ||
463 … | +//} | ||
464 … | + | ||
465 … | + | ||
466 … | + | ||
467 … | + |
Built with git-ssb-web