1
0
mirror of https://github.com/oceanprotocol-archive/squid-js.git synced 2024-02-02 15:31:51 +01:00
squid-js/src/ocean/OceanSecretStore.ts

95 lines
3.1 KiB
TypeScript
Raw Normal View History

2019-07-12 16:56:01 +02:00
import SecretStore from '@oceanprotocol/secret-store-client'
import SecretStoreConfig from '@oceanprotocol/secret-store-client/dist/models/SecretStoreConfig'
2019-06-20 00:20:09 +02:00
import Account from './Account'
import { noDidPrefixed } from '../utils'
import { Instantiable, InstantiableConfig } from '../Instantiable.abstract'
2019-02-14 11:26:12 +01:00
/**
* SecretStore submodule of Ocean Protocol.
*/
export class OceanSecretStore extends Instantiable {
2019-02-14 11:26:12 +01:00
/**
* Returns the instance of OceanSecretStore.
* @return {Promise<OceanSecretStore>}
*/
2019-11-15 00:00:10 +01:00
public static async getInstance(
config: InstantiableConfig
): Promise<OceanSecretStore> {
const instance = new OceanSecretStore()
instance.setInstanceConfig(config)
2019-02-14 11:26:12 +01:00
return instance
2019-02-14 11:26:12 +01:00
}
/**
* Encrypt the given text and store the encryption keys using the `did`.
* The encrypted text can be decrypted using the same keys identified by the `did`.
* @param {string} did Decentralized ID.
* @param {string} content Content to be encrypted.
* @param {string} publisher Publisher account.
* @return {Promise<string>} Encrypted text.
*/
2019-11-15 00:00:10 +01:00
public async encrypt(
did: string,
document: any,
publisher: Account
): Promise<string> {
const signature =
2019-06-20 00:20:09 +02:00
(await publisher.getToken()) ||
2019-11-15 00:00:10 +01:00
(await this.ocean.utils.signature.signText(
noDidPrefixed(did),
publisher.getId(),
publisher.getPassword()
))
2019-02-14 11:26:12 +01:00
2019-11-15 00:00:10 +01:00
return this.ocean.brizo.encrypt(
noDidPrefixed(did),
signature,
document,
publisher.getId()
)
2019-02-14 11:26:12 +01:00
}
/**
* Decrypt an encrypted text using the stored encryption keys associated with the `did`.
* Decryption requires that the account owner has access permissions for this `did`
* @param {string} did Decentralized ID.
* @param {string} content Content to be encrypted.
* @param {string} consumer cONSUMER account.
* @return {Promise<string>} Encrypted text.
*/
2019-11-15 00:00:10 +01:00
public async decrypt(
did: string,
content: string,
consumer?: Account,
secretStoreUrl?: string
): Promise<any> {
return this.getSecretStoreByAccount(consumer, secretStoreUrl).decryptDocument(
noDidPrefixed(did),
content
)
}
private getSecretStoreByAccount(account: Account, secretStoreUrl?: string) {
2019-07-12 16:56:01 +02:00
const config: any = { ...this.config }
if (account) {
config.address = account.getId()
}
if (account && account.getPassword()) {
config.password = account.getPassword()
}
if (secretStoreUrl) {
config.secretStoreUri = secretStoreUrl
}
return this.getSecretStore(config)
}
private getSecretStore(config: SecretStoreConfig): SecretStore {
2019-09-09 12:18:54 +02:00
const { secretStoreUri, parityUri, password, address, threshold } = config
2019-07-12 16:56:01 +02:00
config = { secretStoreUri, parityUri, password, address, threshold }
return new SecretStore(config)
}
2019-02-14 11:26:12 +01:00
}