Files
computer-playbook/filter_plugins/dotenv.py
T
kevinveenbirkenbach 5ca6ecd3d7 fix(dotenv): escape $ for docker compose env interpolation
Ensure dotenv_quote escapes `$` as `$$` so secrets are not
expanded by docker compose when rendered into .env files.

Add unit tests covering $, quotes, backslashes, unicode and
edge cases to prevent regressions.

https://chatgpt.com/share/6977825f-d8f8-800f-bafb-aae3b3704945
2026-01-26 16:03:36 +01:00

40 lines
893 B
Python

# filter_plugins/dotenv.py
#
# Dotenv-safe quoting for .env files.
#
# Rules:
# - Always use double quotes
# - Escape backslash and double quote
# - Do NOT do shell-style escaping
#
# Result is safe for:
# - docker compose --env-file
# - dotenv libraries (PHP, Ruby, Node, Python)
# - passwords containing ', $, spaces, !
#
from __future__ import annotations
class FilterModule:
def filters(self):
return {
"dotenv_quote": self.dotenv_quote,
}
@staticmethod
def dotenv_quote(value):
if value is None:
return '""'
s = str(value)
# Escape for docker compose env interpolation:
# $VAR would be expanded; $$ becomes literal $
s = s.replace("$", "$$")
# Escape backslash first, then double quotes
s = s.replace("\\", "\\\\")
s = s.replace('"', '\\"')
return f'"{s}"'