From fb5dcaf52200bc55ab881e6b2ceea74f9c36178b Mon Sep 17 00:00:00 2001 From: Sebastian Gerske Date: Fri, 26 Oct 2018 13:37:09 +0200 Subject: [PATCH] added secret store --- package-lock.json | 34 ++++++++++++------- package.json | 3 +- src/aquarius/AquariusConnectorProvider.ts | 1 - src/keeper/Auth.ts | 2 +- src/keeper/Market.ts | 6 ++-- src/keeper/Web3Provider.ts | 3 -- src/ocean/IdGenerator.ts | 8 +++++ src/ocean/Ocean.ts | 8 ++--- src/secretstore/SecretStoreProvider.ts | 17 ++++------ test/aquarius/Aquarius.test.ts | 40 ++++++++++++----------- test/mocks/SecretStore.mock.ts | 16 +++++++++ test/ocean/IdGenerator.test.ts | 26 +++++++++++++++ test/ocean/Ocean.test.ts | 8 +++-- 13 files changed, 114 insertions(+), 58 deletions(-) create mode 100644 src/ocean/IdGenerator.ts create mode 100644 test/mocks/SecretStore.mock.ts create mode 100644 test/ocean/IdGenerator.test.ts diff --git a/package-lock.json b/package-lock.json index 87b0a17..45e0a19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -125,9 +125,9 @@ "integrity": "sha512-UVt9m9WmFm4mTDWmMekT8lhBh2hWr2baEVnF0dEN3OL5BDAWoynFQeeKtUqTepVuOVgNy5bHYKLiHkCWzbOEqA==" }, "@oceanprotocol/secret-store-client": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@oceanprotocol/secret-store-client/-/secret-store-client-0.0.4.tgz", - "integrity": "sha512-VHzcBkZ5ZKVdLKERshvT48jlWeZTX1x1tDgbqhc1x0nH8H6HC8SZ+Ak834S2t8XTswgTVWygxn8g51jtPy5+BQ==", + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@oceanprotocol/secret-store-client/-/secret-store-client-0.0.6.tgz", + "integrity": "sha512-dJQ7rWQdAkrM79gvLYrT8vm5ZOrjW7XbQR/d2IBIQNS6t09826wZW3Y9kwaiQvKBUIOI9LhbwVuD4Hc0IuXJnQ==", "requires": { "jayson": "^2.0.6", "node-fetch": "^2.2.0" @@ -2002,6 +2002,11 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "uuid": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" } } }, @@ -3644,11 +3649,6 @@ "version": "10.12.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.0.tgz", "integrity": "sha512-3TUHC3jsBAB7qVRGxT6lWyYo2v96BMmD2PTcl47H25Lu7UXtFH/2qqmKiVrnel6Ne//0TFYf6uvNX+HW2FRkLQ==" - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" } } }, @@ -7411,9 +7411,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "2.0.1", - "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", - "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" }, "v8-compile-cache": { "version": "2.0.2", @@ -7602,6 +7602,13 @@ "setimmediate": "1.0.4", "uuid": "2.0.1", "xmlhttprequest": "1.8.0" + }, + "dependencies": { + "uuid": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" + } } }, "hash.js": { @@ -7641,6 +7648,11 @@ "elliptic": "^6.4.0", "xhr-request-promise": "^0.1.2" } + }, + "uuid": { + "version": "2.0.1", + "resolved": "http://registry.npmjs.org/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha1-wqMN7bPlNdcsz4LjQ5QaULqFM6w=" } } }, diff --git a/package.json b/package.json index f787cfa..905d722 100644 --- a/package.json +++ b/package.json @@ -50,13 +50,14 @@ }, "dependencies": { "@oceanprotocol/keeper-contracts": "^0.3.3", - "@oceanprotocol/secret-store-client": "^0.0.4", + "@oceanprotocol/secret-store-client": "^0.0.6", "bignumber.js": "^7.2.1", "eth-crypto": "^1.2.4", "eth-ecies": "^1.0.3", "ethereumjs-util": "^6.0.0", "jsonwebtoken": "^8.3.0", "node-fetch": "^2.2.0", + "uuid": "^3.3.2", "web3": "1.0.0-beta.36", "web3-utils": "1.0.0-beta.36" }, diff --git a/src/aquarius/AquariusConnectorProvider.ts b/src/aquarius/AquariusConnectorProvider.ts index edc9d1f..997e659 100644 --- a/src/aquarius/AquariusConnectorProvider.ts +++ b/src/aquarius/AquariusConnectorProvider.ts @@ -15,7 +15,6 @@ export default class AquariusConnectorProvider { if (!AquariusConnectorProvider.connector) { AquariusConnectorProvider.connector = new AquariusConnector() } - Logger.log("getting", typeof AquariusConnectorProvider.connector.constructor.name) return AquariusConnectorProvider.connector } diff --git a/src/keeper/Auth.ts b/src/keeper/Auth.ts index f771947..b4d9d14 100644 --- a/src/keeper/Auth.ts +++ b/src/keeper/Auth.ts @@ -27,7 +27,7 @@ export default class OceanAuth extends ContractBase { public async initiateAccessRequest(asset: Asset, publicKey: string, timeout: number, buyerAddress: string): Promise { - const args = [asset.getId(), asset.publisher.getId(), publicKey, timeout] + const args = ["0x" + asset.getId(), asset.publisher.getId(), publicKey, timeout] return this.sendTransaction("initiateAccessRequest", buyerAddress, args) } diff --git a/src/keeper/Market.ts b/src/keeper/Market.ts index 2a18de1..b99fa57 100644 --- a/src/keeper/Market.ts +++ b/src/keeper/Market.ts @@ -13,7 +13,7 @@ export default class OceanMarket extends ContractBase { // call functions (costs no gas) public async isAssetActive(assetId: string): Promise { - return this.call("checkAsset", [assetId]) + return this.call("checkAsset", ["0x" + assetId]) } public async verifyOrderPayment(orderId: string): Promise { @@ -21,7 +21,7 @@ export default class OceanMarket extends ContractBase { } public async getAssetPrice(assetId: string): Promise { - return this.call("getAssetPrice", [assetId]) + return this.call("getAssetPrice", ["0x" + assetId]) .then((price: string) => new BigNumber(price).toNumber()) } @@ -34,7 +34,7 @@ export default class OceanMarket extends ContractBase { } public async register(assetId: string, price: number, publisherAddress: string): Promise { - return this.sendTransaction("register", publisherAddress, [assetId, price]) + return this.sendTransaction("register", publisherAddress, ["0x" + assetId, price]) } public async payOrder(order: Order, publisherAddress: string, diff --git a/src/keeper/Web3Provider.ts b/src/keeper/Web3Provider.ts index 6bc5901..5f92759 100644 --- a/src/keeper/Web3Provider.ts +++ b/src/keeper/Web3Provider.ts @@ -1,8 +1,5 @@ import * as Web3 from "web3" import ConfigProvider from "../ConfigProvider" -import Logger from "../utils/Logger" - -Logger.log("using web3", Web3.version) export default class Web3Provider { diff --git a/src/ocean/IdGenerator.ts b/src/ocean/IdGenerator.ts new file mode 100644 index 0000000..24a555b --- /dev/null +++ b/src/ocean/IdGenerator.ts @@ -0,0 +1,8 @@ +import * as v4 from "uuid/v4" + +export default class IdGenerator { + public static generateId(): string { + const id = `${v4()}${v4()}` + return id.replace(/-/g, "") + } +} diff --git a/src/ocean/Ocean.ts b/src/ocean/Ocean.ts index 914c0ff..d4dbad7 100644 --- a/src/ocean/Ocean.ts +++ b/src/ocean/Ocean.ts @@ -8,6 +8,7 @@ import Logger from "../utils/Logger" import Account from "./Account" import Asset from "./Asset" import Order from "./Order" +import IdGenerator from "./IdGenerator" export default class Ocean { @@ -15,7 +16,6 @@ export default class Ocean { if (!Ocean.instance) { ConfigProvider.setConfig(config) - SecretStoreProvider.configure(config) Ocean.instance = new Ocean(await Keeper.getInstance()) } @@ -42,12 +42,8 @@ export default class Ocean { const secretStore = SecretStoreProvider.getSecretStore() - const id = Math.random().toString(10) - Logger.log("id", id) + const assetId = IdGenerator.generateId() - const assetId = (await market.generateId(id)).replace("0x", "") - - Logger.log(assetId.length) const encryptedDocument = await secretStore.encryptDocument(assetId, asset) const decryptedDocument = await secretStore.decryptDocument(assetId, encryptedDocument) diff --git a/src/secretstore/SecretStoreProvider.ts b/src/secretstore/SecretStoreProvider.ts index 3226436..45007cb 100644 --- a/src/secretstore/SecretStoreProvider.ts +++ b/src/secretstore/SecretStoreProvider.ts @@ -1,24 +1,21 @@ import SecretStore from "@oceanprotocol/secret-store-client" +import ConfigProvider from "../ConfigProvider" export default class SecretStoreProvider { + public static setSecretStore(secretStore: SecretStore) { + + SecretStoreProvider.secretStore = secretStore + } + public static getSecretStore() { if (!SecretStoreProvider.secretStore) { - SecretStoreProvider.secretStore = new SecretStore(SecretStoreProvider.config) + SecretStoreProvider.secretStore = new SecretStore(ConfigProvider.getConfig()) } return SecretStoreProvider.secretStore } - public static configure(config: { - secretStoreUri: string, parityUri: string, - address: string, password: string, threshold?: number, - }) { - - SecretStoreProvider.config = config - } - - private static config: any private static secretStore: SecretStore } diff --git a/test/aquarius/Aquarius.test.ts b/test/aquarius/Aquarius.test.ts index 9a4529e..5509b5d 100644 --- a/test/aquarius/Aquarius.test.ts +++ b/test/aquarius/Aquarius.test.ts @@ -4,30 +4,32 @@ import AquariusConnectorProvider from "../../src/aquarius/AquariusConnectorProvi import config from "../config" import AquariusConnectorMock from "../mocks/AquariusConnector.mock" -before(() => { - AquariusConnectorProvider.setConnector(new AquariusConnectorMock()) -}) - describe("Aquarius", () => { - describe("#queryMetadata()", async () => { + before(() => { + AquariusConnectorProvider.setConnector(new AquariusConnectorMock()) + }) - const aquarius: Aquarius = new Aquarius(config) + describe("#queryMetadata()", () => { - const query = { - offset: 100, - page: 0, - query: { - value: 1, - }, - sort: { - value: 1, - }, - text: "Office", - } + it("should query metadata", async () => { + const aquarius: Aquarius = new Aquarius(config) - const result: any[] = await aquarius.queryMetadata(query) - assert(result) + const query = { + offset: 100, + page: 0, + query: { + value: 1, + }, + sort: { + value: 1, + }, + text: "Office", + } + + const result: any[] = await aquarius.queryMetadata(query) + assert(result) + }) }) }) diff --git a/test/mocks/SecretStore.mock.ts b/test/mocks/SecretStore.mock.ts new file mode 100644 index 0000000..8b6ca6e --- /dev/null +++ b/test/mocks/SecretStore.mock.ts @@ -0,0 +1,16 @@ +import SecretStore from "@oceanprotocol/secret-store-client" + +export default class SecretStoreMock extends SecretStore { + + public async encryptDocument(documentId, document: any) { + + return "0x283asdgahd1t371t23h" + } + + public async decryptDocument(documentId, encryptedDocument: any) { + + return { + doc: "test", + } + } +} diff --git a/test/ocean/IdGenerator.test.ts b/test/ocean/IdGenerator.test.ts new file mode 100644 index 0000000..2154bee --- /dev/null +++ b/test/ocean/IdGenerator.test.ts @@ -0,0 +1,26 @@ +import * as assert from "assert" +import IdGenerator from "../../src/ocean/IdGenerator" + +describe("IdGenerator", () => { + + describe("#generateId()", () => { + + it("should generate an id", async () => { + + const id = IdGenerator.generateId() + assert(id) + }) + + it("should generate an id that is 64 chars long", async () => { + + const id: string = IdGenerator.generateId() + assert(id.length === 64, id) + }) + + it("should not contain -", async () => { + + const id: string = IdGenerator.generateId() + assert(id.indexOf("-") === -1) + }) + }) +}) diff --git a/test/ocean/Ocean.test.ts b/test/ocean/Ocean.test.ts index 905a0ef..7a9df7f 100644 --- a/test/ocean/Ocean.test.ts +++ b/test/ocean/Ocean.test.ts @@ -6,8 +6,10 @@ import Account from "../../src/ocean/Account" import Asset from "../../src/ocean/Asset" import Ocean from "../../src/ocean/Ocean" import Order from "../../src/ocean/Order" +import SecretStoreProvider from "../../src/secretstore/SecretStoreProvider" import config from "../config" import AquariusMock from "../mocks/Aquarius.mock" +import SecretStoreMock from "../mocks/SecretStore.mock" let ocean: Ocean let accounts: Account[] @@ -24,6 +26,7 @@ describe("Ocean", () => { before(async () => { ConfigProvider.setConfig(config) AquariusProvider.setAquarius(new AquariusMock(config)) + SecretStoreProvider.setSecretStore(new SecretStoreMock(config)) await ContractHandler.deployContracts() ocean = await Ocean.getInstance(config) accounts = await ocean.getAccounts() @@ -62,10 +65,9 @@ describe("Ocean", () => { const assetId: string = await ocean.register(testAsset) - assert(assetId.length === 66) - assert(assetId.startsWith("0x")) + assert(assetId.length === 64) + assert(!assetId.startsWith("0x")) }) - }) describe("#getOrdersByConsumer()", () => {