Skip to content
Snippets Groups Projects
Verified Commit 1ca3cf43 authored by Konstantin Tsabolov's avatar Konstantin Tsabolov
Browse files

chore(ssi): add support for externally registered DID

parent e38ce2d8
No related branches found
No related tags found
No related merge requests found
Pipeline #41268 canceled
...@@ -11,10 +11,11 @@ AGENT_WALLET_ID=ssi-wallet-id ...@@ -11,10 +11,11 @@ AGENT_WALLET_ID=ssi-wallet-id
AGENT_WALLET_KEY=ssi-wallet-key AGENT_WALLET_KEY=ssi-wallet-key
AGENT_HOST=http://localhost AGENT_HOST=http://localhost
AGENT_INBOUND_PORT=3001 AGENT_INBOUND_PORT=3001
AGENT_PUBLIC_DID_SEED=6b8b882e2618fa5d45ee7229ca000000 AGENT_LEDGER_ID=ID_UNION
AGENT_INDY_DID_SEED=00000000000_OCM_E1_Test_Endorser
AGENT_INDY_DID=RVKyFidnaqJPznu8bgodDb
AGENT_AUTO_ACCEPT_CONNECTION=true AGENT_AUTO_ACCEPT_CONNECTION=true
AGENT_AUTO_ACCEPT_CREDENTIAL=contentApproved AGENT_AUTO_ACCEPT_CREDENTIAL=contentApproved
AGENT_LEDGER_ID=BCOVRIN_TEST
TAILS_SERVER_BASE_URL=http://localhost:9000 TAILS_SERVER_BASE_URL=http://localhost:9000
TAILS_SERVER_BUCKET_NAME=ssi TAILS_SERVER_BUCKET_NAME=ssi
......
...@@ -128,10 +128,12 @@ export class DidsService { ...@@ -128,10 +128,12 @@ export class DidsService {
>; >;
const indyDidSeed = this.configService.get('agent.indyDidSeed') as string; const indyDidSeed = this.configService.get('agent.indyDidSeed') as string;
const indyDid = this.configService.get('agent.indyDid') as string;
const indyDids = await registerIndyDids({ const indyDids = await registerIndyDids({
ledgerIds, ledgerIds,
seed: indyDidSeed, seed: indyDidSeed,
did: indyDid,
}); });
const privKey = { const privKey = {
......
...@@ -8,6 +8,7 @@ import { LEDGERS } from '../../config/ledger.js'; ...@@ -8,6 +8,7 @@ import { LEDGERS } from '../../config/ledger.js';
type RegisterPublicDidOptions = { type RegisterPublicDidOptions = {
ledgerIds: Array<LedgerIds>; ledgerIds: Array<LedgerIds>;
seed: string; seed: string;
did?: string;
}; };
type LedgerRegistrationBody = { type LedgerRegistrationBody = {
...@@ -20,20 +21,42 @@ type LedgerRegistrationBody = { ...@@ -20,20 +21,42 @@ type LedgerRegistrationBody = {
type RegisterPublicDidResponse = { type RegisterPublicDidResponse = {
seed: string; seed: string;
did: string; did: string;
verkey: string; verkey?: string;
namespace: string; namespace: string;
}; };
export const registerPublicDids = async ({ export const registerPublicDids = async ({
ledgerIds, ledgerIds,
seed, seed,
did,
}: RegisterPublicDidOptions): Promise<Array<RegisterPublicDidResponse>> => { }: RegisterPublicDidOptions): Promise<Array<RegisterPublicDidResponse>> => {
const responses: Array<RegisterPublicDidResponse> = []; const responses: Array<RegisterPublicDidResponse> = [];
for (const ledgerId of ledgerIds) { for (const ledgerId of ledgerIds) {
try { const ledgerConfig = LEDGERS[ledgerId];
const ledgerRegisterUrl = LEDGERS[ledgerId].registerNymUrl; const ledgerNamespace = ledgerConfig.namespace;
const ledgerNamespace = LEDGERS[ledgerId].namespace;
if (did) {
const indyDid = `did:indy:${ledgerNamespace}:${did}`;
logger.warn(
`Agent DID '${indyDid}' provided in config. Assuming it was registered manually.`,
);
responses.push({
did: indyDid,
seed,
namespace: ledgerNamespace,
});
continue;
} else if (
!('registerNymUrl' in ledgerConfig) ||
!ledgerConfig.registerNymUrl
) {
throw new Error(
`Ledger ${ledgerId} does not have a 'registerNymUrl'. Must register DID manually and provide it in 'AGENT_INDY_DID' env variable. Cannot continue without a DID.`,
);
}
try {
const body: LedgerRegistrationBody = { const body: LedgerRegistrationBody = {
role: 'ENDORSER', role: 'ENDORSER',
seed, seed,
...@@ -41,7 +64,7 @@ export const registerPublicDids = async ({ ...@@ -41,7 +64,7 @@ export const registerPublicDids = async ({
const res = await axios({ const res = await axios({
method: 'post', method: 'post',
url: ledgerRegisterUrl, url: ledgerConfig.registerNymUrl,
data: body, data: body,
}); });
...@@ -57,5 +80,6 @@ export const registerPublicDids = async ({ ...@@ -57,5 +80,6 @@ export const registerPublicDids = async ({
if (err instanceof axios.AxiosError) logAxiosError(err); if (err instanceof axios.AxiosError) logAxiosError(err);
} }
} }
return responses; return responses;
}; };
...@@ -6,10 +6,11 @@ export const agentConfig = registerAs('agent', () => ({ ...@@ -6,10 +6,11 @@ export const agentConfig = registerAs('agent', () => ({
walletId: process.env.AGENT_WALLET_ID || '', walletId: process.env.AGENT_WALLET_ID || '',
walletKey: process.env.AGENT_WALLET_KEY || '', walletKey: process.env.AGENT_WALLET_KEY || '',
ledgerIds: process.env.AGENT_LEDGER_ID?.split(',') || [], ledgerIds: process.env.AGENT_LEDGER_ID?.split(',') || [],
indyDidSeed: process.env.AGENT_INDY_DID_SEED || '',
indyDid: process.env.AGENT_INDY_DID || '',
host: process.env.AGENT_HOST || '', host: process.env.AGENT_HOST || '',
inboundPort: Number(process.env.AGENT_INBOUND_PORT || '3001'), inboundPort: Number(process.env.AGENT_INBOUND_PORT || '3001'),
path: process.env.AGENT_URL_PATH || '', path: process.env.AGENT_URL_PATH || '',
indyDidSeed: process.env.AGENT_INDY_DID_SEED || '',
autoAcceptConnection: process.env.AGENT_AUTO_ACCEPT_CONNECTION === 'true', autoAcceptConnection: process.env.AGENT_AUTO_ACCEPT_CONNECTION === 'true',
autoAcceptCredential: autoAcceptCredential:
(process.env.AGENT_AUTO_ACCEPT_CREDENTIAL as AutoAcceptCredential) || (process.env.AGENT_AUTO_ACCEPT_CREDENTIAL as AutoAcceptCredential) ||
......
export const LEDGERS = { export const LEDGERS = {
ID_UNION: { ID_UNION: {
registerNymUrl: 'https://idu.cloudcompass.ca/register',
namespace: 'idunion:test', namespace: 'idunion:test',
genesisTransaction: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"MainIncubator","blskey":"14MPfxHnRvCL5dnbpD3SjxekAGnKyjkmifDFLnMJAvHcvEAarDLWX6KawhubPujSmmUMqRmQfPQzBambrdUqBGgHDryDS6Aj8BioWRwZkyTcH1zzkVQ7vZjE5S6ri5epkiS1VkVX42Z22z4cohdHVuKTgeQB5mjAwi55xNeRxpxhrNb","blskey_pop":"QoqRe3vMPr5Bt1qHDstYewWkxb5VEdugnvumLCWpkZAeUpdqjjaSTSKKJtT7U7aCe8CmShGSdCZFWs9hcpmMSGfMnmon7R99UTJj4jEr48smyxo1UpBcgooznc8N8USkZ8hSec3bRbN9y6NppuaFzfgt1WmJ3cdFi9L1Wbj1fNs5CK","client_ip":"35.207.81.15","client_port":"9702","node_ip":"35.207.81.15","node_port":"9701","services":["VALIDATOR"]},"dest":"EQ2oCtWpMdUCzKgQ2hvbyQ2i6VyJuQF9LcpHRfiah6rW"},"metadata":{"from":"2MZYuPv2Km7Q1eD4GCsSb6"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"0a35c047f19448f12a0c2961d8e3085140b8149d87291acbdaf56ed956900d48"},"ver":"1"} genesisTransaction: `{"reqSignature":{},"txn":{"data":{"data":{"alias":"MainIncubator","blskey":"14MPfxHnRvCL5dnbpD3SjxekAGnKyjkmifDFLnMJAvHcvEAarDLWX6KawhubPujSmmUMqRmQfPQzBambrdUqBGgHDryDS6Aj8BioWRwZkyTcH1zzkVQ7vZjE5S6ri5epkiS1VkVX42Z22z4cohdHVuKTgeQB5mjAwi55xNeRxpxhrNb","blskey_pop":"QoqRe3vMPr5Bt1qHDstYewWkxb5VEdugnvumLCWpkZAeUpdqjjaSTSKKJtT7U7aCe8CmShGSdCZFWs9hcpmMSGfMnmon7R99UTJj4jEr48smyxo1UpBcgooznc8N8USkZ8hSec3bRbN9y6NppuaFzfgt1WmJ3cdFi9L1Wbj1fNs5CK","client_ip":"35.207.81.15","client_port":"9702","node_ip":"35.207.81.15","node_port":"9701","services":["VALIDATOR"]},"dest":"EQ2oCtWpMdUCzKgQ2hvbyQ2i6VyJuQF9LcpHRfiah6rW"},"metadata":{"from":"2MZYuPv2Km7Q1eD4GCsSb6"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"0a35c047f19448f12a0c2961d8e3085140b8149d87291acbdaf56ed956900d48"},"ver":"1"}
{"reqSignature":{},"txn":{"data":{"data":{"alias":"tubzecm","blskey":"3Zpdx6LMWPdybnQKPq62S3TaWUhwypr7RV2BBFkeFigjKuue7KJ7rh5w1gZY9qgugww9vZnpURLSjBuTonJpfyfN5nn2ofwFQQa3viiT77hhFf6kQqoMH53f66ZfBNWU2LzphQikXsma9zjZWALMtMsNWx7ftNZ8yzMrZpf1X6VqYX5","blskey_pop":"RbPQSMsV8iuxNXVFNEUPvb6k1wQe1rxaXroMMkpHTstiiJfCApER38jW79Ew1yrnt5ndz7wJeDRU7CkLNzJ6pEZaRYjLzhZL2shRgyaGqnMqkxvD1ewxNMSz7cSgBSChwUgLBxsms5iDyshwAM5dx8B1GayMyATcFxAdgCRiDv3EHm","client_ip":"141.23.35.186","client_port":"9702","node_ip":"141.23.35.186","node_port":"9701","services":["VALIDATOR"]},"dest":"Ddqm5GATTcEb5hrgMBbVL8w6R6mtTHjUpdpyCeWg3pVS"},"metadata":{"from":"JhyMn8Nn3xy2zsXjPaPu3B"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"e2f9efff1bfef015098ae299a665154fa39a898a5071d0af03c7f2311fe8577f"},"ver":"1"} {"reqSignature":{},"txn":{"data":{"data":{"alias":"tubzecm","blskey":"3Zpdx6LMWPdybnQKPq62S3TaWUhwypr7RV2BBFkeFigjKuue7KJ7rh5w1gZY9qgugww9vZnpURLSjBuTonJpfyfN5nn2ofwFQQa3viiT77hhFf6kQqoMH53f66ZfBNWU2LzphQikXsma9zjZWALMtMsNWx7ftNZ8yzMrZpf1X6VqYX5","blskey_pop":"RbPQSMsV8iuxNXVFNEUPvb6k1wQe1rxaXroMMkpHTstiiJfCApER38jW79Ew1yrnt5ndz7wJeDRU7CkLNzJ6pEZaRYjLzhZL2shRgyaGqnMqkxvD1ewxNMSz7cSgBSChwUgLBxsms5iDyshwAM5dx8B1GayMyATcFxAdgCRiDv3EHm","client_ip":"141.23.35.186","client_port":"9702","node_ip":"141.23.35.186","node_port":"9701","services":["VALIDATOR"]},"dest":"Ddqm5GATTcEb5hrgMBbVL8w6R6mtTHjUpdpyCeWg3pVS"},"metadata":{"from":"JhyMn8Nn3xy2zsXjPaPu3B"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"e2f9efff1bfef015098ae299a665154fa39a898a5071d0af03c7f2311fe8577f"},"ver":"1"}
......
...@@ -22,10 +22,11 @@ export const validationSchema = Joi.object({ ...@@ -22,10 +22,11 @@ export const validationSchema = Joi.object({
AGENT_HOST: Joi.string().required(), AGENT_HOST: Joi.string().required(),
AGENT_INBOUND_PORT: Joi.string(), AGENT_INBOUND_PORT: Joi.string(),
AGENT_URL_PATH: Joi.string(), AGENT_URL_PATH: Joi.string(),
AGENT_INDY_DID_SEED: Joi.string().optional(),
AGENT_AUTO_ACCEPT_CONNECTION: Joi.boolean().default(true), AGENT_AUTO_ACCEPT_CONNECTION: Joi.boolean().default(true),
AGENT_AUTO_ACCEPT_CREDENTIAL: Joi.string().default( AGENT_AUTO_ACCEPT_CREDENTIAL: Joi.string().default(
AutoAcceptCredential.ContentApproved, AutoAcceptCredential.ContentApproved,
), ),
AGENT_ID_UNION_KEY: Joi.string(), AGENT_LEDGER_ID: Joi.string().required(),
AGENT_INDY_DID_SEED: Joi.string().required(),
AGENT_INDY_DID: Joi.string().optional(),
}); });
...@@ -74,10 +74,11 @@ services: ...@@ -74,10 +74,11 @@ services:
AGENT_WALLET_KEY: ssi-wallet-key AGENT_WALLET_KEY: ssi-wallet-key
AGENT_HOST: http://ssi-abstraction AGENT_HOST: http://ssi-abstraction
AGENT_INBOUND_PORT: 3001 AGENT_INBOUND_PORT: 3001
AGENT_INDY_DID_SEED: 000000000000000_OCM_E2E_ENDORSER AGENT_LEDGER_ID: ID_UNION
AGENT_INDY_DID_SEED: 00000000000_OCM_E1_Test_Endorser
AGENT_INDY_DID: RVKyFidnaqJPznu8bgodDb
AGENT_AUTO_ACCEPT_CONNECTION: true AGENT_AUTO_ACCEPT_CONNECTION: true
AGENT_AUTO_ACCEPT_CREDENTIAL: contentApproved AGENT_AUTO_ACCEPT_CREDENTIAL: contentApproved
AGENT_LEDGER_ID: BCOVRIN_TEST
TAILS_SERVER_BASE_URL: http://s3:9000 TAILS_SERVER_BASE_URL: http://s3:9000
TAILS_SERVER_BUCKET_NAME: ssi TAILS_SERVER_BUCKET_NAME: ssi
S3_ACCESS_KEY: ssi-abstraction S3_ACCESS_KEY: ssi-abstraction
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment