#!/bin/bash echo "=== Hard Config Fixer ===" echo "Replaces the permissions block in config.yaml using text manipulation to avoid YAML parser issues." cat << 'PYTHON_SCRIPT' > hard_patch.py import sys import os config_file = "data/telegram/config.yaml" if not os.path.exists(config_file): print(f"Error: {config_file} not found.") sys.exit(1) print(f"Patching {config_file}...") with open(config_file, 'r') as f: lines = f.readlines() new_lines = [] skip = False inserted = False permissions_indent = -1 for line in lines: stripped = line.strip() # Detect start of permissions block if stripped.startswith("permissions:") and not inserted: # Calculate indentation of the "permissions:" line permissions_indent = len(line) - len(line.lstrip()) new_lines.append(line[:permissions_indent] + "permissions:\n") # Indent for content is usually parent + 2 or + 4. We'll match the file style loosely or force 2 spaces relative to parent # But since we are writing text, let's use the parent indent + 2 spaces (standard) or 4. # Looking at grep output, it seemed to be 4 spaces for 'bridge', so permissions (child) likely 4 spaces? # Let's use a safe indentation string based on parent. base_indent = " " * (permissions_indent + 2) # minimal standard indent if permissions_indent >= 4: base_indent = " " * (permissions_indent + 4) # match likely 4-space indent style # Force clean permissions block new_lines.append(f'{base_indent}"*": "relay"\n') new_lines.append(f'{base_indent}"@inswe:beeper.com": "admin"\n') new_lines.append(f'{base_indent}"beeper.local": "user"\n') new_lines.append(f'{base_indent}"beeper.com": "user"\n') skip = True inserted = True continue if skip: # Determine if we are still inside the permissions block current_indent = len(line) - len(line.lstrip()) # If empty line, keep skipping or preserve? Usually preserve empty lines but here we want to clean up. if stripped == "": continue # If indentation is less than or equal to the permissions: line, we are out of the block if current_indent <= permissions_indent: skip = False new_lines.append(line) else: # We are inside the old permissions block, so we skip this line pass else: new_lines.append(line) with open(config_file, 'w') as f: f.writelines(new_lines) print("Patch applied.") PYTHON_SCRIPT docker run --rm \ -v "$(pwd):/work" \ -w /work \ python:3.11-slim \ python hard_patch.py rm hard_patch.py