diff --git a/fix_config_hard.sh b/fix_config_hard.sh new file mode 100755 index 0000000..7d96e13 --- /dev/null +++ b/fix_config_hard.sh @@ -0,0 +1,84 @@ +#!/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