Skip to content

Commit 1dbeadb

Browse files
committed
Add generate-download-headers operation
1 parent a55235c commit 1dbeadb

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

app/operations/presigned_urls.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
from aidbox_python_sdk.types import SDKOperation, SDKOperationRequest
44
from aiobotocore.session import get_session
55
from aiohttp import web
6+
from botocore.awsrequest import AWSRequest
7+
from botocore.auth import SigV4Auth
8+
from botocore.credentials import Credentials
69

710
from app import config
811
from app.sdk import sdk
@@ -101,3 +104,32 @@ async def generate_download_url_op(
101104
"get_presigned_url": get_presigned_url,
102105
}
103106
)
107+
108+
109+
@sdk.operation(["POST"], ["fhir", "$generate-download-headers"], request_schema=download_schema)
110+
@sdk.operation(["POST"], ["$generate-download-headers"], request_schema=download_schema)
111+
async def generate_download_headers_op(
112+
_operation: SDKOperation, request: SDKOperationRequest
113+
) -> web.Response:
114+
bucket = config.aws_bucket
115+
key = request.get("resource", {}).get("key")
116+
117+
url = f"{config.minio_endpoint}/{bucket}/{key}"
118+
credentials = Credentials(
119+
access_key=config.aws_access_key_id,
120+
secret_key=config.aws_secret_access_key,
121+
)
122+
headers = {
123+
"x-amz-content-sha256": "UNSIGNED-PAYLOAD",
124+
}
125+
126+
aws_request = AWSRequest(
127+
method="GET",
128+
url=url,
129+
headers=headers,
130+
)
131+
132+
signer = SigV4Auth(credentials, "s3", config.region_name)
133+
signer.add_auth(aws_request)
134+
135+
return web.json_response(dict(aws_request.headers))

0 commit comments

Comments
 (0)