secure-scuttlebot classic

switch to muxrpc-validation 2.0

+254 -255
+1 -1
bin.js
··· 12 12 var parse = require('mynosql-query') 13 13 var config = require('ssb-config/inject')(process.env.ssb_appname) 14 14 var muxrpcli = require('muxrpcli') 15 - var cmdAliases = require('./cli-cmd-aliases') 15 + var cmdAliases = require('./lib/cli-cmd-aliases') 16 16 17 17 var createSbot = require('./') 18 18 .use(require('./plugins/master'))
cli-cmd-aliases.js lib/cli-cmd-aliases.js
+2 -3
index.js
··· 8 8 var rimraf = require('rimraf') 9 9 var mdm = require('mdmanifest') 10 10 var fs = require('fs') 11 - var cmdAliases = require('./cli-cmd-aliases') 12 - var valid = require('muxrpc-validation') 13 - valid.set(require('./validators')) 11 + var cmdAliases = require('./lib/cli-cmd-aliases') 12 + var valid = require('./lib/validators') 14 13 15 14 var apidocs = { 16 15 _: fs.readFileSync(__dirname + '/api.md', 'utf-8'),
+244
lib/validators.js
··· 1 + var valid = require('muxrpc-validation') 2 + var zerr = require('zerr') 3 + var ref = require('ssb-ref') 4 + 5 + // errors 6 + var MissingAttr = zerr('Usage', 'Param % must have a .% of type "%"') 7 + var AttrType = zerr('Usage', '.% of param % must be of type "%"') 8 + 9 + function isFilter (v) { 10 + return (v == '@' || v == '%' || v == '&') 11 + } 12 + 13 + module.exports = valid({ 14 + msgId: function (v) { 15 + if (!ref.isMsg(v)) 16 + return 'type' 17 + }, 18 + feedId: function (v) { 19 + if (!ref.isFeed(v)) 20 + return 'type' 21 + }, 22 + blobId: function (v) { 23 + if (!ref.isBlob(v)) 24 + return 'type' 25 + }, 26 + 27 + msgContent: function (v, n) { 28 + var err = this.get('object')(v, n) 29 + if (err) return err 30 + if (!v.type || typeof v.type != 'string') 31 + return MissingAttr(n, 'type', 'string') 32 + }, 33 + 34 + msg: function (v, n) { 35 + var err = this.get('object')(v, n) 36 + if (err) 37 + return err 38 + 39 + // .content 40 + var err = this.get('object')(v.content, n) 41 + if (err) 42 + return MissingAttr(n, 'content', 'object') 43 + 44 + // .content.type 45 + if (!v.content.type || typeof v.content.type != 'string') 46 + return MissingAttr(n, 'content.type', 'string') 47 + 48 + // .author 49 + if (!ref.isFeed(v.author)) 50 + return MissingAttr(n, 'author', 'feedId') 51 + 52 + // .sequence 53 + if (typeof v.sequence != 'number') 54 + return MissingAttr(n, 'sequence', 'number') 55 + 56 + // .previous 57 + if (!ref.isMsg(v.previous)) 58 + return MissingAttr(n, 'previous', 'msgId') 59 + 60 + // .timestamp 61 + if (typeof v.timestamp != 'number') 62 + return MissingAttr(n, 'timestamp', 'number') 63 + 64 + // .hash 65 + if (v.hash != 'sha256') 66 + return zerr('Usage', 'Param % must have .hash set to "sha256"')(n) 67 + 68 + // .signature 69 + if (typeof v.signature != 'string') 70 + return MissingAttr(n, 'signature', 'string') 71 + }, 72 + 73 + readStreamOpts: function (v, n) { 74 + var err = this.get('object')(v, n) 75 + if (err) 76 + return err 77 + 78 + // .live 79 + if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number') 80 + return AttrType(n, 'live', 'boolean') 81 + 82 + // .gt 83 + if (v.gt && typeof v.gt != 'number') 84 + return AttrType(n, 'gt', 'number') 85 + 86 + // .gte 87 + if (v.gte && typeof v.gte != 'number') 88 + return AttrType(n, 'gte', 'number') 89 + 90 + // .lt 91 + if (v.lt && typeof v.lt != 'number') 92 + return AttrType(n, 'lt', 'number') 93 + 94 + // .lte 95 + if (v.lte && typeof v.lte != 'number') 96 + return AttrType(n, 'lte', 'number') 97 + 98 + // .reverse 99 + if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number') 100 + return AttrType(n, 'reverse', 'boolean') 101 + 102 + // .keys 103 + if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number') 104 + return AttrType(n, 'keys', 'boolean') 105 + 106 + // .values 107 + if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number') 108 + return AttrType(n, 'values', 'boolean') 109 + 110 + // .limit 111 + if (v.limit && typeof v.limit != 'number') 112 + return AttrType(n, 'limit', 'number') 113 + 114 + // .fillCache 115 + if (v.fillCache && typeof v.fillCache != 'boolean' && typeof v.fillCache != 'number') 116 + return AttrType(n, 'fillCache', 'boolean') 117 + }, 118 + 119 + createHistoryStreamOpts: function (v, n) { 120 + // .id 121 + if (!ref.isFeed(v.id)) 122 + return MissingAttr(n, 'id', 'feedId') 123 + 124 + // .seq 125 + if (v.seq && typeof v.seq != 'number') 126 + return AttrType(n, 'seq', 'number') 127 + 128 + // .live 129 + if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number') 130 + return AttrType(n, 'live', 'boolean') 131 + }, 132 + 133 + createUserStreamOpts: function (v, n) { 134 + var err = this.get('readStreamOpts')(v, n) 135 + if (err) 136 + return err 137 + 138 + // .id 139 + if (!ref.isFeed(v.id)) 140 + return MissingAttr(n, 'id', 'feedId') 141 + }, 142 + 143 + messagesByTypeOpts: function (v, n) { 144 + var err = this.get('readStreamOpts')(v, n) 145 + if (err) 146 + return err 147 + 148 + // .type 149 + if (typeof v.type != 'string') 150 + return MissingAttr(n, 'type', 'string') 151 + }, 152 + 153 + linksOpts: function (v, n) { 154 + var err = this.get('object')(v, n) 155 + if (err) 156 + return err 157 + 158 + // .source 159 + if (v.source && !ref.isLink(v.source) && !isFilter(v.source)) 160 + return AttrType(n, 'source', 'id|filter') 161 + 162 + // .dest 163 + if (v.dest && !ref.isLink(v.dest) && !isFilter(v.dest)) 164 + return AttrType(n, 'dest', 'id|filter') 165 + 166 + // .rel 167 + if (v.rel && typeof v.rel != 'string') 168 + return AttrType(n, 'rel', 'string') 169 + 170 + // .live 171 + if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number') 172 + return AttrType(n, 'live', 'boolean') 173 + 174 + // .reverse 175 + if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number') 176 + return AttrType(n, 'reverse', 'boolean') 177 + 178 + // .keys 179 + if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number') 180 + return AttrType(n, 'keys', 'boolean') 181 + 182 + // .values 183 + if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number') 184 + return AttrType(n, 'values', 'boolean') 185 + }, 186 + 187 + relatedMessagesOpts: function (v, n) { 188 + var err = this.get('object')(v, n) 189 + if (err) 190 + return err 191 + 192 + // .id 193 + if (!ref.isMsg(v.id)) 194 + return MissingAttr(n, 'id', 'msgId') 195 + 196 + // .rel 197 + if (v.rel && typeof v.rel != 'string') 198 + return AttrType(n, 'rel', 'string') 199 + 200 + // .count 201 + if (v.count && typeof v.count != 'boolean' && typeof v.count != 'number') 202 + return AttrType(n, 'count', 'boolean') 203 + 204 + // .parent 205 + if (v.parent && typeof v.parent != 'boolean' && typeof v.parent != 'number') 206 + return AttrType(n, 'parent', 'boolean') 207 + }, 208 + 209 + isBlockedOpts: function (v, n) { 210 + var err = this.get('object')(v, n) 211 + if (err) 212 + return err 213 + 214 + // .source 215 + if (v.source && !ref.isFeed(v.source)) 216 + return AttrType(n, 'source', 'feedId') 217 + 218 + // .dest 219 + if (v.dest && !ref.isFeed(v.dest)) 220 + return AttrType(n, 'dest', 'feedId') 221 + }, 222 + 223 + createFriendStreamOpts: function (v, n) { 224 + var err = this.get('object')(v, n) 225 + if (err) 226 + return err 227 + 228 + // .start 229 + if (v.start && !ref.isFeed(v.start)) 230 + return AttrType(n, 'start', 'feedId') 231 + 232 + // .graph 233 + if (v.graph && typeof v.graph != 'string') 234 + return AttrType(n, 'graph', 'string') 235 + 236 + // .dunbar 237 + if (v.dunbar && typeof v.dunbar != 'number') 238 + return AttrType(n, 'dunbar', 'number') 239 + 240 + // .hops 241 + if (v.hops && typeof v.hops != 'number') 242 + return AttrType(n, 'hops', 'number') 243 + } 244 + })
+1 -1
package.json
··· 24 24 "multiblob": "^1.5.0", 25 25 "multicb": "^1.0.0", 26 26 "muxrpc": "^6.1.1", 27 - "muxrpc-validation": "^1.0.0", 27 + "muxrpc-validation": "^2.0.0", 28 28 "muxrpcli": "^1.0.0", 29 29 "mynosql-query": "~1.0.0", 30 30 "nomnom": "1.8.0",
+1 -1
plugins/blobs.js
··· 11 11 var multicb = require('multicb') 12 12 var Notify = require('pull-notify') 13 13 var mdm = require('mdmanifest') 14 - var valid = require('muxrpc-validation') 14 + var valid = require('../lib/validators') 15 15 var apidoc = require('fs').readFileSync(__dirname + '/blobs.md', 'utf-8') 16 16 17 17 function isFunction (f) {
+1 -1
plugins/block.js
··· 1 1 var pull = require('pull-stream') 2 - var valid = require('muxrpc-validation') 2 + var valid = require('../lib/validators') 3 3 4 4 exports.name = 'block' 5 5 exports.version = '1.0.0'
+1 -1
plugins/friends.js
··· 4 4 var memview = require('level-memview') 5 5 var pushable = require('pull-pushable') 6 6 var mdm = require('mdmanifest') 7 - var valid = require('muxrpc-validation') 7 + var valid = require('../lib/validators') 8 8 var apidoc = require('fs').readFileSync(__dirname + '/friends.md', 'utf-8') 9 9 10 10 function isFunction (f) {
+1 -1
plugins/gossip.js
··· 4 4 var toAddress = require('../lib/util').toAddress 5 5 var nonPrivate = require('non-private-ip') 6 6 var mdm = require('mdmanifest') 7 - var valid = require('muxrpc-validation') 7 + var valid = require('../lib/validators') 8 8 var apidoc = require('fs').readFileSync(__dirname + '/gossip.md', 'utf-8') 9 9 var u = require('../lib/util') 10 10
+1 -1
plugins/invite.js
··· 6 6 var explain = require('explain-error') 7 7 var ip = require('ip') 8 8 var mdm = require('mdmanifest') 9 - var valid = require('muxrpc-validation') 9 + var valid = require('../lib/validators') 10 10 var apidoc = require('fs').readFileSync(__dirname + '/invite.md', 'utf-8') 11 11 //okay this plugin adds a method 12 12 //invite(seal({code, public})
+1 -1
plugins/private.js
··· 1 1 var ssbKeys = require('ssb-keys') 2 2 var explain = require('explain-error') 3 3 var mdm = require('mdmanifest') 4 - var valid = require('muxrpc-validation') 4 + var valid = require('../lib/validators') 5 5 var apidoc = require('fs').readFileSync(__dirname + '/private.md', 'utf-8') 6 6 7 7 module.exports = {
-244
validators.js
··· 1 - var valid = require('muxrpc-validation') 2 - var zerr = require('zerr') 3 - var ref = require('ssb-ref') 4 - 5 - // errors 6 - var MissingAttr = zerr('Usage', 'Param % must have a .% of type "%"') 7 - var AttrType = zerr('Usage', '.% of param % must be of type "%"') 8 - 9 - function isFilter (v) { 10 - return (v == '@' || v == '%' || v == '&') 11 - } 12 - 13 - module.exports.msgId = function (v) { 14 - if (!ref.isMsg(v)) 15 - return 'type' 16 - } 17 - module.exports.feedId = function (v) { 18 - if (!ref.isFeed(v)) 19 - return 'type' 20 - } 21 - module.exports.blobId = function (v) { 22 - if (!ref.isBlob(v)) 23 - return 'type' 24 - } 25 - 26 - module.exports.msgContent = function (v, n) { 27 - var err = valid.get('object')(v, n) 28 - if (err) return err 29 - if (!v.type || typeof v.type != 'string') 30 - return MissingAttr(n, 'type', 'string') 31 - } 32 - 33 - module.exports.msg = function (v, n) { 34 - var err = valid.get('object')(v, n) 35 - if (err) 36 - return err 37 - 38 - // .content 39 - var err = valid.get('object')(v.content, n) 40 - if (err) 41 - return MissingAttr(n, 'content', 'object') 42 - 43 - // .content.type 44 - if (!v.content.type || typeof v.content.type != 'string') 45 - return MissingAttr(n, 'content.type', 'string') 46 - 47 - // .author 48 - if (!ref.isFeed(v.author)) 49 - return MissingAttr(n, 'author', 'feedId') 50 - 51 - // .sequence 52 - if (typeof v.sequence != 'number') 53 - return MissingAttr(n, 'sequence', 'number') 54 - 55 - // .previous 56 - if (!ref.isMsg(v.previous)) 57 - return MissingAttr(n, 'previous', 'msgId') 58 - 59 - // .timestamp 60 - if (typeof v.timestamp != 'number') 61 - return MissingAttr(n, 'timestamp', 'number') 62 - 63 - // .hash 64 - if (v.hash != 'sha256') 65 - return zerr('Usage', 'Param % must have .hash set to "sha256"')(n) 66 - 67 - // .signature 68 - if (typeof v.signature != 'string') 69 - return MissingAttr(n, 'signature', 'string') 70 - } 71 - 72 - module.exports.readStreamOpts = function (v, n) { 73 - var err = valid.get('object')(v, n) 74 - if (err) 75 - return err 76 - 77 - // .live 78 - if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number') 79 - return AttrType(n, 'live', 'boolean') 80 - 81 - // .gt 82 - if (v.gt && typeof v.gt != 'number') 83 - return AttrType(n, 'gt', 'number') 84 - 85 - // .gte 86 - if (v.gte && typeof v.gte != 'number') 87 - return AttrType(n, 'gte', 'number') 88 - 89 - // .lt 90 - if (v.lt && typeof v.lt != 'number') 91 - return AttrType(n, 'lt', 'number') 92 - 93 - // .lte 94 - if (v.lte && typeof v.lte != 'number') 95 - return AttrType(n, 'lte', 'number') 96 - 97 - // .reverse 98 - if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number') 99 - return AttrType(n, 'reverse', 'boolean') 100 - 101 - // .keys 102 - if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number') 103 - return AttrType(n, 'keys', 'boolean') 104 - 105 - // .values 106 - if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number') 107 - return AttrType(n, 'values', 'boolean') 108 - 109 - // .limit 110 - if (v.limit && typeof v.limit != 'number') 111 - return AttrType(n, 'limit', 'number') 112 - 113 - // .fillCache 114 - if (v.fillCache && typeof v.fillCache != 'boolean' && typeof v.fillCache != 'number') 115 - return AttrType(n, 'fillCache', 'boolean') 116 - } 117 - 118 - module.exports.createHistoryStreamOpts = function (v, n) { 119 - // .id 120 - if (!ref.isFeed(v.id)) 121 - return MissingAttr(n, 'id', 'feedId') 122 - 123 - // .seq 124 - if (v.seq && typeof v.seq != 'number') 125 - return AttrType(n, 'seq', 'number') 126 - 127 - // .live 128 - if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number') 129 - return AttrType(n, 'live', 'boolean') 130 - } 131 - 132 - module.exports.createUserStreamOpts = function (v, n) { 133 - var err = valid.get('readStreamOpts')(v, n) 134 - if (err) 135 - return err 136 - 137 - // .id 138 - if (!ref.isFeed(v.id)) 139 - return MissingAttr(n, 'id', 'feedId') 140 - } 141 - 142 - module.exports.messagesByTypeOpts = function (v, n) { 143 - var err = valid.get('readStreamOpts')(v, n) 144 - if (err) 145 - return err 146 - 147 - // .type 148 - if (typeof v.type != 'string') 149 - return MissingAttr(n, 'type', 'string') 150 - } 151 - 152 - module.exports.linksOpts = function (v, n) { 153 - var err = valid.get('object')(v, n) 154 - if (err) 155 - return err 156 - 157 - // .source 158 - if (v.source && !ref.isLink(v.source) && !isFilter(v.source)) 159 - return AttrType(n, 'source', 'id|filter') 160 - 161 - // .dest 162 - if (v.dest && !ref.isLink(v.dest) && !isFilter(v.dest)) 163 - return AttrType(n, 'dest', 'id|filter') 164 - 165 - // .rel 166 - if (v.rel && typeof v.rel != 'string') 167 - return AttrType(n, 'rel', 'string') 168 - 169 - // .live 170 - if (v.live && typeof v.live != 'boolean' && typeof v.live != 'number') 171 - return AttrType(n, 'live', 'boolean') 172 - 173 - // .reverse 174 - if (v.reverse && typeof v.reverse != 'boolean' && typeof v.reverse != 'number') 175 - return AttrType(n, 'reverse', 'boolean') 176 - 177 - // .keys 178 - if (v.keys && typeof v.keys != 'boolean' && typeof v.keys != 'number') 179 - return AttrType(n, 'keys', 'boolean') 180 - 181 - // .values 182 - if (v.values && typeof v.values != 'boolean' && typeof v.values != 'number') 183 - return AttrType(n, 'values', 'boolean') 184 - } 185 - 186 - module.exports.relatedMessagesOpts = function (v, n) { 187 - var err = valid.get('object')(v, n) 188 - if (err) 189 - return err 190 - 191 - // .id 192 - if (!ref.isMsg(v.id)) 193 - return MissingAttr(n, 'id', 'msgId') 194 - 195 - // .rel 196 - if (v.rel && typeof v.rel != 'string') 197 - return AttrType(n, 'rel', 'string') 198 - 199 - // .count 200 - if (v.count && typeof v.count != 'boolean' && typeof v.count != 'number') 201 - return AttrType(n, 'count', 'boolean') 202 - 203 - // .parent 204 - if (v.parent && typeof v.parent != 'boolean' && typeof v.parent != 'number') 205 - return AttrType(n, 'parent', 'boolean') 206 - } 207 - 208 - module.exports.isBlockedOpts = function (v, n) { 209 - var err = valid.get('object')(v, n) 210 - if (err) 211 - return err 212 - 213 - // .source 214 - if (v.source && !ref.isFeed(v.source)) 215 - return AttrType(n, 'source', 'feedId') 216 - 217 - // .dest 218 - if (v.dest && !ref.isFeed(v.dest)) 219 - return AttrType(n, 'dest', 'feedId') 220 - } 221 - 222 - module.exports.createFriendStreamOpts = function (v, n) { 223 - var err = valid.get('object')(v, n) 224 - if (err) 225 - return err 226 - 227 - // .start 228 - if (v.start && !ref.isFeed(v.start)) 229 - return AttrType(n, 'start', 'feedId') 230 - 231 - // .graph 232 - if (v.graph && typeof v.graph != 'string') 233 - return AttrType(n, 'graph', 'string') 234 - 235 - // .dunbar 236 - if (v.dunbar && typeof v.dunbar != 'number') 237 - return AttrType(n, 'dunbar', 'number') 238 - 239 - // .hops 240 - if (v.hops && typeof v.hops != 'number') 241 - return AttrType(n, 'hops', 'number') 242 - } 243 - 244 -