Skip to content

Commit 3879f93

Browse files
committed
wip
1 parent 47a08db commit 3879f93

File tree

1 file changed

+12
-23
lines changed

1 file changed

+12
-23
lines changed

src/phase/utils/secret_referencing.py

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"""
4646

4747

48-
def resolve_secret_reference(ref: str, secrets_dict: Dict[str, Dict[str, Dict[str, str]]], phase: 'Phase', current_application_name: str, current_env_name: str) -> str:
48+
def resolve_secret_reference(ref: str, secrets_dict: Dict[str, Dict[str, List['PhaseSecret']]], phase: 'Phase', current_application_name: str, current_env_name: str) -> str:
4949
"""
5050
Resolves a single secret reference to its actual value by fetching it from the specified environment.
5151
@@ -64,12 +64,10 @@ def resolve_secret_reference(ref: str, secrets_dict: Dict[str, Dict[str, Dict[st
6464
Raises:
6565
ValueError: If the current environment name is not provided, or the secret is not found.
6666
"""
67-
6867
env_name = current_env_name
69-
path = "/" # Default root path
68+
path = "/"
7069
key_name = ref
7170

72-
# Parse the reference to identify environment, path, and secret key.
7371
if "." in ref: # Cross-environment references
7472
parts = ref.split(".", 1)
7573
env_name, rest = parts[0], parts[1]
@@ -84,29 +82,22 @@ def resolve_secret_reference(ref: str, secrets_dict: Dict[str, Dict[str, Dict[st
8482
path = ref[:last_slash_index]
8583
key_name = ref[last_slash_index + 1:]
8684

87-
# Adjust for leading slash in path if not present
8885
if not path.startswith("/"):
8986
path = "/" + path
9087

9188
try:
92-
# Lookup with environment, path, and key
93-
if env_name in secrets_dict and path in secrets_dict[env_name]:
94-
for secret in secrets_dict[env_name][path]:
89+
if env_name in secrets_dict and path in secrets_dict[env_name] and key_name in secrets_dict[env_name][path]:
90+
return secrets_dict[env_name][path][key_name]
91+
elif env_name != current_env_name:
92+
fetched_secrets = phase.get(env_name=env_name, app_name=current_application_name, keys=[key_name], path=path)
93+
for secret in fetched_secrets:
9594
if secret.key == key_name:
9695
return secret.value
97-
else:
98-
# Handle fallback for cross-environment or missing secrets
99-
if env_name != current_env_name:
100-
fetched_secrets = phase.get(env_name=env_name, app_name=current_application_name, keys=[key_name], path=path)
101-
for secret in fetched_secrets:
102-
if secret.key == key_name:
103-
return secret.value
10496
except EnvironmentNotFoundException:
10597
pass
10698

107-
# Return the reference as is if not resolved
10899
return f"${{{ref}}}"
109-
100+
110101

111102
def resolve_all_secrets(value: str, all_secrets: List[Dict[str, str]], phase: 'Phase', current_application_name: str, current_env_name: str) -> str:
112103
"""
@@ -130,17 +121,15 @@ def resolve_all_secrets(value: str, all_secrets: List[Dict[str, str]], phase: 'P
130121

131122
secrets_dict = {}
132123
for secret in all_secrets:
133-
env_name = current_env_name # Assume current environment if not specified
134-
path = secret.path
124+
env_name = secret.environment if hasattr(secret, 'environment') else current_env_name
135125
if env_name not in secrets_dict:
136126
secrets_dict[env_name] = {}
137-
if path not in secrets_dict[env_name]:
138-
secrets_dict[env_name][path] = []
139-
secrets_dict[env_name][path].append(secret)
127+
if secret.path not in secrets_dict[env_name]:
128+
secrets_dict[env_name][secret.path] = {}
129+
secrets_dict[env_name][secret.path][secret.key] = secret.value
140130

141131
refs = SECRET_REF_REGEX.findall(value)
142132
resolved_value = value
143-
# Resolve each found reference and replace it with resolved_secret_value.
144133
for ref in refs:
145134
resolved_secret_value = resolve_secret_reference(ref, secrets_dict, phase, current_application_name, current_env_name)
146135
resolved_value = resolved_value.replace(f"${{{ref}}}", resolved_secret_value)

0 commit comments

Comments
 (0)