1
0
mirror of https://github.com/oceanprotocol/ocean.js.git synced 2024-11-26 20:39:05 +01:00
ocean.js/src/ocean/AssetsCredential.ts
kianyee 0f46959dfa
Feature/credentials support in asset (#787)
* [KianYee] Add credentials in DDO

Co-authored-by: alexcos20 <alex.coseru@gmail.com>
2021-06-02 16:51:13 +03:00

170 lines
4.5 KiB
TypeScript

import { DDO } from '../ddo/DDO'
import {
Credentials,
Credential,
CredentialType,
CredentialAction
} from '../ddo/interfaces/Credentials'
/**
* checks if a credential list exists for a specific action
* @param {credentials} Credentials list of crentials from ddo
* @param {credentialType} CredentialType e.g. address / credential3Box
* @param {credentialAction} CredentialAction allow or deny
* @return {boolean}
*/
export function checkCredentialExist(
credentials: Credentials,
credentialType: CredentialType,
credentialAction: CredentialAction
): boolean {
let isExist = false
if (credentialAction === 'allow') {
if (credentials && credentials.allow) {
const allowList = credentials.allow.find(
(credential) => credential.type === credentialType
)
isExist = allowList && allowList.value.length > 0
}
return isExist
} else {
if (credentials && credentials.deny) {
const dennyList = credentials.deny.find(
(credential) => credential.type === credentialType
)
isExist = dennyList && dennyList.value.length > 0
}
return isExist
}
}
/**
* Removes all credentials of a certain type for a specific action
* @param {ddo} DDO
* @param {credentialType} CredentialType e.g. address / credential3Box
* @param {credentialAction} CredentialAction allow or deny
* @return {DDO}
*/
export function removeCredentialDetail(
ddo: DDO,
credentialType: CredentialType,
credentialAction: CredentialAction
): DDO {
const exists = this.checkCredentialExist(
ddo.credentials,
credentialType,
credentialAction
)
if (credentialAction === 'allow') {
if (exists) {
ddo.credentials.allow = ddo.credentials.allow.filter(
(credential) => credential.type !== credentialType
)
}
if (!ddo.credentials.allow) {
ddo.credentials = {
deny: ddo.credentials.deny
}
}
} else {
if (exists) {
ddo.credentials.deny = ddo.credentials.deny.filter(
(credential) => credential.type !== credentialType
)
}
if (!ddo.credentials.deny) {
ddo.credentials = {
allow: ddo.credentials.allow
}
}
}
return ddo
}
/**
* Updates credentials of a certain type for a specific action
* @param {ddo} DDO
* @param {credentialType} CredentialType e.g. address / credential3Box
* @param {list} string[] list of values
* @param {credentialAction} CredentialAction allow or deny
* @return {DDO}
*/
export function updateCredentialDetail(
ddo: DDO,
credentialType: CredentialType,
list: string[],
credentialAction: CredentialAction
): DDO {
const exists = this.checkCredentialExist(
ddo.credentials,
credentialType,
credentialAction
)
if (credentialAction === 'allow') {
if (exists) {
ddo.credentials.allow.find((credential) => {
if (credential.type === credentialType) {
credential.value = list
}
})
} else {
return this.addCredentialDetail(ddo, credentialType, list, credentialAction)
}
} else {
if (exists) {
ddo.credentials.deny.find((credential) => {
if (credential.type === credentialType) {
credential.value = list
}
})
} else {
return this.addCredentialDetail(ddo, credentialType, list, credentialAction)
}
}
return ddo
}
/**
* Adds values to credentials of a certain type for a specific action
* @param {ddo} DDO
* @param {credentialType} CredentialType e.g. address / credential3Box
* @param {list} string[] list of values
* @param {credentialAction} CredentialAction allow or deny
* @return {DDO}
*/
export function addCredentialDetail(
ddo: DDO,
credentialType: CredentialType,
list: string[],
credentialAction: CredentialAction
) {
const newCredentialDetail: Credential = {
type: credentialType,
value: list
}
if (credentialAction === 'allow') {
if (ddo.credentials && ddo.credentials.allow) {
ddo.credentials.allow.push(newCredentialDetail)
} else {
const newCredentials: Credentials = {
allow: [newCredentialDetail],
deny: ddo.credentials && ddo.credentials.deny
}
ddo.credentials = newCredentials
}
} else {
if (ddo.credentials && ddo.credentials.deny) {
ddo.credentials.deny.push(newCredentialDetail)
} else {
const newCredential: Credentials = {
allow: ddo.credentials && ddo.credentials.allow,
deny: [newCredentialDetail]
}
ddo.credentials = newCredential
}
}
return ddo
}