Skip to content

Commit eba7eba

Browse files
committed
add deprecated route
1 parent 24d0669 commit eba7eba

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

server/app/interfaces/discovery.py

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from app import model as server_model
1616
from app.adapter import jsonization
1717
from app.interfaces.base import BaseWSGIApp, HTTPApiDecoder
18-
from app.util.converters import IdentifierToBase64URLConverter
18+
from app.util.converters import IdentifierToBase64URLConverter, base64url_decode
1919

2020

2121
class DiscoveryStore:
@@ -98,6 +98,7 @@ def __init__(self, persistent_store: DiscoveryStore, base_path: str = "/api/v3.1
9898
Submount(
9999
"/lookup/shells",
100100
[
101+
Rule("/", methods=["GET"], endpoint=self.get_all_aas_ids_by_asset_link), # this route is deprecated
101102
Rule(
102103
"/<base64url:aas_id>",
103104
methods=["GET"],
@@ -118,6 +119,37 @@ def __init__(self, persistent_store: DiscoveryStore, base_path: str = "/api/v3.1
118119
strict_slashes=False,
119120
)
120121

122+
def get_all_aas_ids_by_asset_link(
123+
self, request: Request, url_args: dict, response_t: type, **_kwargs
124+
) -> Response:
125+
asset_ids_param = request.args.get("assetIds", "")
126+
if not asset_ids_param:
127+
raise werkzeug.exceptions.BadRequest("Missing query parameter 'assetIds'")
128+
129+
try:
130+
decoded_str = base64url_decode(asset_ids_param)
131+
payload = json.loads(decoded_str)
132+
except (ValueError, json.JSONDecodeError) as exc:
133+
raise werkzeug.exceptions.BadRequest(f"Invalid query parameter 'assetIds': {exc}") from exc
134+
135+
if isinstance(payload, dict):
136+
payload = [payload]
137+
138+
if not isinstance(payload, list):
139+
raise werkzeug.exceptions.BadRequest("Decoded assetIds payload must be a JSON object or list")
140+
141+
matching_aas_keys = set()
142+
for item in payload:
143+
if not isinstance(item, dict):
144+
raise werkzeug.exceptions.BadRequest("Each asset link must be a JSON object")
145+
146+
asset_link = server_model.AssetLink(item["name"], item["value"])
147+
aas_keys = self.persistent_store.search_aas_ids_by_asset_link(asset_link)
148+
matching_aas_keys.update(aas_keys)
149+
150+
paginated_slice, cursor = self._get_slice(request, list(matching_aas_keys))
151+
return response_t(list(paginated_slice), cursor=cursor)
152+
121153
def search_all_aas_ids_by_asset_link(
122154
self, request: Request, url_args: dict, response_t: type, **_kwargs
123155
) -> Response:

0 commit comments

Comments
 (0)