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

This commit is contained in:
Dominic Tarr
2018-04-15 13:15:08 -07:00
parent 2c29133777
commit 08321fdd28
+125 -109
View File
@@ -120,6 +120,9 @@ exports.init = function (sbot, config) {
pull( pull(
sbot.createUserStream({ id: feedId, reverse: true, limit: showAll ? -1 : (ext == 'rss' ? 25 : 10) }), sbot.createUserStream({ id: feedId, reverse: true, limit: showAll ? -1 : (ext == 'rss' ? 25 : 10) }),
pull.filter(function (data) {
return 'object' === typeof data.value.content
}),
pull.collect(function (err, logs) { pull.collect(function (err, logs) {
if (err) return respond(res, 500, err.stack || err) if (err) return respond(res, 500, err.stack || err)
res.writeHead(200, { res.writeHead(200, {
@@ -150,34 +153,34 @@ exports.init = function (sbot, config) {
getAbout(feedId, function (err, about) { getAbout(feedId, function (err, about) {
pull( pull(
sbot.createUserStream({ id: feedId }), sbot.createUserStream({ id: feedId }),
pull.filter((msg) => { pull.filter((msg) => {
return !msg.value || return !msg.value ||
msg.value.content.type == 'contact' || msg.value.content.type == 'contact' ||
(msg.value.content.type == 'channel' && (msg.value.content.type == 'channel' &&
typeof msg.value.content.subscribed != 'undefined') typeof msg.value.content.subscribed != 'undefined')
}), }),
pull.collect(function (err, msgs) { pull.collect(function (err, msgs) {
msgs.forEach((msg) => { msgs.forEach((msg) => {
if (msg.value.content.type == 'contact') if (msg.value.content.type == 'contact')
{ {
if (msg.value.content.following) if (msg.value.content.following)
following[msg.value.content.contact] = 1 following[msg.value.content.contact] = 1
else else
delete following[msg.value.content.contact] delete following[msg.value.content.contact]
} }
else // channel subscription else // channel subscription
{ {
if (msg.value.content.subscribed) if (msg.value.content.subscribed)
channelSubscriptions[msg.value.content.channel] = 1 channelSubscriptions[msg.value.content.channel] = 1
else else
delete channelSubscriptions[msg.value.content.channel] delete channelSubscriptions[msg.value.content.channel]
} }
}) })
serveFeeds(req, res, following, channelSubscriptions, feedId, serveFeeds(req, res, following, channelSubscriptions, feedId,
'user feed ' + (about ? about.name : "")) 'user feed ' + (about ? about.name : ""))
}) })
) )
}) })
} }
@@ -192,27 +195,27 @@ exports.init = function (sbot, config) {
pull( pull(
sbot.createLogStream({ reverse: true, limit: 5000 }), sbot.createLogStream({ reverse: true, limit: 5000 }),
pull.filter((msg) => { pull.filter((msg) => {
return !msg.value || return !msg.value ||
(msg.value.author in following || (msg.value.author in following ||
msg.value.content.channel in channelSubscriptions) msg.value.content.channel in channelSubscriptions)
}), }),
pull.take(150), pull.take(150),
pull.collect(function (err, logs) { pull.collect(function (err, logs) {
if (err) return respond(res, 500, err.stack || err) if (err) return respond(res, 500, err.stack || err)
res.writeHead(200, { res.writeHead(200, {
'Content-Type': ctype("html") 'Content-Type': ctype("html")
}) })
pull( pull(
pull.values(logs), pull.values(logs),
paramap(addAuthorAbout, 8), paramap(addAuthorAbout, 8),
paramap(addFollowAbout, 8), paramap(addFollowAbout, 8),
paramap(addVoteMessage, 8), paramap(addVoteMessage, 8),
paramap(addGitLinks, 8), paramap(addGitLinks, 8),
pull(renderThread(feedOpts), wrapPage(name)), pull(renderThread(feedOpts), wrapPage(name)),
toPull(res, function (err) { toPull(res, function (err) {
if (err) console.error('[viewer]', err) if (err) console.error('[viewer]', err)
}) })
) )
}) })
) )
} }
@@ -226,21 +229,21 @@ exports.init = function (sbot, config) {
pull( pull(
sbot.query.read({ limit: showAll ? 300 : 10, reverse: true, query: [{$filter: { value: { content: { channel: channelId }}}}]}), sbot.query.read({ limit: showAll ? 300 : 10, reverse: true, query: [{$filter: { value: { content: { channel: channelId }}}}]}),
pull.collect(function (err, logs) { pull.collect(function (err, logs) {
if (err) return respond(res, 500, err.stack || err) if (err) return respond(res, 500, err.stack || err)
res.writeHead(200, { res.writeHead(200, {
'Content-Type': ctype("html") 'Content-Type': ctype("html")
}) })
pull( pull(
pull.values(logs), pull.values(logs),
paramap(addAuthorAbout, 8), paramap(addAuthorAbout, 8),
paramap(addVoteMessage, 8), paramap(addVoteMessage, 8),
pull(renderThread(defaultOpts, '', pull(renderThread(defaultOpts, '',
renderShowAll(showAll, req.url)), renderShowAll(showAll, req.url)),
wrapPage('#' + channelId)), wrapPage('#' + channelId)),
toPull(res, function (err) { toPull(res, function (err) {
if (err) console.error('[viewer]', err) if (err) console.error('[viewer]', err)
}) })
) )
}) })
) )
} }
@@ -279,36 +282,45 @@ exports.init = function (sbot, config) {
var format = formatMsgs(id, ext, opts) var format = formatMsgs(id, ext, opts)
if (format === null) return respond(res, 415, 'Invalid format') if (format === null) return respond(res, 415, 'Invalid format')
pull( function render (links) {
sbot.links({dest: id, values: true }), var etag = hash(sort.heads(links).concat(appHash, ext, qs))
includeRoot && prepend(getMsg, id), if (req.headers['if-none-match'] === etag) return respond(res, 304)
pull.unique('key'), res.writeHead(200, {
pull.collect(function (err, links) { 'Content-Type': ctype(ext),
if (err) return respond(res, 500, err.stack || err) 'etag': etag
var etag = hash(sort.heads(links).concat(appHash, ext, qs))
if (req.headers['if-none-match'] === etag) return respond(res, 304)
res.writeHead(200, {
'Content-Type': ctype(ext),
'etag': etag
})
pull(
pull.values(sort(links)),
paramap(addAuthorAbout, 8),
format,
toPull(res, function (err) {
if (err) console.error('[viewer]', err)
})
)
}) })
) pull(
pull.values(sort(links)),
paramap(addAuthorAbout, 8),
format,
toPull(res, function (err) {
if (err) console.error('[viewer]', err)
})
)
}
getMsgWithValue(sbot, id, function (err, root) {
if (err) return respond(res, 500, err.stack || err)
if('string' === typeof root.value.content)
return render([root])
pull(
sbot.links({dest: id, values: true, rel: 'root' }),
pull.unique('key'),
pull.collect(function (err, links) {
if (err) return respond(res, 500, err.stack || err)
render(links)
})
)
})
} }
function addFollowAbout(msg, cb) { function addFollowAbout(msg, cb) {
if (msg.value.content.contact) if (msg.value.content.contact)
getAbout(msg.value.content.contact, function (err, about) { getAbout(msg.value.content.contact, function (err, about) {
if (err) return cb(err) if (err) return cb(err)
msg.value.content.contactAbout = about msg.value.content.contactAbout = about
cb(null, msg) cb(null, msg)
}) })
else else
cb(null, msg) cb(null, msg)
@@ -317,9 +329,9 @@ exports.init = function (sbot, config) {
function addVoteMessage(msg, cb) { function addVoteMessage(msg, cb) {
if (msg.value.content.type == 'vote' && msg.value.content.vote.link[0] == '%') if (msg.value.content.type == 'vote' && msg.value.content.vote.link[0] == '%')
getMsg(msg.value.content.vote.link, function (err, linkedMsg) { getMsg(msg.value.content.vote.link, function (err, linkedMsg) {
if (linkedMsg) if (linkedMsg)
msg.value.content.vote.linkedText = linkedMsg.value.content.text msg.value.content.vote.linkedText = linkedMsg.value.content.text
cb(null, msg) cb(null, msg)
}) })
else else
cb(null, msg) cb(null, msg)
@@ -336,15 +348,15 @@ exports.init = function (sbot, config) {
function addGitLinks(msg, cb) { function addGitLinks(msg, cb) {
if (msg.value.content.type == 'git-update') if (msg.value.content.type == 'git-update')
getMsg(msg.value.content.repo, function (err, gitRepo) { getMsg(msg.value.content.repo, function (err, gitRepo) {
if (gitRepo) if (gitRepo)
msg.value.content.repoName = gitRepo.value.content.name msg.value.content.repoName = gitRepo.value.content.name
cb(null, msg) cb(null, msg)
}) })
else if (msg.value.content.type == 'issue') else if (msg.value.content.type == 'issue')
getMsg(msg.value.content.project, function (err, gitRepo) { getMsg(msg.value.content.project, function (err, gitRepo) {
if (gitRepo) if (gitRepo)
msg.value.content.repoName = gitRepo.value.content.name msg.value.content.repoName = gitRepo.value.content.name
cb(null, msg) cb(null, msg)
}) })
else else
cb(null, msg) cb(null, msg)
@@ -432,20 +444,24 @@ function serveFile(req, res, file) {
}) })
} }
function prepend(fn, arg) { //function prepend(fn, arg) {
return function (read) { // return function (read) {
return function (abort, cb) { // return function (abort, cb) {
if (fn && !abort) { // if (fn && !abort) {
var _fn = fn // var _fn = fn
fn = null // fn = null
return _fn(arg, function (err, value) { // return _fn(arg, function (err, value) {
if (err) return read(err, function (err) { // if (err) return read(err, function (err) {
cb(err || true) // cb(err || true)
}) // })
cb(null, value) // cb(null, value)
}) // })
} // }
read(abort, cb) // read(abort, cb)
} // }
} // }
} //}