151 lines
2.4 KiB
TypeScript
151 lines
2.4 KiB
TypeScript
import * as crypto from 'crypto';
|
||
|
||
import { Signable, Signature, KeyStore } from '../src/auth';
|
||
import { Store } from '../src/store';
|
||
import { PubSub, SubConsumer } from '../src/transport';
|
||
import { Syncable } from '../src/sync';
|
||
|
||
class MockStore implements Store {
|
||
|
||
contents: Object
|
||
name: string
|
||
|
||
constructor(name:string) {
|
||
this.name = name;
|
||
this.contents = {};
|
||
}
|
||
|
||
public put(k:string, v:Syncable, existsOk = false) {
|
||
if (!existsOk && this.contents[k] !== undefined) {
|
||
throw '"' + k + '" already exists in store ' + this.name;
|
||
}
|
||
this.contents[k] = v;
|
||
}
|
||
|
||
public get(k:string): Syncable {
|
||
return this.contents[k];
|
||
}
|
||
|
||
public delete(k:string) {
|
||
delete this.contents[k];
|
||
}
|
||
}
|
||
|
||
class MockSigner {
|
||
onsign: (string) => void
|
||
onverify: (boolean) => void
|
||
public verify(src:string, signature:Signature) {
|
||
return true;
|
||
}
|
||
|
||
public sign(s:string):boolean {
|
||
this.onsign('there would be a signature here');
|
||
return true;
|
||
}
|
||
|
||
public prepare(m:Signable):boolean {
|
||
return true;
|
||
}
|
||
|
||
public fingerprint():string {
|
||
return '';
|
||
}
|
||
}
|
||
|
||
class MockConsumer implements SubConsumer {
|
||
|
||
omnoms: Array<string>
|
||
|
||
constructor() {
|
||
this.omnoms = Array<string>();
|
||
}
|
||
|
||
public post(v:string) {
|
||
this.omnoms.push(v);
|
||
}
|
||
}
|
||
|
||
class MockPubSub implements PubSub {
|
||
|
||
pubs: Array<string>
|
||
consumer: SubConsumer
|
||
|
||
constructor(name:string, consumer:SubConsumer) {
|
||
this.pubs = Array<string>();
|
||
this.consumer = consumer;
|
||
}
|
||
|
||
public pub(v:string): boolean {
|
||
this.pubs.push(v);
|
||
return true;
|
||
}
|
||
|
||
public flush() {
|
||
while (this.pubs.length > 0) {
|
||
const s = this.pubs.shift();
|
||
this.consumer.post(s);
|
||
}
|
||
}
|
||
|
||
public close() {
|
||
}
|
||
}
|
||
|
||
class MockSignable implements Signable {
|
||
|
||
src: string
|
||
dst: string
|
||
|
||
constructor(src:string) {
|
||
this.src = src;
|
||
}
|
||
|
||
public digest():string {
|
||
const h = crypto.createHash('sha256');
|
||
h.update(this.src);
|
||
this.dst= h.digest('hex');
|
||
return this.dst;
|
||
}
|
||
|
||
}
|
||
|
||
class MockKeyStore implements KeyStore {
|
||
|
||
pk: any
|
||
pubks: Array<any>
|
||
|
||
constructor(pk:any, pubks:Array<any>) {
|
||
this.pk = pk;
|
||
this.pubks = pubks;
|
||
}
|
||
|
||
public getPrivateKey(): any {
|
||
return this.pk;
|
||
}
|
||
|
||
public getTrustedKeys(): Array<any> {
|
||
return this.pubks;
|
||
}
|
||
|
||
public getTrustedActiveKeys(): Array<any> {
|
||
return [];
|
||
}
|
||
|
||
public getEncryptKeys(): Array<any> {
|
||
return [];
|
||
}
|
||
|
||
public getFingerprint(): string {
|
||
return '';
|
||
}
|
||
}
|
||
|
||
export {
|
||
MockStore,
|
||
MockPubSub,
|
||
MockConsumer,
|
||
MockSignable,
|
||
MockKeyStore,
|
||
MockSigner,
|
||
};
|