Skip to content

Commit

Permalink
fix: using DID from HTTP param if given
Browse files Browse the repository at this point in the history
  • Loading branch information
aaitor committed May 23, 2023
1 parent 94e318e commit 2b29cfc
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 14 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "node-ts",
"version": "1.2.9",
"version": "1.2.10",
"description": "Nevermined Node",
"main": "main.ts",
"scripts": {
Expand Down
42 changes: 29 additions & 13 deletions src/access/access.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ import {
BigNumber,
AgreementData,
ServiceType,
DID,
} from '@nevermined-io/sdk'
import { aes_encryption_256 } from '@nevermined-io/sdk-dtp'

Expand Down Expand Up @@ -136,22 +137,37 @@ export class AccessController {
): Promise<string> {
Logger.debug(`Transferring NFT with agreement ${transferData.agreementId}`)
const nevermined = this.nvmService.getNevermined()
let agreement: AgreementData

let did: DID
try {
agreement = await nevermined.keeper.agreementStoreManager.getAgreement(
transferData.agreementId,
)
// If we get DID from the request, we use it
if (transferData.did) {
did = DID.parse(transferData.did)
}
} catch (e) {
Logger.error(`Error resolving agreement ${transferData.agreementId}`)
Logger.error(e)
throw new NotFoundException(`Agreement ${transferData.agreementId} not found`)
Logger.debug(`Unable to parse DID from the HTTP parameter: ${transferData.did}`)
}
if (!agreement) {
Logger.error(`Agreement ${transferData.agreementId} not found`)
throw new NotFoundException(`Agreement ${transferData.agreementId} not found`)

if (!did) {
// If we don't have a DID, we get it from the events
let agreement: AgreementData
try {
agreement = await nevermined.keeper.agreementStoreManager.getAgreement(
transferData.agreementId,
)
did = DID.parse(agreement.did)
} catch (e) {
Logger.error(`Error resolving agreement ${transferData.agreementId}`)
Logger.error((e as Error).toString())
throw new NotFoundException(`Agreement ${transferData.agreementId} not found`)
}
if (!agreement) {
Logger.error(`Agreement ${transferData.agreementId} not found`)
throw new NotFoundException(`Agreement ${transferData.agreementId} not found`)
}
}

const subscriptionDDO = await this.nvmService.nevermined.assets.resolve(agreement.did)
const subscriptionDDO = await this.nvmService.nevermined.assets.resolve(did.getDid())
const duration = await this.nvmService.getDuration(subscriptionDDO, template as ServiceType)

let expiration = 0
Expand All @@ -162,7 +178,7 @@ export class AccessController {

const params: ValidationParams = {
consumer_address: transferData.nftReceiver,
did: agreement.did,
did: did.getDid(),
agreement_id: transferData.agreementId,
nft_amount: BigNumber.from(transferData.nftAmount || '0'),
buyer: (req.user || {}).buyer,
Expand All @@ -177,7 +193,7 @@ export class AccessController {
} catch (e) {
Logger.error(`Failed to transfer NFT ${e}`)
throw new ForbiddenException(
`Could not transfer nft ${agreement.did} to ${transferData.nftReceiver}`,
`Could not transfer nft ${did.getDid()} to ${transferData.nftReceiver}`,
)
}

Expand Down
7 changes: 7 additions & 0 deletions src/access/dto/transfer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ export class TransferDto {
@IsString()
agreementId: string

@ApiProperty({
description: 'The asset DID',
example: 'did:nv:aaa',
})
@IsString()
did: string

@ApiProperty({
description: 'NFT holder address',
example: '0x...',
Expand Down

0 comments on commit 2b29cfc

Please sign in to comment.