mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-06-22 22:12:31 +00:00
Refactor OrbitClient. Remove obsolete dep from MetaInfo.
This commit is contained in:
parent
e8ed893457
commit
7e1007948d
@ -1,7 +1,5 @@
|
|||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var encryption = require('./Encryption');
|
|
||||||
|
|
||||||
class MetaInfo {
|
class MetaInfo {
|
||||||
constructor(type, size, ts) {
|
constructor(type, size, ts) {
|
||||||
this.type = type;
|
this.type = type;
|
||||||
|
@ -10,29 +10,14 @@ var MetaInfo = require('./MetaInfo');
|
|||||||
var ItemTypes = require('./ItemTypes');
|
var ItemTypes = require('./ItemTypes');
|
||||||
var Keystore = require('./Keystore');
|
var Keystore = require('./Keystore');
|
||||||
var Post = require('./Post');
|
var Post = require('./Post');
|
||||||
var encryption = require('./Encryption');
|
var Encryption = require('./Encryption');
|
||||||
|
|
||||||
var pubkey = Keystore.getKeys().publicKey;
|
var pubkey = Keystore.getKeys().publicKey;
|
||||||
var privkey = Keystore.getKeys().privateKey;
|
var privkey = Keystore.getKeys().privateKey;
|
||||||
|
|
||||||
class OrbitClientFactory {
|
|
||||||
static connect(host, username, password, ipfs) {
|
|
||||||
if(!ipfs) {
|
|
||||||
var ipfsd = await(ipfsDaemon());
|
|
||||||
ipfs = ipfsd.daemon;
|
|
||||||
}
|
|
||||||
|
|
||||||
var client = new OrbitClient(host, username, password, ipfs);
|
|
||||||
await(client._connect())
|
|
||||||
return client;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
class OrbitClient {
|
class OrbitClient {
|
||||||
constructor(host, username, password, ipfs) {
|
constructor(ipfs) {
|
||||||
this.host = host;
|
this.sequences = {};
|
||||||
this.credentials = { username: username, password: password };
|
|
||||||
this.channels = {};
|
|
||||||
this.ipfs = ipfs;
|
this.ipfs = ipfs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,23 +25,24 @@ class OrbitClient {
|
|||||||
return {
|
return {
|
||||||
iterator: (options) => this._iterator(hash, password, options),
|
iterator: (options) => this._iterator(hash, password, options),
|
||||||
send: (text, options) => {
|
send: (text, options) => {
|
||||||
if(!this.channels[hash]) {
|
this.sequences[hash] = !this.sequences[hash] ? this._getChannelSequence(hash, password) : this.sequences[hash] + 1;
|
||||||
this.channels[hash] = { seq: 0 }
|
|
||||||
var item = await(this.client.linkedList(hash, password).head())
|
|
||||||
if(item.head) {
|
|
||||||
var headItem = await (ipfsAPI.getObject(this.ipfs, item.head));
|
|
||||||
this.channels[hash] = { seq: JSON.parse(headItem.Data)["seq"] + 1 }
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.channels[hash] = { seq: this.channels[hash].seq + 1 }
|
|
||||||
}
|
|
||||||
return this._send(hash, password, text, options);
|
return this._send(hash, password, text, options);
|
||||||
},
|
},
|
||||||
delete: () => this._delete(hash, password),
|
delete: () => this._delete(hash, password),
|
||||||
setMode: (mode) => { /* TODO */ }
|
setMode: (mode) => this._setMode(hash, modes)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_getChannelSequence(channel, password) {
|
||||||
|
var seq = 0
|
||||||
|
var item = await(this.client.linkedList(channel, password).head())
|
||||||
|
if(item.head) {
|
||||||
|
var headItem = await (ipfsAPI.getObject(this.ipfs, item.head));
|
||||||
|
seq = JSON.parse(headItem.Data)["seq"] + 1;
|
||||||
|
}
|
||||||
|
return seq;
|
||||||
|
}
|
||||||
|
|
||||||
_iterator(channel, password, options) {
|
_iterator(channel, password, options) {
|
||||||
var currentIndex = 0;
|
var currentIndex = 0;
|
||||||
var messages = [];
|
var messages = [];
|
||||||
@ -118,7 +104,6 @@ class OrbitClient {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// return Promise.resolve(iterator);
|
|
||||||
return iterator;
|
return iterator;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,12 +114,12 @@ class OrbitClient {
|
|||||||
var data = JSON.parse(item.Data);
|
var data = JSON.parse(item.Data);
|
||||||
|
|
||||||
// verify
|
// verify
|
||||||
var verified = encryption.verify(data.target, data.pubkey, data.sig, data.seq, password);
|
var verified = Encryption.verify(data.target, data.pubkey, data.sig, data.seq, password);
|
||||||
if(!verified) throw "Item '" + hash + "' has the wrong signature"
|
if(!verified) throw "Item '" + hash + "' has the wrong signature"
|
||||||
|
|
||||||
// decrypt
|
// decrypt
|
||||||
var targetDec = encryption.decrypt(data.target, privkey, 'TODO: pubkey');
|
var targetDec = Encryption.decrypt(data.target, privkey, 'TODO: pubkey');
|
||||||
var metaDec = encryption.decrypt(data.meta, privkey, 'TODO: pubkey');
|
var metaDec = Encryption.decrypt(data.meta, privkey, 'TODO: pubkey');
|
||||||
data.target = targetDec;
|
data.target = targetDec;
|
||||||
data.meta = JSON.parse(metaDec);
|
data.meta = JSON.parse(metaDec);
|
||||||
item.Data = data;
|
item.Data = data;
|
||||||
@ -171,7 +156,7 @@ class OrbitClient {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_createMessage(channel, password, post) {
|
_createMessage(channel, password, post) {
|
||||||
var seq = this.channels[channel].seq;
|
var seq = this.sequences[channel];
|
||||||
var size = -1;
|
var size = -1;
|
||||||
var metaInfo = new MetaInfo(ItemTypes.Message, size, new Date().getTime());
|
var metaInfo = new MetaInfo(ItemTypes.Message, size, new Date().getTime());
|
||||||
var hcItem = new HashCacheItem(seq, post.Hash, metaInfo, pubkey, privkey, password);
|
var hcItem = new HashCacheItem(seq, post.Hash, metaInfo, pubkey, privkey, password);
|
||||||
@ -199,15 +184,32 @@ class OrbitClient {
|
|||||||
|
|
||||||
_delete(channel, password) {
|
_delete(channel, password) {
|
||||||
await(this.client.linkedList(channel, password).delete())
|
await(this.client.linkedList(channel, password).delete())
|
||||||
delete this.channels[channel];
|
delete this.sequences[channel];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
_connect() {
|
_setMode(channel, modes) {
|
||||||
this.client = await(HashCache.connect(this.host, this.credentials.username, this.credentials.password));
|
/* TODO */
|
||||||
|
}
|
||||||
|
|
||||||
|
_connect(host, username, password) {
|
||||||
|
this.client = await(HashCache.connect(host, username, password));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class OrbitClientFactory {
|
||||||
|
static connect(host, username, password, ipfs) {
|
||||||
|
if(!ipfs) {
|
||||||
|
var ipfsd = await(ipfsDaemon());
|
||||||
|
ipfs = ipfsd.daemon;
|
||||||
|
}
|
||||||
|
|
||||||
|
var client = new OrbitClient(ipfs);
|
||||||
|
await(client._connect(host, username, password))
|
||||||
|
return client;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = OrbitClientFactory;
|
module.exports = OrbitClientFactory;
|
||||||
|
@ -75,9 +75,6 @@ describe('Orbit Client', () => {
|
|||||||
it('connects to hash-cache-server', async((done) => {
|
it('connects to hash-cache-server', async((done) => {
|
||||||
assert.notEqual(orbit, null);
|
assert.notEqual(orbit, null);
|
||||||
assert.notEqual(orbit.client, null);
|
assert.notEqual(orbit.client, null);
|
||||||
assert.equal(orbit.host, host);
|
|
||||||
assert.equal(orbit.credentials.username, username);
|
|
||||||
assert.equal(orbit.credentials.password, password);
|
|
||||||
done();
|
done();
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user