Files
datalab-lite/minio_client.py

73 lines
2.1 KiB
Python

from minio import Minio
import os
import hashlib
import subprocess
import json
MINIO_URL = "minio.lab.leadwire.dev"
MINIO_CONSOLE_URL = "https://minio-console.lab.leadwire.dev"
ADMIN_KEY = "admin"
ADMIN_SECRET = "Minio@Leadwire2026!"
MC_ALIAS = "minio-local"
mc = Minio(
MINIO_URL,
access_key=ADMIN_KEY,
secret_key=ADMIN_SECRET,
secure=True,
cert_check=False
)
def generate_password(username: str) -> str:
seed = f"datalab-{username}-2026"
return hashlib.sha256(seed.encode()).hexdigest()[:16]
def mc_cmd(*args):
cmd = ["mc", "--insecure"] + list(args)
result = subprocess.run(cmd, capture_output=True, text=True)
print(f"mc {' '.join(args)}: code={result.returncode} out={result.stdout.strip()} err={result.stderr.strip()}")
return result.returncode == 0
def ensure_bucket(username):
bucket = f"user-{username}"
password = generate_password(username)
try:
# Créer le bucket
if not mc.bucket_exists(bucket):
mc.make_bucket(bucket)
print(f"Bucket {bucket} créé")
# Créer le user MinIO
mc_cmd("admin", "user", "add", MC_ALIAS, username, password)
# Créer la policy
policy = json.dumps({
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:*"],
"Resource": [
f"arn:aws:s3:::{bucket}",
f"arn:aws:s3:::{bucket}/*"
]
}]
})
policy_file = f"/tmp/policy-{username}.json"
with open(policy_file, "w") as f:
f.write(policy)
mc_cmd("admin", "policy", "create", MC_ALIAS, f"policy-{username}", policy_file)
mc_cmd("admin", "policy", "attach", MC_ALIAS, f"policy-{username}", "--user", username)
print(f"User MinIO {username} configuré ✅")
except Exception as e:
print(f"MinIO error: {e}")
def get_minio_credentials(username: str) -> dict:
return {
"url": MINIO_CONSOLE_URL,
"bucket": f"user-{username}",
"access_key": username,
"secret_key": generate_password(username)
}