diff --git a/backend/src/ceph_service.py b/backend/src/ceph_service.py index a39481b10dc7258420e049958c4e846ea9c642eb..5be6fe8c9d44e43784e7d2519d787bc03129a5ba 100644 --- a/backend/src/ceph_service.py +++ b/backend/src/ceph_service.py @@ -1,3 +1,4 @@ +from models.buckets import Bucket, BucketRWAccess, BucketResponse import boto3 import json import os @@ -21,9 +22,24 @@ def get_s3_client(): return client -def list_buckets() -> json: +def list_buckets() -> BucketResponse: s3 = get_s3_client() - buckets = s3.list_buckets() - buckets = {key: buckets[key] for key in ["Buckets", "Owner"]} - return json.dumps(buckets, default=str) - + response = s3.list_buckets() + buckets_info = response["Buckets"] + buckets = [None] * len(buckets_info) + for i, bucket_info in enumerate(buckets_info): + bucket_name = bucket_info["Name"] + creation_date = bucket_info["CreationDate"] + bucket_acl = s3.get_bucket_acl(Bucket=bucket_name) + grant = bucket_acl["Grants"][0] # TODO: Here we can have multiple grants + permission = grant["Permission"] + read = permission in ("READ", "FULL_CONTROL") + write = permission in ("WRITE", "FULL_CONTROL") + rw_access = BucketRWAccess(read=read, write=write) + buckets[i] = Bucket( + name=bucket_name, + creation_date=creation_date, + details={}, + rw_access=rw_access + ) + return BucketResponse(buckets=buckets, total=len(buckets)) diff --git a/backend/src/models/buckets.py b/backend/src/models/buckets.py new file mode 100644 index 0000000000000000000000000000000000000000..542e0bc9f1fde18b649ab62f05e12a21de802bcb --- /dev/null +++ b/backend/src/models/buckets.py @@ -0,0 +1,20 @@ +from pydantic import BaseModel +from datetime import datetime +from typing import List + + +class BucketRWAccess(BaseModel): + read: bool + write: bool + + +class Bucket(BaseModel): + name: str + creation_date: datetime + details: dict + rw_access: BucketRWAccess + + +class BucketResponse(BaseModel): + buckets: List[Bucket] + total: int diff --git a/backend/src/routes/buckets.py b/backend/src/routes/buckets.py index 193a973335777fdd07f06d8654c961177cdcef8a..d3bb3af749324cb7cd308977cd2b84e5a63ec13b 100644 --- a/backend/src/routes/buckets.py +++ b/backend/src/routes/buckets.py @@ -1,3 +1,4 @@ +from models.buckets import BucketResponse from fastapi import APIRouter import ceph_service @@ -5,5 +6,5 @@ router = APIRouter() @router.get("/buckets") -def list_buckets(): +def list_buckets() -> BucketResponse: return ceph_service.list_buckets()