mirror of
https://github.com/bensuperpc/infrastructure.git
synced 2026-09-03 07:53:39 +02:00
Improve infra
This commit is contained in:
Executable
+77
@@ -0,0 +1,77 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
from pathlib import Path
|
||||
import secrets
|
||||
import re
|
||||
|
||||
ROOT_DIR = Path(__file__).resolve().parent.parent
|
||||
SERVICES_DIR = ROOT_DIR / "infrastructure"
|
||||
|
||||
# Exemples :
|
||||
# __GENERATE_32__ -> 32 caractères
|
||||
# __GENERATE_64__ -> 64 caractères
|
||||
TOKEN_RE = re.compile(r"__GENERATE_(\d+)__")
|
||||
|
||||
CHANGE_ME = "CHANGEME_"
|
||||
ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
|
||||
|
||||
created = 0
|
||||
skipped = 0
|
||||
|
||||
|
||||
def generate_token(length: int) -> str:
|
||||
"""Generate an alphanumeric token of exactly `length` characters."""
|
||||
return "".join(secrets.choice(ALPHABET) for _ in range(length))
|
||||
|
||||
|
||||
# Create .env files from .env.example
|
||||
for example in sorted(SERVICES_DIR.rglob("*.env.example")):
|
||||
target = Path(str(example)[:-len(".example")])
|
||||
|
||||
if target.exists():
|
||||
skipped += 1
|
||||
continue
|
||||
|
||||
target.write_bytes(example.read_bytes())
|
||||
created += 1
|
||||
|
||||
|
||||
# Find all .env files
|
||||
targets = list(SERVICES_DIR.rglob("*.env"))
|
||||
|
||||
# Generate one value per unique token
|
||||
generated = {}
|
||||
|
||||
for path in targets:
|
||||
content = path.read_text()
|
||||
|
||||
for token, length in set(TOKEN_RE.findall(content)):
|
||||
token_name = f"__GENERATE_{length}__"
|
||||
|
||||
if token_name not in generated:
|
||||
generated[token_name] = generate_token(int(length))
|
||||
|
||||
|
||||
# Replace generated tokens
|
||||
for path in targets:
|
||||
content = path.read_text()
|
||||
|
||||
for token, value in generated.items():
|
||||
content = content.replace(token, value)
|
||||
|
||||
path.write_text(content)
|
||||
|
||||
|
||||
print(f"Created {created} env file(s), left {skipped} existing one(s) untouched.")
|
||||
|
||||
|
||||
# Find files that still contain CHANGEME_
|
||||
remaining = [
|
||||
path for path in targets
|
||||
if CHANGE_ME in path.read_text()
|
||||
]
|
||||
|
||||
if remaining:
|
||||
print("\nThese files still need a value you must fill in by hand:")
|
||||
for path in remaining:
|
||||
print(path)
|
||||
Reference in New Issue
Block a user