git ssb

7+

dinoworm 🐛 / patchcore



Commit b57e44a4c2db39bc5672f61e5a4fdc3c9abccab7

extract sbot-plugins to ssb-private and ssb-backlinks

Matt McKegg committed on 6/12/2017, 2:00:22 AM
Parent: ae7e88163e96497ab4d0e969852ef76990342946

Files changed

package.jsonchanged
sbot-plugins/backlinks.jsdeleted
sbot-plugins/lib/flumeview-links-raw.jsdeleted
sbot-plugins/private.jsdeleted
package.jsonView
@@ -33,14 +33,11 @@
3333 "dependencies": {
3434 "bulk-require": "^1.0.0",
3535 "bulkify": "^1.4.2",
3636 "color-hash": "^1.0.3",
37- "deep-equal": "^1.0.1",
3837 "depnest": "^1.0.2",
3938 "emoji-named-characters": "^1.0.2",
4039 "es2040": "^1.2.4",
41- "flumeview-level": "^2.0.2",
42- "flumeview-query": "^3.0.3",
4340 "html-escape": "^2.0.0",
4441 "human-time": "0.0.1",
4542 "mutant": "^3.17.0",
4643 "mutant-pull-reduce": "^1.1.0",
sbot-plugins/backlinks.jsView
@@ -1,61 +1,0 @@
1-// this shouldn't really be in patchcore, should be its own module (ssb-backlinks)
2-
3-var FlumeQueryLinks = require('./lib/flumeview-links-raw')
4-var ref = require('ssb-ref')
5-var deepEqual = require('deep-equal')
6-var extend = require('xtend')
7-var matchChannel = /^#[^\s#]+$/
8-
9-var indexes = [
10- { key: 'DTS', value: [['dest'], ['timestamp']] },
11- { key: 'DTY', value: [['dest'], ['value', 'content', 'type'], ['timestamp']] }
12-]
13-
14-var indexVersion = 0
15-
16-exports.name = 'backlinks'
17-exports.version = require('../package.json').version
18-exports.manifest = {
19- read: 'source'
20-}
21-
22-exports.init = function (ssb, config) {
23- return ssb._flumeUse(
24- 'backlinks',
25- FlumeQueryLinks(indexes, extractLinks, indexVersion)
26- )
27-}
28-
29-function extractLinks (msg, emit) {
30- var links = new Set()
31- walk(msg.value.content, function (path, value) {
32- // HACK: handle legacy channel mentions
33- if (deepEqual(path, ['channel']) && typeof value === 'string' && value.length < 30) {
34- value = `#${value.replace(/\s/g, '')}`
35- }
36-
37- // TODO: should add channel matching to ref.type
38- if (ref.type(value) || isChannel(value)) {
39- links.add(value)
40- }
41- })
42- links.forEach(link => {
43- emit(extend(msg, {
44- dest: link
45- }))
46- })
47-}
48-
49-function isChannel (value) {
50- return typeof value === 'string' && value.length < 30 && matchChannel.test(value)
51-}
52-
53-function walk (obj, fn, prefix) {
54- if (obj && typeof obj === 'object') {
55- for (var k in obj) {
56- walk(obj[k], fn, (prefix || []).concat(k))
57- }
58- } else {
59- fn(prefix, obj)
60- }
61-}
sbot-plugins/lib/flumeview-links-raw.jsView
@@ -1,105 +1,0 @@
sbot-plugins/private.jsView
@@ -1,92 +1,0 @@
1-// this shouldn't really be in patchcore, should be its own module (ssb-private)
2-
3-var ssbKeys = require('ssb-keys')
4-var FlumeQueryLinks = require('./lib/flumeview-links-raw')
5-var explain = require('explain-error')
6-var pull = require('pull-stream')
7-
8-var indexes = [
9- { key: 'TSP', value: ['timestamp'] },
10- { key: 'ATY', value: [['value', 'author'], ['value', 'content', 'type'], 'timestamp'] }
11-]
12-
13-var indexVersion = 0
14-
15-exports.name = 'private'
16-exports.version = require('../package.json').version
17-exports.manifest = {
18- publish: 'async',
19- unbox: 'sync',
20- read: 'source'
21-}
22-
23-exports.init = function (ssb, config) {
24- var index = ssb._flumeUse(
25- `private-${ssb.id.slice(1, 10)}`,
26- FlumeQueryLinks(indexes, (msg, emit) => {
27- var value = unbox(msg)
28- if (value) {
29- emit(value)
30- }
31- }, indexVersion)
32- )
33-
34- return {
35- read: function (opts) {
36- return pull(
37- index.read(opts),
38- pull.map(unbox)
39- )
40- },
41-
42- unbox: function (msgOrData) {
43- if (typeof msgOrData === 'string') {
44- try {
45- var data = ssbKeys.unbox(msgOrData, ssb.keys.private)
46- } catch (e) {
47- throw explain(e, 'failed to decrypt')
48- }
49- return data
50- } else if (msgOrData && msgOrData.value && msgOrData.value.content === 'string') {
51- return unbox(msgOrData)
52- }
53- },
54-
55- publish: function (content, recps, cb) {
56- try {
57- var ciphertext = ssbKeys.box(content, recps)
58- } catch (e) {
59- return cb(explain(e, 'failed to encrypt'))
60- }
61- ssb.publish(ciphertext, cb)
62- }
63- }
64-
65- function unbox (msg) {
66- if (typeof msg.value.content === 'string') {
67- var value = unboxValue(msg.value)
68- if (value) {
69- return {
70- key: msg.key, value: value, timestamp: msg.timestamp
71- }
72- }
73- }
74- }
75-
76- function unboxValue (value) {
77- var plaintext = null
78- try {
79- plaintext = ssbKeys.unbox(value.content, ssb.keys.private)
80- } catch (ex) {}
81- if (!plaintext) return null
82- return {
83- previous: value.previous,
84- author: value.author,
85- sequence: value.sequence,
86- timestamp: value.timestamp,
87- hash: value.hash,
88- content: plaintext,
89- private: true
90- }
91- }
92-}

Built with git-ssb-web