|
3 | 3 | from aidbox_python_sdk.types import SDKOperation, SDKOperationRequest |
4 | 4 | from aiobotocore.session import get_session |
5 | 5 | from aiohttp import web |
| 6 | +from botocore.awsrequest import AWSRequest |
| 7 | +from botocore.auth import SigV4Auth |
| 8 | +from botocore.credentials import Credentials |
6 | 9 |
|
7 | 10 | from app import config |
8 | 11 | from app.sdk import sdk |
@@ -101,3 +104,32 @@ async def generate_download_url_op( |
101 | 104 | "get_presigned_url": get_presigned_url, |
102 | 105 | } |
103 | 106 | ) |
| 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