Initial commit - Datalab Lite source code
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user