Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion samples/cliConfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"indyNamespace": "indicio:demonet"
},
{
"genesisTransactions": "https://raw.githubusercontent.com/bcgov/von-network/main/BCovrin/genesis_test",
"genesisTransactions": "https://test.bcovrin.vonx.io/genesis",
"indyNamespace": "bcovrin:testnet"
}
],
Expand Down
5 changes: 1 addition & 4 deletions src/cliAgent.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Note: For now we need to import askar-nodejs at the top to handle the undefined askar issue
// Refer from: https://github.com/credebl/mobile-sdk/blob/main/packages/ssi/src/wallet/wallet.ts
import '@openwallet-foundation/askar-nodejs'
import '@hyperledger/indy-vdr-nodejs'

Check warning on line 4 in src/cliAgent.ts

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

'@hyperledger/indy-vdr-nodejs' imported multiple times.

See more on https://sonarcloud.io/project/issues?id=credebl_afj-controller&issues=AZ0kY8M-0OeoVF5y7Moe&open=AZ0kY8M-0OeoVF5y7Moe&pullRequest=350
import type { AskarModuleConfigStoreOptions } from '@credo-ts/askar'
import type { InitConfig } from '@credo-ts/core'
import type { IndyVdrPoolConfig } from '@credo-ts/indy-vdr'
Expand Down Expand Up @@ -193,10 +194,6 @@
w3cCredentials: new W3cCredentialsModule(),
didcomm: new DidCommModule({
processDidCommMessagesConcurrently: true,
anoncreds: new AnonCredsModule({
registries: [new IndyVdrAnonCredsRegistry()],
anoncreds,
}),
mediationRecipient: true,
messagePickup: true,
mediator: false,
Expand Down
264 changes: 135 additions & 129 deletions src/controllers/anoncreds/cred-def/CredentialDefinitionController.ts
Original file line number Diff line number Diff line change
@@ -1,142 +1,148 @@
// import type { RestAgentModules } from '../../../cliAgent'
// import type { SchemaId } from '../../examples'
import type { RestAgentModules } from '../../../cliAgent'
import type { SchemaId } from '../../examples'

// import { getUnqualifiedCredentialDefinitionId, parseIndyCredentialDefinitionId } from '@credo-ts/anoncreds'
// import { Agent } from '@credo-ts/core'
// import { Request as Req } from 'express'
// import { Body, Controller, Example, Get, Path, Post, Route, Tags, Security, Response, Request } from 'tsoa'
// import { injectable } from 'tsyringe'
import { getUnqualifiedCredentialDefinitionId, parseIndyCredentialDefinitionId } from '@credo-ts/anoncreds'
import { Agent } from '@credo-ts/core'
import { Request as Req } from 'express'
import { Body, Controller, Example, Get, Path, Post, Route, Tags, Security, Response, Request } from 'tsoa'
import { injectable } from 'tsyringe'

// import { CredentialEnum, EndorserMode, SchemaError, SCOPES } from '../../../enums'
// import ErrorHandlingService from '../../../errorHandlingService'
// import { ENDORSER_DID_NOT_PRESENT } from '../../../errorMessages'
// import { BadRequestError, InternalServerError, NotFoundError } from '../../../errors/errors'
// import { CredentialDefinitionExample, CredentialDefinitionId } from '../../examples'
import { CredentialEnum, EndorserMode, SchemaError, SCOPES } from '../../../enums'
import ErrorHandlingService from '../../../errorHandlingService'
import { ENDORSER_DID_NOT_PRESENT } from '../../../errorMessages'
import { BadRequestError, InternalServerError, NotFoundError } from '../../../errors/errors'
import { CredentialDefinitionExample, CredentialDefinitionId } from '../../examples'
import {
CredentialDefinitionStates,
GetCredentialDefinitionReturn,
RegisterCredentialDefinitionReturn,
} from '../../types'

// @Tags('Anoncreds - Credential Definitions')
// @Route('/anoncreds/credential-definitions')
// @Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT])
// @injectable()
// export class CredentialDefinitionController extends Controller {
// /**
// * Retrieve credential definition by credential definition id
// *
// * @param credentialDefinitionId
// * @returns CredDef
// */
// @Example(CredentialDefinitionExample)
// @Get('/:credentialDefinitionId')
// public async getCredentialDefinitionById(
// @Request() request: Req,
// @Path('credentialDefinitionId') credentialDefinitionId: CredentialDefinitionId,
// ) {
// try {
// const credentialDefinitionResult =
// await request.agent.modules.anoncreds.getCredentialDefinition(credentialDefinitionId)
@Tags('Anoncreds - Credential Definitions')
@Route('/anoncreds/credential-definitions')
@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT])
@injectable()
export class CredentialDefinitionController extends Controller {
/**
* Retrieve credential definition by credential definition id
*
* @param credentialDefinitionId
* @returns CredDef
*/
@Example(CredentialDefinitionExample)
@Get('/:credentialDefinitionId')
public async getCredentialDefinitionById(
@Request() request: Req,
@Path('credentialDefinitionId') credentialDefinitionId: CredentialDefinitionId,
): Promise<GetCredentialDefinitionReturn> {
try {
const credentialDefinitionResult =
await request.agent.modules.anoncreds.getCredentialDefinition(credentialDefinitionId)

// if (credentialDefinitionResult.resolutionMetadata?.error === SchemaError.NotFound) {
// throw new NotFoundError(credentialDefinitionResult.resolutionMetadata.message)
// }
// const error = credentialDefinitionResult.resolutionMetadata?.error
if (credentialDefinitionResult.resolutionMetadata?.error === SchemaError.NotFound) {
throw new NotFoundError(credentialDefinitionResult.resolutionMetadata.message)
}
const error = credentialDefinitionResult.resolutionMetadata?.error

// if (error === 'invalid' || error === SchemaError.UnSupportedAnonCredsMethod) {
// throw new BadRequestError(credentialDefinitionResult.resolutionMetadata.message)
// }
if (error === 'invalid' || error === SchemaError.UnSupportedAnonCredsMethod) {
throw new BadRequestError(credentialDefinitionResult.resolutionMetadata.message)
}

// if (error !== undefined || credentialDefinitionResult.credentialDefinition === undefined) {
// throw new InternalServerError(credentialDefinitionResult.resolutionMetadata.message)
// }
if (error !== undefined || credentialDefinitionResult.credentialDefinition === undefined) {
throw new InternalServerError(credentialDefinitionResult.resolutionMetadata.message)
}

// return credentialDefinitionResult
// } catch (error) {
// throw ErrorHandlingService.handle(error)
// }
// }
return credentialDefinitionResult
} catch (error) {
throw ErrorHandlingService.handle(error)
}
}

// /**
// * Creates a new credential definition.
// *
// * @param credentialDefinitionRequest
// * @returns CredDef
// */
// @Example(CredentialDefinitionExample)
// @Response(200, 'Action required')
// @Response(202, 'Wait for action to complete')
// @Post('/')
// public async createCredentialDefinition(
// @Request() request: Req,
// @Body()
// credentialDefinitionRequest: {
// issuerId: string
// schemaId: SchemaId
// tag: string
// endorse?: boolean
// endorserDid?: string
// },
// ) {
// try {
// const { issuerId, schemaId, tag, endorse, endorserDid } = credentialDefinitionRequest
// credentialDefinitionRequest.endorse = credentialDefinitionRequest.endorse
// ? credentialDefinitionRequest.endorse
// : false
// const credDef = {
// issuerId,
// schemaId,
// tag,
// type: 'CL',
// }
// const credentialDefinitionPayload = {
// credentialDefinition: credDef,
// options: {
// endorserMode: '',
// endorserDid: '',
// supportRevocation: false,
// },
// }
// if (!endorse) {
// credentialDefinitionPayload.options.endorserMode = EndorserMode.Internal
// credentialDefinitionPayload.options.endorserDid = issuerId
// } else {
// if (!endorserDid) {
// throw new BadRequestError(ENDORSER_DID_NOT_PRESENT)
// }
// credentialDefinitionPayload.options.endorserMode = EndorserMode.External
// credentialDefinitionPayload.options.endorserDid = endorserDid ? endorserDid : ''
// }
/**
* Creates a new credential definition.
*
* @param credentialDefinitionRequest
* @returns CredDef
*/
@Example(CredentialDefinitionExample)
@Response(200, 'Action required')
@Response(202, 'Wait for action to complete')
@Post('/')
public async createCredentialDefinition(
@Request() request: Req,
@Body()
credentialDefinitionRequest: {
issuerId: string
schemaId: SchemaId
tag: string
endorse?: boolean
endorserDid?: string
},
): Promise<RegisterCredentialDefinitionReturn | CredentialDefinitionStates> {
try {
const { issuerId, schemaId, tag, endorse, endorserDid } = credentialDefinitionRequest
credentialDefinitionRequest.endorse = credentialDefinitionRequest.endorse
? credentialDefinitionRequest.endorse
: false
const credDef = {
issuerId,
schemaId,
tag,
type: 'CL',
}
const credentialDefinitionPayload = {
credentialDefinition: credDef,
options: {
endorserMode: '',
endorserDid: '',
supportRevocation: false,
},
}
if (!endorse) {
credentialDefinitionPayload.options.endorserMode = EndorserMode.Internal
credentialDefinitionPayload.options.endorserDid = issuerId
} else {
if (!endorserDid) {
throw new BadRequestError(ENDORSER_DID_NOT_PRESENT)
}
credentialDefinitionPayload.options.endorserMode = EndorserMode.External
credentialDefinitionPayload.options.endorserDid = endorserDid ? endorserDid : ''
}

// const registerCredentialDefinitionResult =
// await request.agent.modules.anoncreds.registerCredentialDefinition(credentialDefinitionPayload)
const registerCredentialDefinitionResult =
await request.agent.modules.anoncreds.registerCredentialDefinition(credentialDefinitionPayload)

// if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Failed) {
// throw new InternalServerError('Falied to register credef on ledger')
// }
if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Failed) {
const failureReason = registerCredentialDefinitionResult.credentialDefinitionState?.reason ?? 'Failed to register credential definition on ledger'
throw new InternalServerError(failureReason)
}
Comment thread
GHkrishna marked this conversation as resolved.

// if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Wait) {
// // The request has been accepted for processing, but the processing has not been completed.
// this.setStatus(202)
// return registerCredentialDefinitionResult
// }
if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Wait) {
// The request has been accepted for processing, but the processing has not been completed.
this.setStatus(202)
return registerCredentialDefinitionResult
}

// if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Action) {
// return registerCredentialDefinitionResult
// }
if (registerCredentialDefinitionResult.credentialDefinitionState.state === CredentialEnum.Action) {
return registerCredentialDefinitionResult
}

// // TODO: Return uniform response for both Internally and Externally endorsed Schemas
// if (!endorse) {
// const indyCredDefId = parseIndyCredentialDefinitionId(
// registerCredentialDefinitionResult.credentialDefinitionState.credentialDefinitionId as string,
// )
// const getCredentialDefinitionId = await getUnqualifiedCredentialDefinitionId(
// indyCredDefId.namespaceIdentifier,
// indyCredDefId.schemaSeqNo,
// indyCredDefId.tag,
// )
// registerCredentialDefinitionResult.credentialDefinitionState.credentialDefinitionId = getCredentialDefinitionId
// return registerCredentialDefinitionResult.credentialDefinitionState
// }
// return registerCredentialDefinitionResult
// } catch (error) {
// throw ErrorHandlingService.handle(error)
// }
// }
// }
// TODO: Return uniform response for both Internally and Externally endorsed Schemas
if (!endorse) {
const indyCredDefId = parseIndyCredentialDefinitionId(
registerCredentialDefinitionResult.credentialDefinitionState.credentialDefinitionId as string,
)
const getCredentialDefinitionId = await getUnqualifiedCredentialDefinitionId(
indyCredDefId.namespaceIdentifier,
indyCredDefId.schemaSeqNo,
indyCredDefId.tag,
)
registerCredentialDefinitionResult.credentialDefinitionState.credentialDefinitionId = getCredentialDefinitionId
return registerCredentialDefinitionResult.credentialDefinitionState
Comment thread
GHkrishna marked this conversation as resolved.
}
return registerCredentialDefinitionResult
} catch (error) {
throw ErrorHandlingService.handle(error)
}
}
}
Loading