Skip to content

Commit debb7d7

Browse files
committed
ledger config fix
1 parent 86ed889 commit debb7d7

8 files changed

Lines changed: 125 additions & 74 deletions

File tree

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ jobs:
2929
password: ${{ secrets.REGISTRY_PASSWORD }}
3030
- run: |
3131
cd $GITHUB_WORKSPACE
32-
docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/aries-cloud-agency-image:latest --build-arg AGENCY_INBOUND_PORT=7000 --build-arg AGENCY_ADMIN_PORT=2000 --build-arg AGENCY_ENDPOINT=${{ secrets.AGENCY_ENDPOINT }} --build-arg AGENCY_ADMIN_API_KEY=${{ secrets.AGENCY_ADMIN_API_KEY }} --build-arg GENESIS_URL=${{ secrets.GENESIS_URL }} --build-arg AGENCY_HOSTNAME=${{ secrets.AGENCY_HOSTNAME }}
32+
docker build . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/aries-cloud-agency-image:latest --build-arg AGENCY_INBOUND_PORT=7000 --build-arg AGENCY_ADMIN_PORT=2000 --build-arg AGENCY_ENDPOINT=${{ secrets.AGENCY_ENDPOINT }} --build-arg AGENCY_ADMIN_API_KEY=${{ secrets.AGENCY_ADMIN_API_KEY }} --build-arg GENESIS_URL=${{ secrets.GENESIS_URL }}
3333
docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/aries-cloud-agency-image:latest
3434
3535
- name: 'Deploy to Azure Agency Container Instance'

Dockerfile

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ ARG AGENCY_ADMIN_PORT
66
ARG AGENCY_ADMIN_API_KEY
77
ARG AGENCY_INBOUND_PORT
88
ARG AGENCY_ENDPOINT
9-
ARG AGENCY_HOSTNAME
109
ARG GENESIS_URL
1110

1211
RUN pip install aries-cloudagent
@@ -19,8 +18,7 @@ ENV admin_api_key=$AGENCY_ADMIN_API_KEY \
1918
admin_port=$AGENCY_ADMIN_PORT \
2019
agency_endpoint=$AGENCY_ENDPOINT \
2120
inbound_port=$AGENCY_INBOUND_PORT \
22-
genesis_url=$GENESIS_URL \
23-
host_name=$AGENCY_HOSTNAME
21+
genesis_url=$GENESIS_URL
2422

2523
EXPOSE 7000 2000
2624

aries_cloudagency/admin/server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from ..config.wallet import wallet_config
3535
from ..storage.base import BaseStorage
3636
from ..storage.indy import IndyStorage
37+
from ..config.ledger import ledger_config
3738

3839
LOGGER = logging.getLogger(__name__)
3940

@@ -240,7 +241,7 @@ async def agency_middleware(request, handler):
240241

241242
storage = IndyStorage(wallet_instance)
242243
self.context.injector.bind_instance(BaseStorage, storage)
243-
await wallet_config(self.context, True)
244+
await wallet_config(self.context)
244245
app["request_context"] = self.context
245246
return await handler(request)
246247

aries_cloudagency/agency/server.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ def str_to_bool(s):
2121
admin_port = os.getenv("admin_port", "2000")
2222
agency_endpoint = os.getenv("agency_endpoint", "http://0.0.0.0")
2323
inbound_port = os.getenv("inbound_port", "7000")
24-
agency_hostname = os.getenv("host_name", "0.0.0.0")
2524
genesis_url = os.getenv("genesis_url", "http://greenlight.bcovrin.vonx.io/genesis")
2625

2726

@@ -32,10 +31,10 @@ async def start():
3231
contextBuilder.settings.set_default("admin.admin_insecure_mode", admin_insecure_mode)
3332
else:
3433
contextBuilder.settings.set_default("admin.admin_api_key", admin_api_key)
35-
contextBuilder.settings.set_default("admin.host", agency_hostname)
34+
contextBuilder.settings.set_default("admin.host", "0.0.0.0")
3635
contextBuilder.settings.set_default("admin.port", admin_port)
3736
contextBuilder.settings.set_default("admin.webhook_urls", "")
38-
contextBuilder.settings.set_default("transport.inbound_configs", [["http", agency_hostname, inbound_port]])
37+
contextBuilder.settings.set_default("transport.inbound_configs", [["http", "0.0.0.0", inbound_port]])
3938
contextBuilder.settings.set_default("transport.outbound_configs", ["http"])
4039

4140
contextBuilder.settings.set_default("default_label", "Aries Cloud Agency")

aries_cloudagency/agency/wallet.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ async def close(name, key):
5252
async def get(name, key):
5353
wlt = open_wallets.get(name)
5454
if wlt:
55-
print("Wallet already exist!")
55+
# print("Wallet already exist!")
5656
return wlt
5757
else:
58-
print("Opening new wallet!")
58+
# print("Opening new wallet!")
5959
return await open(name, key)

aries_cloudagency/config/ledger.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,51 @@ async def ledger_config(
8080
return True
8181

8282

83+
async def agency_ledger_config(
84+
context: InjectionContext, provision: bool = False
85+
) -> bool:
86+
"""Perform Indy ledger configuration."""
87+
88+
# Fetch genesis transactions if necessary
89+
if not context.settings.get("ledger.genesis_transactions"):
90+
if context.settings.get("ledger.genesis_url"):
91+
context.settings[
92+
"ledger.genesis_transactions"
93+
] = await fetch_genesis_transactions(context.settings["ledger.genesis_url"])
94+
elif context.settings.get("ledger.genesis_file"):
95+
try:
96+
genesis_path = context.settings["ledger.genesis_file"]
97+
LOGGER.info("Reading genesis transactions from: %s", genesis_path)
98+
with open(genesis_path, "r") as genesis_file:
99+
context.settings["ledger.genesis_transactions"] = genesis_file.read(
100+
-1
101+
)
102+
except IOError as e:
103+
raise ConfigError("Error reading genesis transactions") from e
104+
105+
ledger: BaseLedger = await context.inject(BaseLedger, required=False)
106+
if not ledger:
107+
LOGGER.info("Ledger instance not provided")
108+
return False
109+
elif ledger.LEDGER_TYPE != "indy":
110+
LOGGER.info("Non-indy ledger provided")
111+
return False
112+
113+
async with ledger:
114+
# Check transaction author agreement acceptance
115+
taa_info = await ledger.get_txn_author_agreement()
116+
if taa_info["taa_required"]:
117+
taa_accepted = await ledger.get_latest_txn_author_acceptance()
118+
if (
119+
not taa_accepted
120+
or taa_info["taa_record"]["digest"] != taa_accepted["digest"]
121+
):
122+
if not await accept_taa(ledger, taa_info, provision):
123+
return False
124+
125+
return True
126+
127+
83128
async def accept_taa(ledger: BaseLedger, taa_info, provision: bool = False) -> bool:
84129
"""Perform TAA acceptance."""
85130

aries_cloudagency/core/conductor.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434

3535
from .dispatcher import Dispatcher
3636

37+
from ..config.ledger import agency_ledger_config
38+
3739
LOGGER = logging.getLogger(__name__)
3840

3941

@@ -140,15 +142,19 @@ async def start(self) -> None:
140142

141143
context = self.context
142144

143-
# Disabled for agency
145+
# Disabling agent code for agency
144146
'''
145147
# Configure the wallet
146148
public_did = await wallet_config(context)
147-
149+
148150
# Configure the ledger
149151
if not await ledger_config(context, public_did):
150152
LOGGER.warning("No ledger configured")
151153
'''
154+
# Configure ledger for Agency
155+
if not await agency_ledger_config(context):
156+
LOGGER.warning("No ledger configured")
157+
152158
# Start up transports
153159
try:
154160
await self.inbound_transport_manager.start()

aries_cloudagency/protocols/issue_credential/v1_0/manager.py

Lines changed: 64 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,6 @@ async def receive_offer(self) -> V10CredentialExchange:
334334
cred_ex_record.credential_definition_id = cred_def_id
335335

336336
await cred_ex_record.save(self.context, reason="receive credential offer")
337-
338337
return cred_ex_record
339338

340339
async def create_request(
@@ -352,75 +351,78 @@ async def create_request(
352351
A tuple (credential exchange record, credential request message)
353352
354353
"""
355-
if cred_ex_record.state != V10CredentialExchange.STATE_OFFER_RECEIVED:
356-
raise CredentialManagerError(
357-
f"Credential exchange {cred_ex_record.credential_exchange_id} "
358-
f"in {cred_ex_record.state} state "
359-
f"(must be {V10CredentialExchange.STATE_OFFER_RECEIVED})"
360-
)
354+
try:
355+
if cred_ex_record.state != V10CredentialExchange.STATE_OFFER_RECEIVED:
356+
raise CredentialManagerError(
357+
f"Credential exchange {cred_ex_record.credential_exchange_id} "
358+
f"in {cred_ex_record.state} state "
359+
f"(must be {V10CredentialExchange.STATE_OFFER_RECEIVED})"
360+
)
361+
362+
credential_definition_id = cred_ex_record.credential_definition_id
363+
credential_offer = cred_ex_record.credential_offer
361364

362-
credential_definition_id = cred_ex_record.credential_definition_id
363-
credential_offer = cred_ex_record.credential_offer
365+
async def _create():
366+
ledger: BaseLedger = await self.context.inject(BaseLedger)
367+
async with ledger:
368+
credential_definition = await ledger.get_credential_definition(
369+
credential_definition_id
370+
)
364371

365-
async def _create():
366-
ledger: BaseLedger = await self.context.inject(BaseLedger)
367-
async with ledger:
368-
credential_definition = await ledger.get_credential_definition(
369-
credential_definition_id
372+
holder: BaseHolder = await self.context.inject(BaseHolder)
373+
request_json, metadata_json = await holder.create_credential_request(
374+
credential_offer, credential_definition, holder_did
375+
)
376+
return {
377+
"request": json.loads(request_json),
378+
"metadata": json.loads(metadata_json),
379+
}
380+
381+
if cred_ex_record.credential_request:
382+
self._logger.warning(
383+
"create_request called multiple times for v1.0 credential exchange: %s",
384+
cred_ex_record.credential_exchange_id,
385+
)
386+
else:
387+
if "nonce" not in credential_offer:
388+
raise CredentialManagerError("Missing nonce in credential offer")
389+
nonce = credential_offer["nonce"]
390+
cache_key = (
391+
f"credential_request::{credential_definition_id}::{holder_did}::{nonce}"
370392
)
393+
cred_req_result = None
394+
cache: BaseCache = await self.context.inject(BaseCache, required=False)
395+
if cache:
396+
async with cache.acquire(cache_key) as entry:
397+
if entry.result:
398+
cred_req_result = entry.result
399+
else:
400+
cred_req_result = await _create()
401+
await entry.set_result(cred_req_result, 3600)
402+
if not cred_req_result:
403+
cred_req_result = await _create()
371404

372-
holder: BaseHolder = await self.context.inject(BaseHolder)
373-
request_json, metadata_json = await holder.create_credential_request(
374-
credential_offer, credential_definition, holder_did
375-
)
376-
return {
377-
"request": json.loads(request_json),
378-
"metadata": json.loads(metadata_json),
379-
}
405+
(
406+
cred_ex_record.credential_request,
407+
cred_ex_record.credential_request_metadata,
408+
) = (cred_req_result["request"], cred_req_result["metadata"])
380409

381-
if cred_ex_record.credential_request:
382-
self._logger.warning(
383-
"create_request called multiple times for v1.0 credential exchange: %s",
384-
cred_ex_record.credential_exchange_id,
410+
credential_request_message = CredentialRequest(
411+
requests_attach=[
412+
CredentialRequest.wrap_indy_cred_req(cred_ex_record.credential_request)
413+
]
385414
)
386-
else:
387-
if "nonce" not in credential_offer:
388-
raise CredentialManagerError("Missing nonce in credential offer")
389-
nonce = credential_offer["nonce"]
390-
cache_key = (
391-
f"credential_request::{credential_definition_id}::{holder_did}::{nonce}"
415+
credential_request_message._thread = {"thid": cred_ex_record.thread_id}
416+
credential_request_message.assign_trace_decorator(
417+
self.context.settings, cred_ex_record.trace
392418
)
393-
cred_req_result = None
394-
cache: BaseCache = await self.context.inject(BaseCache, required=False)
395-
if cache:
396-
async with cache.acquire(cache_key) as entry:
397-
if entry.result:
398-
cred_req_result = entry.result
399-
else:
400-
cred_req_result = await _create()
401-
await entry.set_result(cred_req_result, 3600)
402-
if not cred_req_result:
403-
cred_req_result = await _create()
404-
405-
(
406-
cred_ex_record.credential_request,
407-
cred_ex_record.credential_request_metadata,
408-
) = (cred_req_result["request"], cred_req_result["metadata"])
409-
410-
credential_request_message = CredentialRequest(
411-
requests_attach=[
412-
CredentialRequest.wrap_indy_cred_req(cred_ex_record.credential_request)
413-
]
414-
)
415-
credential_request_message._thread = {"thid": cred_ex_record.thread_id}
416-
credential_request_message.assign_trace_decorator(
417-
self.context.settings, cred_ex_record.trace
418-
)
419-
420-
cred_ex_record.state = V10CredentialExchange.STATE_REQUEST_SENT
421-
await cred_ex_record.save(self.context, reason="create credential request")
422419

423-
return (cred_ex_record, credential_request_message)
420+
cred_ex_record.state = V10CredentialExchange.STATE_REQUEST_SENT
421+
await cred_ex_record.save(self.context, reason="create credential request")
422+
return (cred_ex_record, credential_request_message)
423+
except Exception as ex:
424+
print('EXCEPTION!')
425+
print(ex)
424426

425427
async def receive_request(self):
426428
"""

0 commit comments

Comments
 (0)