Skip to content

Commit

Permalink
Merge branch 'main' into feature/enable-aggr-vcs
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewwhitehead authored Nov 30, 2022
2 parents d918829 + 6629d7d commit de84288
Show file tree
Hide file tree
Showing 26 changed files with 270 additions and 54 deletions.
77 changes: 66 additions & 11 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,38 +1,72 @@
# 1.0.0-rc0
# 1.0.0-rc1

## August 18, 2022
## November 6, 2022

1.0.0 is a breaking update to ACA-Py whose version is intended to indicate the
maturity of the implementation. The final 1.0.0 release will be Aries Interop
Profile 2.0-complete, and based on Python 3.7 or higher. The initial (rc0)
release candidate is for early adopters to provide feedback.
Profile 2.0-complete, and based on Python 3.7 or higher.

### Breaking Changes

As of rc0, there are no breaking updates in the release from the previous v0.7.4.
However, we know that there are some pending updates that will be breaking, hence
the bumps to the major/minor version elements.
As of release candidate 1.0.0-rc1, the only identified breaking change is the
handling of "unrevealed attributes" during verification (see
[\#1913](https://github.com/hyperledger/aries-cloudagent-python/pull/1913) for
details). As few implementations of Aries Wallets support unrevealed attributes
in an AnonCreds presentation, this is unlikely to impact any deployments.

### Categorized List of Pull Requests

In rc0, there are not a lot of new features, as the focus is on cleanup and
In rc1, there are not a lot of new features, as the focus is on cleanup and
optimization. The biggest is the inclusion with ACA-Py of a universal resolver
interface, allowing an instance to have both local resolvers for some DID
Methods and a call out to an external universal resolver for other DID Methods.
While some work has been done on moving the default Python version beyond 3.6,
more work is still to be done on that before the final v1.0.0 release.
Another significant feature is full support for Hyperledger Indy transaction
endorsement for Authors and Endorsers. A new repo
[aries-endorser-service](https://github.com/hyperledger/aries-endorser-service)
has been created that is a pre-configured instance of ACA-Py for use as an
Endorser service. While some work has been done on moving the default Python
version beyond 3.6, more work is still to be done on that before the final
v1.0.0 release.

### Categorized List of Pull Requests

- Verifiable credential and revocation handling updates
- Verifiable credential, presentation and revocation handling updates
- Refactor ledger correction code and insert into revocation error handling [\#1892](https://github.com/hyperledger/aries-cloudagent-python/pull/1892) ([ianco](https://github.com/ianco))
- Indy ledger fixes and cleanups [\#1870](https://github.com/hyperledger/aries-cloudagent-python/pull/1870) ([andrewwhitehead](https://github.com/andrewwhitehead))
- Refactoring of revocation registry creation [\#1813](https://github.com/hyperledger/aries-cloudagent-python/pull/1813) ([andrewwhitehead](https://github.com/andrewwhitehead))
- Fix: the type of tails file path to string. [\#1925](https://github.com/hyperledger/aries-cloudagent-python/pull/1925) ([baegjae](https://github.com/baegjae))
- Pre-populate revoc\_reg\_id on IssuerRevRegRecord [\#1924](https://github.com/hyperledger/aries-cloudagent-python/pull/1924) ([andrewwhitehead](https://github.com/andrewwhitehead))
- Leave credentialStatus element in the LD credential [\#1921](https://github.com/hyperledger/aries-cloudagent-python/pull/1921) ([tsabolov](https://github.com/tsabolov))
- **BREAKING:** Remove aca-py check for unrevealed revealed attrs on proof validation [\#1913](https://github.com/hyperledger/aries-cloudagent-python/pull/1913) ([ianco](https://github.com/ianco))
- Send webhooks upon record/credential deletion [\#1906](https://github.com/hyperledger/aries-cloudagent-python/pull/1906) ([frostyfrog](https://github.com/frostyfrog))

- Out of Band (OOB) and DID Exchange / Connection Handling
- Fix: `--mediator-invitation` with OOB invitation + cleanup [\#1970](https://github.com/hyperledger/aries-cloudagent-python/pull/1970) ([shaangill025](https://github.com/shaangill025))
- include image\_url in oob invitation [\#1966](https://github.com/hyperledger/aries-cloudagent-python/pull/1966) ([Zzocker](https://github.com/Zzocker))
- feat: 00B v1.1 support [\#1962](https://github.com/hyperledger/aries-cloudagent-python/pull/1962) ([shaangill025](https://github.com/shaangill025))
- Fix: OOB - Handling of minor versions [\#1940](https://github.com/hyperledger/aries-cloudagent-python/pull/1940) ([shaangill025](https://github.com/shaangill025))
- fix: failed connectionless proof request on some case [\#1933](https://github.com/hyperledger/aries-cloudagent-python/pull/1933) ([kukgini](https://github.com/kukgini))
- fix: propagate endpoint from mediation record [\#1922](https://github.com/hyperledger/aries-cloudagent-python/pull/1922) ([cjhowland](https://github.com/cjhowland))
- Feat/public did endpoints for agents behind mediators [\#1899](https://github.com/hyperledger/aries-cloudagent-python/pull/1899) ([cjhowland](https://github.com/cjhowland))

- DID Registration and Resolution related updates
- feat: add universal resolver [\#1866](https://github.com/hyperledger/aries-cloudagent-python/pull/1866) ([dbluhm](https://github.com/dbluhm))
- fix: resolve dids following new endpoint rules [\#1863](https://github.com/hyperledger/aries-cloudagent-python/pull/1863) ([dbluhm](https://github.com/dbluhm))
- fix: didx request cannot be accepted [\#1881](https://github.com/hyperledger/aries-cloudagent-python/pull/1881) ([rmnre](https://github.com/rmnre))
- did method & key type registry [\#1986](https://github.com/hyperledger/aries-cloudagent-python/pull/1986) ([burdettadam](https://github.com/burdettadam))
- Fix/endpoint attrib structure [\#1934](https://github.com/hyperledger/aries-cloudagent-python/pull/1934) ([cjhowland](https://github.com/cjhowland))
- Simple did registry [\#1920](https://github.com/hyperledger/aries-cloudagent-python/pull/1920) ([burdettadam](https://github.com/burdettadam))
- Use did:key for recipient keys [\#1886](https://github.com/hyperledger/aries-cloudagent-python/pull/1886) ([frostyfrog](https://github.com/frostyfrog))

- Hyperledger Indy Endorser/Author Transaction Handling
- Fix/txn job setting [\#1994](https://github.com/hyperledger/aries-cloudagent-python/pull/1994) ([ianco](https://github.com/ianco))
- chore: fix ACAPY\_PROMOTE-AUTHOR-DID flag [\#1978](https://github.com/hyperledger/aries-cloudagent-python/pull/1978) ([morrieinmaas](https://github.com/morrieinmaas))

- Endorser write DID transaction [\#1938](https://github.com/hyperledger/aries-cloudagent-python/pull/1938) ([ianco](https://github.com/ianco))
- Endorser doc updates and some bug fixes [\#1926](https://github.com/hyperledger/aries-cloudagent-python/pull/1926) ([ianco](https://github.com/ianco))

- Startup Command Line / Environment / YAML Parameter Updates
- Add seed command line parameter but use only if also an "allow insecure seed" parameter is set [\#1714](https://github.com/hyperledger/aries-cloudagent-python/pull/1714) ([DaevMithran](https://github.com/DaevMithran))

- Internal Aries framework data handling updates
- fix: update RouteManager methods use to pass profile as parameter [\#1902](https://github.com/hyperledger/aries-cloudagent-python/pull/1902) ([chumbert](https://github.com/chumbert))
Expand All @@ -41,14 +75,35 @@ more work is still to be done on that before the final v1.0.0 release.
- Enable manually triggering keylist updates during connection [\#1851](https://github.com/hyperledger/aries-cloudagent-python/pull/1851) ([dbluhm](https://github.com/dbluhm))
- feat: make base wallet route access configurable [\#1836](https://github.com/hyperledger/aries-cloudagent-python/pull/1836) ([dbluhm](https://github.com/dbluhm))
- feat: event and webhook on keylist update stored [\#1769](https://github.com/hyperledger/aries-cloudagent-python/pull/1769) ([dbluhm](https://github.com/dbluhm))
- fix: Safely shutdown when root\_profile uninitialized [\#1960](https://github.com/hyperledger/aries-cloudagent-python/pull/1960) ([frostyfrog](https://github.com/frostyfrog))
- feat: include connection ids in keylist update webhook [\#1914](https://github.com/hyperledger/aries-cloudagent-python/pull/1914) ([dbluhm](https://github.com/dbluhm))
- fix: incorrect response schema for discover features [\#1912](https://github.com/hyperledger/aries-cloudagent-python/pull/1912) ([dbluhm](https://github.com/dbluhm))
- Fix: SchemasInputDescriptorFilter: broken deserialization renders generated clients unusable [\#1894](https://github.com/hyperledger/aries-cloudagent-python/pull/1894) ([rmnre](https://github.com/rmnre))
- fix: schema class can set Meta.unknown [\#1885](https://github.com/hyperledger/aries-cloudagent-python/pull/1885) ([dbluhm](https://github.com/dbluhm))

- Unit, Integration and Aries Agent Test Harness Test updates
- Fixes a few AATH failures [\#1897](https://github.com/hyperledger/aries-cloudagent-python/pull/1897) ([ianco](https://github.com/ianco))
- fix: warnings in tests from IndySdkProfile [\#1865](https://github.com/hyperledger/aries-cloudagent-python/pull/1865) ([dbluhm](https://github.com/dbluhm))
- Unit test fixes for python 3.9 [\#1858](https://github.com/hyperledger/aries-cloudagent-python/pull/1858) ([andrewwhitehead](https://github.com/andrewwhitehead))
- Update pip-audit.yml [\#1945](https://github.com/hyperledger/aries-cloudagent-python/pull/1945) ([ryjones](https://github.com/ryjones))
- Update pip-audit.yml [\#1944](https://github.com/hyperledger/aries-cloudagent-python/pull/1944) ([ryjones](https://github.com/ryjones))

- Dependency Updates
- feat: update pynacl version from 1.4.0 to 1.50 [\#1981](https://github.com/hyperledger/aries-cloudagent-python/pull/1981) ([morrieinmaas](https://github.com/morrieinmaas))
- Fix: web.py dependency - integration tests & demos [\#1973](https://github.com/hyperledger/aries-cloudagent-python/pull/1973) ([shaangill025](https://github.com/shaangill025))
- chore: update pydid [\#1915](https://github.com/hyperledger/aries-cloudagent-python/pull/1915) ([dbluhm](https://github.com/dbluhm))

- Demo and Documentation Updates
- Fixes to acme exercise code [\#1990](https://github.com/hyperledger/aries-cloudagent-python/pull/1990) ([ianco](https://github.com/ianco))
- Fixed bug in run\_demo script [\#1982](https://github.com/hyperledger/aries-cloudagent-python/pull/1982) ([pasquale95](https://github.com/pasquale95))
- Transaction Author with Endorser demo [\#1975](https://github.com/hyperledger/aries-cloudagent-python/pull/1975) ([ianco](https://github.com/ianco))
- Redis Plugins \[redis\_cache & redis\_queue\] related updates [\#1937](https://github.com/hyperledger/aries-cloudagent-python/pull/1937) ([shaangill025](https://github.com/shaangill025))

- Release management pull requests
- Release 1.0.0-rc0 [\#1904](https://github.com/hyperledger/aries-cloudagent-python/pull/1904) ([swcurran](https://github.com/swcurran))
- Add 0.7.5 patch Changelog entry to main branch Changelog [\#1996](https://github.com/hyperledger/aries-cloudagent-python/pull/1996) ([swcurran](https://github.com/swcurran))
- Release 1.0.0-rc1 [\#2005](https://github.com/hyperledger/aries-cloudagent-python/pull/2005) ([swcurran](https://github.com/swcurran))


# 0.7.5

Expand Down
1 change: 1 addition & 0 deletions aries_cloudagent/admin/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -370,6 +370,7 @@ async def check_multitenant_authorization(request: web.Request, handler):
and not is_server_path
and not is_unprotected_path(path)
and not base_limited_access_path
and not (request.method == "OPTIONS") # CORS fix
):
raise web.HTTPUnauthorized()

Expand Down
41 changes: 33 additions & 8 deletions aries_cloudagent/config/argparse.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,8 @@ def create_argument_parser(*, prog: str = None):


def load_argument_groups(parser: ArgumentParser, *groups: Type[ArgumentGroup]):
"""Log a set of argument groups into a parser.
"""
Log a set of argument groups into a parser.
Returns:
A callable to convert loaded arguments into a settings dictionary
Expand Down Expand Up @@ -872,32 +873,56 @@ def get_settings(self, args: Namespace) -> dict:
if args.no_ledger:
settings["ledger.disabled"] = True
else:
configured = False
single_configured = False
multi_configured = False
update_pool_name = False
if args.genesis_url:
settings["ledger.genesis_url"] = args.genesis_url
configured = True
single_configured = True
elif args.genesis_file:
settings["ledger.genesis_file"] = args.genesis_file
configured = True
single_configured = True
elif args.genesis_transactions:
settings["ledger.genesis_transactions"] = args.genesis_transactions
configured = True
single_configured = True
if args.genesis_transactions_list:
with open(args.genesis_transactions_list, "r") as stream:
txn_config_list = yaml.safe_load(stream)
ledger_config_list = []
for txn_config in txn_config_list:
ledger_config_list.append(txn_config)
if "is_write" in txn_config and txn_config["is_write"]:
if "genesis_url" in txn_config:
settings["ledger.genesis_url"] = txn_config[
"genesis_url"
]
elif "genesis_file" in txn_config:
settings["ledger.genesis_file"] = txn_config[
"genesis_file"
]
elif "genesis_transactions" in txn_config:
settings["ledger.genesis_transactions"] = txn_config[
"genesis_transactions"
]
else:
raise ArgsParseError(
"No genesis information provided for write ledger"
)
if "id" in txn_config:
settings["ledger.pool_name"] = txn_config["id"]
update_pool_name = True
settings["ledger.ledger_config_list"] = ledger_config_list
configured = True
if not configured:
multi_configured = True
if not (single_configured or multi_configured):
raise ArgsParseError(
"One of --genesis-url --genesis-file, --genesis-transactions "
"or --genesis-transactions-list must be specified (unless "
"--no-ledger is specified to explicitly configure aca-py to"
" run with no ledger)."
)
if args.ledger_pool_name:
if single_configured and multi_configured:
raise ArgsParseError("Cannot configure both single- and multi-ledger.")
if args.ledger_pool_name and not update_pool_name:
settings["ledger.pool_name"] = args.ledger_pool_name
if args.ledger_keepalive:
settings["ledger.keepalive"] = args.ledger_keepalive
Expand Down
4 changes: 1 addition & 3 deletions aries_cloudagent/core/conductor.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
from ..config.wallet import wallet_config
from ..core.profile import Profile
from ..indy.verifier import IndyVerifier
from ..ledger.base import BaseLedger

from ..ledger.error import LedgerConfigError, LedgerTransactionError
from ..ledger.multiple_ledger.base_manager import (
BaseMultipleLedgerManager,
Expand Down Expand Up @@ -144,7 +144,6 @@ async def setup(self):
self.root_profile.BACKEND_NAME == "askar"
and ledger.BACKEND_NAME == "indy-vdr"
):
context.injector.bind_instance(BaseLedger, ledger)
context.injector.bind_provider(
IndyVerifier,
ClassProvider(
Expand All @@ -156,7 +155,6 @@ async def setup(self):
self.root_profile.BACKEND_NAME == "indy"
and ledger.BACKEND_NAME == "indy"
):
context.injector.bind_instance(BaseLedger, ledger)
context.injector.bind_provider(
IndyVerifier,
ClassProvider(
Expand Down
2 changes: 1 addition & 1 deletion aries_cloudagent/indy/models/cred_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class Meta:
unknown = EXCLUDE

prover_did = fields.Str(
requred=True,
required=True,
description="Prover DID",
**INDY_DID,
)
Expand Down
47 changes: 33 additions & 14 deletions aries_cloudagent/protocols/routing/v1_0/manager.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
"""Routing manager classes for tracking and inspecting routing records."""

import asyncio
import logging
from typing import Coroutine, Sequence

from ....core.error import BaseError
Expand All @@ -16,6 +18,12 @@
from .models.route_updated import RouteUpdated


LOGGER = logging.getLogger(__name__)

RECIP_ROUTE_PAUSE = 0.1
RECIP_ROUTE_RETRY = 10


class RoutingManagerError(BaseError):
"""Generic routing error."""

Expand Down Expand Up @@ -54,21 +62,30 @@ async def get_recipient(self, recip_verkey: str) -> RouteRecord:
if not recip_verkey:
raise RoutingManagerError("Must pass non-empty recip_verkey")

try:
async with self._profile.session() as session:
record = await RouteRecord.retrieve_by_recipient_key(
session, recip_verkey
i = 0
record = None
while not record:
try:
LOGGER.info(">>> fetching routing record for verkey: " + recip_verkey)
async with self._profile.session() as session:
record = await RouteRecord.retrieve_by_recipient_key(
session, recip_verkey
)
LOGGER.info(">>> FOUND routing record for verkey: " + recip_verkey)
return record
except StorageDuplicateError:
LOGGER.info(">>> DUPLICATE routing record for verkey: " + recip_verkey)
raise RouteNotFoundError(
f"More than one route record found with recipient key: {recip_verkey}"
)
except StorageDuplicateError:
raise RouteNotFoundError(
f"More than one route record found with recipient key: {recip_verkey}"
)
except StorageNotFoundError:
raise RouteNotFoundError(
f"No route found with recipient key: {recip_verkey}"
)

return record
except StorageNotFoundError:
LOGGER.info(">>> NOT FOUND routing record for verkey: " + recip_verkey)
i += 1
if i > RECIP_ROUTE_RETRY:
raise RouteNotFoundError(
f"No route found with recipient key: {recip_verkey}"
)
await asyncio.sleep(RECIP_ROUTE_PAUSE)

async def get_routes(
self, client_connection_id: str = None, tag_filter: dict = None
Expand Down Expand Up @@ -136,13 +153,15 @@ async def create_route_record(
)
if not recipient_key:
raise RoutingManagerError("Missing recipient_key")
LOGGER.info(">>> creating routing record for verkey: " + recipient_key)
route = RouteRecord(
connection_id=client_connection_id,
wallet_id=internal_wallet_id,
recipient_key=recipient_key,
)
async with self._profile.session() as session:
await route.save(session, reason="Created new route")
LOGGER.info(">>> CREATED routing record for verkey: " + recipient_key)
return route

async def update_routes(
Expand Down
Loading

0 comments on commit de84288

Please sign in to comment.