Skip to content

Commit ee66740

Browse files
authored
Merge pull request #101 from datapartyjs/topics-fix-secureconfig
Topics fix secureconfig
2 parents a897f99 + 11b6662 commit ee66740

31 files changed

Lines changed: 1265 additions & 343 deletions
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
const debug = require('debug')('dataparty.topis.time-topic')
3+
4+
const ITopic = require('../../../src/service/itopic')
5+
6+
class TimeTopic extends ITopic {
7+
8+
constructor({context}){
9+
super({context})
10+
}
11+
12+
static get Name(){
13+
return '/time/:session'
14+
}
15+
16+
static get Description(){
17+
return 'time topic'
18+
}
19+
20+
async canAdvertise(identity, args){
21+
22+
return true
23+
}
24+
25+
async canPublish(identity, args){
26+
27+
return true
28+
}
29+
30+
async canSubscribe(identity, args){
31+
return true
32+
}
33+
34+
}
35+
36+
37+
module.exports = TimeTopic

examples/secure-config-argon2.js

Lines changed: 90 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ const prompt = require('prompt')
77

88
let secureConfig = null
99

10+
const HELP_INFO = `
11+
help
12+
get
13+
set
14+
lock
15+
unlock
16+
id
17+
exit
18+
`
19+
1020
async function main(){
1121
const memoryConfig = new Dataparty.Config.MemoryConfig({foo: 'bar'})
1222

@@ -18,25 +28,43 @@ async function main(){
1828

1929
secureConfig = new Dataparty.Config.SecureConfig({
2030
config: jsonConfig,
21-
timeoutMs: 15*1000,
31+
timeoutMs: 60*1000,
2232
argon: argon2
2333
})
2434

2535

26-
secureConfig.on('locked', ()=>{ console.log('locked') })
36+
secureConfig.on('locked', async ()=>{
37+
console.log('locked')
2738

28-
secureConfig.on('unlocked', async ()=>{
29-
console.log('unlocked')
39+
/*
40+
while(secureConfig.isLocked()){
41+
const {password} = await prompt.get({
42+
properties: {
43+
password: {
44+
message: 'Enter password',
45+
hidden: true
46+
}
47+
}})
48+
3049
31-
await secureConfig.write('timestamp', Date.now())
50+
try{
51+
await secureConfig.unlock(password)
52+
}
53+
catch(err){
54+
console.log('bad password')
55+
}
56+
}
57+
*/
3258
})
3359

60+
61+
3462
secureConfig.on('timeout', ()=>{ console.log('timeout') })
3563

3664
secureConfig.on('ready', async ()=>{
3765
console.log('ready')
3866

39-
console.log('config', await secureConfig.readAll())
67+
//console.log('config', await secureConfig.readAll())
4068
})
4169

4270
let blocked = false
@@ -71,6 +99,13 @@ async function main(){
7199

72100
})
73101

102+
secureConfig.on('unlocked', async ()=>{
103+
console.log('unlocked')
104+
105+
await secureConfig.write('timestamp', Date.now())
106+
107+
})
108+
74109
secureConfig.on('setup-required', async ()=>{
75110

76111
console.log('setup-required')
@@ -121,13 +156,59 @@ async function main(){
121156

122157
console.log('wait over')
123158

124-
console.log('main config', await secureConfig.readAll())
159+
//console.log('main config', await secureConfig.readAll())
160+
161+
while(1){
162+
163+
const {cmd} = await prompt.get({
164+
properties: {
165+
cmd: {
166+
message: 'command >'
167+
}
168+
}})
169+
170+
if(cmd && cmd.length > 0){
171+
let parts = cmd.split(' ')
172+
173+
switch(parts[0]){
174+
case 'help':
175+
console.log(HELP_INFO)
176+
break
177+
case 'lock':
178+
secureConfig.lock()
179+
break
180+
case 'get':
181+
if(parts.length == 1){
182+
let value = await secureConfig.readAll()
183+
console.log(value)
184+
} else {
185+
let value = await secureConfig.read(parts[1])
186+
console.log(parts[1], '=', value)
187+
}
188+
break
189+
case 'set':
190+
await secureConfig.write(parts[1], parts[2])
191+
console.log(parts[1], '=', parts[2])
192+
break
193+
case 'id':
194+
console.log(secureConfig.identity.toMini())
195+
break
196+
case 'quit':
197+
case 'exit':
198+
process.exit(0)
199+
default:
200+
console.log('unknown command [',cmd,']')
201+
break
202+
}
203+
}
204+
}
205+
125206

126-
let timer = setTimeout(async ()=>{
207+
/*let timer = setTimeout(async ()=>{
127208
128209
console.log('timer config', await secureConfig.readAll())
129210
130-
}, 1000*30)
211+
}, 1000*30)*/
131212

132213
}
133214

examples/test-peer-party-service.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,19 @@ class ExampleService extends Dataparty.IService {
88
constructor(opts){
99
super(opts)
1010

11-
this.addMiddleware(Dataparty.middleware_paths.pre.decrypt)
12-
this.addMiddleware(Dataparty.middleware_paths.pre.validate)
11+
let builder = new Dataparty.ServiceBuilder(this)
12+
builder.addMiddleware(Dataparty.middleware_paths.pre.decrypt)
13+
builder.addMiddleware(Dataparty.middleware_paths.pre.validate)
1314

14-
this.addMiddleware(Dataparty.middleware_paths.post.validate)
15-
this.addMiddleware(Dataparty.middleware_paths.post.encrypt)
15+
builder.addMiddleware(Dataparty.middleware_paths.post.validate)
16+
builder.addMiddleware(Dataparty.middleware_paths.post.encrypt)
1617

17-
this.addEndpoint(Dataparty.endpoint_paths.echo)
18-
this.addEndpoint(Dataparty.endpoint_paths.secureecho)
19-
this.addEndpoint(Dataparty.endpoint_paths.identity)
20-
this.addEndpoint(Dataparty.endpoint_paths.version)
18+
builder.addEndpoint(Dataparty.endpoint_paths.echo)
19+
builder.addEndpoint(Dataparty.endpoint_paths.secureecho)
20+
builder.addEndpoint(Dataparty.endpoint_paths.identity)
21+
builder.addEndpoint(Dataparty.endpoint_paths.version)
2122

22-
this.addSchema(Path.join(__dirname, './party/schema/user.js'))
23+
builder.addSchema(Path.join(__dirname, './party/schema/user.js'))
2324
}
2425

2526
}
@@ -31,7 +32,8 @@ async function main(){
3132

3233
const service = new ExampleService({ name: '@dataparty/example', version: '0.0.1' })
3334

34-
const build = await service.compile(Path.join(__dirname,'/dataparty'), true)
35+
const builder = new Dataparty.ServiceBuilder(service)
36+
const build = await builder.compile(Path.join(__dirname,'/dataparty'), true)
3537

3638
debug('built', Object.keys(build))
3739

examples/test-service-node-host.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const fs = require('fs')
12
const Path = require('path')
23
const debug = require('debug')('test.server-db')
34
const Dataparty = require('../src')
@@ -7,18 +8,21 @@ class ExampleService extends Dataparty.IService {
78
constructor(opts){
89
super(opts)
910

10-
this.addMiddleware(Dataparty.middleware_paths.pre.decrypt)
11-
this.addMiddleware(Dataparty.middleware_paths.pre.validate)
11+
let builder = new Dataparty.ServiceBuilder(this)
1212

13-
this.addMiddleware(Dataparty.middleware_paths.post.validate)
14-
this.addMiddleware(Dataparty.middleware_paths.post.encrypt)
13+
builder.addMiddleware(Dataparty.middleware_paths.pre.decrypt)
14+
builder.addMiddleware(Dataparty.middleware_paths.pre.validate)
1515

16-
this.addEndpoint(Dataparty.endpoint_paths.echo)
17-
this.addEndpoint(Dataparty.endpoint_paths.secureecho)
18-
this.addEndpoint(Dataparty.endpoint_paths.identity)
19-
this.addEndpoint(Dataparty.endpoint_paths.version)
16+
builder.addMiddleware(Dataparty.middleware_paths.post.validate)
17+
builder.addMiddleware(Dataparty.middleware_paths.post.encrypt)
2018

21-
this.addSchema(Path.join(__dirname, './party/schema/basic_types.js'))
19+
builder.addEndpoint(Dataparty.endpoint_paths.echo)
20+
builder.addEndpoint(Dataparty.endpoint_paths.secureecho)
21+
builder.addEndpoint(Dataparty.endpoint_paths.identity)
22+
builder.addEndpoint(Dataparty.endpoint_paths.version)
23+
24+
builder.addSchema(Path.join(__dirname, './party/schema/basic_types.js'))
25+
builder.addTopic(Path.join(__dirname, './party/topics/time-topic.js'))
2226
}
2327

2428
}
@@ -31,7 +35,8 @@ async function main(){
3135

3236

3337
const service = new ExampleService({ name: '@dataparty/example', version: '0.0.1' })
34-
const build = await service.compile(Path.join(__dirname,'/dataparty'), true)
38+
const builder = new Dataparty.ServiceBuilder(service)
39+
const build = await builder.compile(Path.join(__dirname,'/dataparty'), true)
3540

3641
const serviceName = build.package.name
3742
const basePath = '/data/dataparty/'
@@ -65,12 +70,17 @@ async function main(){
6570

6671

6772
const runnerRouter = new Dataparty.RunnerRouter(runner)
73+
74+
const ssl_key = fs.readFileSync( Path.join(__dirname,'key.pem'), 'utf8')
75+
const ssl_cert = fs.readFileSync( Path.join(__dirname,'cert.pem'), 'utf8')
6876

6977

7078
const host = new Dataparty.ServiceHost({
79+
listenUri: 'http://0.0.0.0:4000',
7180
runner: runnerRouter,
7281
trust_proxy: true,
7382
wsEnabled: true,
83+
//ssl_key, ssl_cert
7484
})
7585

7686
debug(runner.party.identity)

examples/test-topics-service.js

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
const Path = require('path')
2+
const debug = require('debug')('test.topics-service')
3+
const Dataparty = require('../src')
4+
const dataparty_crypto = require('@dataparty/crypto')
5+
6+
7+
function makeid(length) {
8+
let result = '';
9+
const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
10+
const charactersLength = characters.length;
11+
let counter = 0;
12+
while (counter < length) {
13+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
14+
counter += 1;
15+
}
16+
return result;
17+
}
18+
19+
20+
21+
async function main(){
22+
23+
let config = new Dataparty.Config.MemoryConfig({
24+
basePath:'demo',
25+
cloud: {
26+
uri: 'http://10.36.158.252:4000'
27+
}
28+
})
29+
30+
31+
const remoteIdentity = await Dataparty.Comms.RestComms.HttpGet( await config.read('cloud.uri') + '/identity')
32+
33+
console.log('cloud.uri -',config.read('cloud.uri'))
34+
console.log('\tremoteIdentity', remoteIdentity)
35+
36+
let party = new Dataparty.PeerParty({
37+
comms: new Dataparty.Comms.WebsocketComms({
38+
uri:'ws://10.36.158.252:4000/ws',
39+
discoverRemoteIdentity: false,
40+
remoteIdentity: remoteIdentity,
41+
session: Math.random().toString(36).slice(2)
42+
}),
43+
config: config
44+
})
45+
46+
//window.party = party
47+
await party.start()
48+
49+
console.log('started')
50+
51+
await party.comms.authorized()
52+
53+
console.log('authed')
54+
55+
timeTopic = new party.ROSLIB.Topic({
56+
ros : party.comms.ros,
57+
name : '/time/abc123',
58+
messageType: 'number'
59+
})
60+
61+
62+
timeTopic.subscribe((msg)=>{
63+
console.log(timeTopic.name, msg)
64+
})
65+
66+
67+
let text = makeid(50*1024)
68+
69+
let first = true
70+
71+
async function onTimeout(){
72+
73+
let num = first ? 2:1
74+
75+
first = false
76+
77+
let statusId = 'publish:'+timeTopic.name+':'+ (party.comms.ros.idCounter+num)
78+
79+
80+
party.comms.once(statusId,(status)=>{
81+
82+
setTimeout(onTimeout, 0)
83+
})
84+
85+
console.log('publishing')
86+
87+
await timeTopic.publish({number: Date.now(), text:text})
88+
89+
90+
}
91+
92+
//window.onTimeout = onTimeout
93+
94+
onTimeout()
95+
96+
}
97+
98+
99+
100+
main().catch(err=>{
101+
console.error(err)
102+
})

0 commit comments

Comments
 (0)