mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-08-18 16:02:10 +00:00
feat: signed s3 objects (#5593)
* feat: accept signed s3 objects for s3 file keys in apps + sign endpoint and helpers * Update backend/windmill-api/openapi.yaml Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * fix build * Update python-client/wmill/wmill/client.py Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> * nti * fix build * fix build * presigned * Update frontend/src/lib/components/apps/editor/settingsPanel/InputsSpecEditor.svelte Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * Update frontend/src/lib/components/apps/editor/settingsPanel/InputsSpecEditor.svelte Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> * fix build * b * fix sqlx * nit * typo --------- Co-authored-by: ellipsis-dev[bot] <65095814+ellipsis-dev[bot]@users.noreply.github.com> Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
This commit is contained in:
@@ -586,6 +586,12 @@ class Windmill:
|
||||
raise Exception("Could not write file to S3") from e
|
||||
return S3Object(s3=response["file_key"])
|
||||
|
||||
def sign_s3_objects(self, s3_objects: list[S3Object]) -> list[S3Object]:
|
||||
return self.post(f"/w/{self.workspace}/apps/sign_s3_objects", json={"s3_objects": s3_objects}).json()
|
||||
|
||||
def sign_s3_object(self, s3_object: S3Object) -> S3Object:
|
||||
return self.post(f"/w/{self.workspace}/apps/sign_s3_objects", json={"s3_objects": [s3_object]}).json()[0]
|
||||
|
||||
def __boto3_connection_settings(self, s3_resource) -> Boto3ConnectionSettings:
|
||||
endpoint_url_prefix = "https://" if s3_resource["useSSL"] else "http://"
|
||||
return Boto3ConnectionSettings(
|
||||
@@ -974,6 +980,24 @@ def write_s3_file(
|
||||
return _client.write_s3_file(s3object, file_content, s3_resource_path if s3_resource_path != "" else None, content_type, content_disposition)
|
||||
|
||||
|
||||
@init_global_client
|
||||
def sign_s3_objects(s3_objects: list[S3Object]) -> list[S3Object]:
|
||||
"""
|
||||
Sign S3 objects to be used by anonymous users in public apps
|
||||
Returns a list of signed s3 tokens
|
||||
"""
|
||||
return _client.sign_s3_objects(s3_objects)
|
||||
|
||||
|
||||
@init_global_client
|
||||
def sign_s3_object(s3_object: S3Object) -> S3Object:
|
||||
"""
|
||||
Sign S3 object to be used by anonymous users in public apps
|
||||
Returns a signed s3 object
|
||||
"""
|
||||
return _client.sign_s3_object(s3_object)
|
||||
|
||||
|
||||
@init_global_client
|
||||
def whoami() -> dict:
|
||||
"""
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
class S3Object(dict):
|
||||
s3: str
|
||||
storage: str | None
|
||||
presigned: str | None
|
||||
|
||||
def __getattr__(self, attr):
|
||||
return self[attr]
|
||||
|
||||
Reference in New Issue
Block a user