Dive into secure and efficient coding practices with our curated list of the top 10 examples showcasing 'ssb-keys' in functional components in JavaScript. Our advanced machine learning engine meticulously scans each line of code, cross-referencing millions of open source libraries to ensure your implementation is not just functional, but also robust and secure. Elevate your React applications to new heights by mastering the art of handling side effects, API calls, and asynchronous operations with confidence and precision.
pull(read(__filename), sbot.blobs.add(hash, function (err) {
// connect a non-master RPC client
var clientKeys = ssbKeys.generate()
var rpc = client({port: 45450}, sbot.manifest)
rpc.auth(ssbKeys.signObj(clientKeys, {
role: 'peer',
ts: Date.now(),
public: clientKeys.public
}), function (err, res) {
if(err) throw err
t.notEqual(res.role, 'master')
// first has() call, will allow
rpc.blobs.has(hash, function (err, res) {
t.ok(!err)
console.log('first has', err, res)
// second has() call, will deny
rpc.blobs.has(hash, function (err, res) {
t.ok(!!err)
console.log('second has', err.message)
pull.collect(function (err, ary) {
if (err) throw err
console.log('ALICE', alice.id)
console.log('SSB', ssb.id)
var msg = ary[0].value
var ctxt = msg.content
var content = ssbKeys.unbox(ctxt, alice.private)
t.deepEqual(content, { type: 'secret', okay: true }, 'alice can decrypt')
// bob can also decrypt
var content2 = ssbKeys.unbox(ctxt, bob.private)
t.deepEqual(content, { type: 'secret', okay: true }, 'bob can decrypt')
var pmsg = ssb.unbox(ary[0])
t.notOk(msg.unbox, 'did not mutate original message')
var unboxKey = pmsg.value.unbox
t.equal(typeof unboxKey, 'string')
t.ok(pmsg)
t.deepEqual(pmsg.value.content, content2)
console.log('boxed', ary[0].value)
ssb2.add(ary[0].value, function (err) {
if (err) throw err
pull.collect(function (err, ary) {
if (err) throw err
console.log('ALICE', alice.id)
console.log('SSB', ssb.id)
var msg = ary[0].value
var ctxt = msg.content
var content = ssbKeys.unbox(ctxt, alice.private)
t.deepEqual(content, { type: 'secret', okay: true }, 'alice can decrypt')
// bob can also decrypt
var content2 = ssbKeys.unbox(ctxt, bob.private)
t.deepEqual(content, { type: 'secret', okay: true }, 'bob can decrypt')
var pmsg = ssb.unbox(ary[0])
t.notOk(msg.unbox, 'did not mutate original message')
var unboxKey = pmsg.value.unbox
t.equal(typeof unboxKey, 'string')
t.ok(pmsg)
t.deepEqual(pmsg.value.content, content2)
console.log('boxed', ary[0].value)
ssb2.add(ary[0].value, function (err) {
if (err) throw err
ssb2.get({ id: pmsg.key, private: true }, function (err, _msg) {
if (err) throw err
console.log('LOAD', _msg)
t.deepEqual(_msg, msg) // not decrypted
t.comment('result of sbot getAddress: ' + addr)
var ws_remotes = ma.decode(addr).filter(function(a) {
return a.find(function(component) {
return component.name == 'ws'
})
})
t.equal(ws_remotes.length, 1, 'has one ws remote')
var remote = ma.encode([ws_remotes[0]])
// this breaks if multiserver address encoding changes
t.ok(remote.indexOf('9002') > 0, 'ws address contains expected port')
// this is a bit annoying. we can't signal ssb-client to load the secret from .path
// it either has to be the first argument, already loaded
var key = require('ssb-keys').loadOrCreateSync(join(path, 'secret'))
require('ssb-client')(key, {
path: path,
caps: { shs: caps }, // has to be set when setting any config
remote: remote
}, function(err, ssb) {
t.error(err, 'ssb-client returns no error')
t.ok(ssb.manifest, 'got manifest from api')
t.ok(ssb.version, 'got version from api')
ssb.whoami(function(err, feed) {
t.error(err, 'ssb.whoami succeeds')
t.equal(feed.id[0], '@', 'feed.id has @ sigil')
end()
})
})
})
})
function next (data) {
//set $rel as key name if it's missing.
defaultRel(data)
console.log(data)
rpc.auth(ssbkeys.signObj(keys, {
role: 'client',
ts: Date.now(),
public: keys.public
}), function (err) {
if(err) throw err
var isAsyncCmd = contains(cmd, api.manifest.async)
if(isAsyncCmd) {
// massage data as needed
if (cmd == 'getPublicKey' && data && typeof data == 'object')
data = data[1]
if (cmd == 'add' && data && typeof data == 'object')
data = data[1]
// run command
console.log(data)
rpc[cmd](data, function (err, ret) {
const serve = require('ecstatic')
const fs = require('fs')
const path = require('path')
const ssbKeys = require('ssb-keys')
const minimist = require('minimist')
const notifier = require('node-notifier')
const SysTray = require('systray').default
let argv = process.argv.slice(2)
let i = argv.indexOf('--')
let conf = argv.slice(i + 1)
argv = ~i ? argv.slice(0, i) : argv
const config = require('ssb-config/inject')(process.env.ssb_appname, minimist(conf))
const keys = ssbKeys.loadOrCreateSync(path.join(config.path, 'secret'))
if (keys.curve === 'k256') {
throw new Error('k256 curves are no longer supported,' +
'please delete' + path.join(config.path, 'secret'))
}
const manifestFile = path.join(config.path, 'manifest.json')
// special server command:
// import sbot and start the server
const createSbot = require('scuttlebot')
// .use(require('scuttlebot/plugins/plugins'))
.use(require('scuttlebot/plugins/master'))
.use(require('scuttlebot/plugins/gossip'))
.use(require('scuttlebot/plugins/replicate'))
.use(require('ssb-friends'))
function start(customConfig, donecb) {
donecb = donecb || noop
// TODO: try { allthethings } catch(e) { donecb(e) }
customConfig = customConfig || {}
let appname = customConfig.appname || false
let customPluginPaths = customConfig.plugins || false
let argv = process.argv.slice(2)
let i = argv.indexOf('--')
let conf = argv.slice(i + 1)
argv = ~i ? argv.slice(0, i) : argv
let ssbAppName = appname || process.env.ssb_appname
const config = require('ssb-config/inject')(ssbAppName, minimist(conf))
const keys = ssbKeys.loadOrCreateSync(path.join(config.path, 'secret'))
if (keys.curve === 'k256') {
// i think this is _really_ old and could be removed
throw new Error('k256 curves are no longer supported,' +
'please delete' + path.join(config.path, 'secret'))
}
config.keys = keys
ssbConfig = config
const manifestFile = path.join(config.path, 'manifest.json')
const createSbot = require('ssb-server')
.use(require('ssb-local'))
.use(require('ssb-logging'))
.use(require('ssb-master'))
.use(require('ssb-no-auth'))
.use(require('ssb-unix-socket'))
exports.isInvite = function (msg, caps) {
if(!isObject(caps)) throw new Error('caps must be provided')
//return true
return isObject(msg) && isObject(msg.content) && (
'user-invite' === msg.content.type &&
ref.isFeed(msg.content.host) &&
ref.isFeed(msg.content.invite) &&
isMaybeBase64(msg.content.reveal) &&
isMaybeBase64(msg.content.public) &&
// signature must be valid !!!
ssbKeys.verifyObj(msg.content.invite, caps.userInvite, msg.content)
)
}
return function(opts) {
delete opts[0]
delete opts._
var keys = require('ssb-keys').loadSync(path.join(config.path, 'secret'))
var rpc = scuttlebot.createClient({port: config.port, host: 'localhost'})
// if there's data coming from stdin, pipe that into our command
if(!process.stdin.isTTY) {
pull(
toPull.source(process.stdin),
pull.collect(function (err, ary) {
var str = Buffer.concat(ary).toString('utf8')
var data = JSON.parse(str)
next(data)
})
)
}
else
next(opts)
tape('multi-write', function (t) {
var pub = createSbot({
temp: 'test-entitydb-multi-write-pub', timeout: 200,
allowPrivate: true,
keys: ssbKeys.generate()
});
var alice = createSbot({
temp: 'test-entitydb-multi-write-alice', timeout: 200,
allowPrivate: true,
keys: ssbKeys.generate(),
seeds: [pub.getAddress()]
});
var bob = createSbot({
temp: 'test-entitydb-multi-write-bob', timeout: 200,
allowPrivate: true,
keys: ssbKeys.generate(),
seeds: [pub.getAddress()]
});
console.log("alice is: " + alice.id);
console.log("bob is: " + bob.id);
t.test('alice and bob follow each other', function (t) {
t.plan(1);
var done = multicb();