Skip to content
This repository was archived by the owner on Sep 30, 2025. It is now read-only.

Commit 28373e7

Browse files
committed
fix: sanitizing and normalizing the username for docker registry URI compliance (ENG-690)
1 parent 348d0c6 commit 28373e7

File tree

3 files changed

+25
-18
lines changed

3 files changed

+25
-18
lines changed

dreadnode_cli/agent/cli.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,15 +255,22 @@ def push(
255255
print()
256256
print(f":wrench: Building agent from [b]{directory}[/] ...")
257257
image = docker.build(directory, force_rebuild=rebuild)
258-
agent_name = docker.sanitized_agent_name(agent_config.project_name)
258+
agent_name = docker.sanitized_name(agent_config.project_name)
259+
sanitized_user_name = docker.sanitized_name(server_config.username)
259260

260261
if not agent_name:
261262
raise Exception("Failed to sanitize agent name, please use a different name")
262263

263264
elif agent_name != agent_config.project_name:
264265
print(f":four_leaf_clover: Agent name normalized to [bold magenta]{agent_name}[/]")
265266

266-
repository = f"{registry}/{server_config.username}/agents/{agent_name}"
267+
if not sanitized_user_name:
268+
raise Exception("Failed to sanitize username")
269+
270+
elif sanitized_user_name != server_config.username:
271+
print(f":four_leaf_clover: Username normalized to [bold magenta]{sanitized_user_name}[/]")
272+
273+
repository = f"{registry}/{sanitized_user_name}/agents/{agent_name}"
267274
tag = tag or image.id[-8:]
268275

269276
print()

dreadnode_cli/agent/docker.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,9 +64,9 @@ def login(registry: str, username: str, password: str) -> None:
6464
client.api.login(username=username, password=password, registry=registry)
6565

6666

67-
def sanitized_agent_name(name: str) -> str:
67+
def sanitized_name(name: str) -> str:
6868
"""
69-
Sanitizes an agent name to be used as a Docker repository name.
69+
Sanitizes an agent or user name to be used in a Docker repository URI.
7070
"""
7171

7272
# convert to lowercase

dreadnode_cli/agent/tests/test_docker.py

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -176,26 +176,26 @@ def test_get_registry_custom_platform_base_domain() -> None:
176176
assert docker.get_registry(config) == "dev-registry.example.com"
177177

178178

179-
def test_sanitized_agent_name() -> None:
179+
def test_sanitized_name() -> None:
180180
# Test basic name
181-
assert docker.sanitized_agent_name("test-agent") == "test-agent"
182-
assert docker.sanitized_agent_name("test- agent") == "test-agent"
183-
assert docker.sanitized_agent_name("test_agent") == "test_agent"
181+
assert docker.sanitized_name("test-agent") == "test-agent"
182+
assert docker.sanitized_name("test- agent") == "test-agent"
183+
assert docker.sanitized_name("test_agent") == "test_agent"
184184

185185
# Test spaces
186-
assert docker.sanitized_agent_name("test agent") == "test-agent"
187-
assert docker.sanitized_agent_name("test multiple spaces") == "test-multiple-spaces"
186+
assert docker.sanitized_name("test agent") == "test-agent"
187+
assert docker.sanitized_name("test multiple spaces") == "test-multiple-spaces"
188188

189189
# Test special characters
190-
assert docker.sanitized_agent_name("test!@#$%^&*()agent") == "testagent"
191-
assert docker.sanitized_agent_name("test_agent.123") == "test_agent123"
192-
assert docker.sanitized_agent_name("test/agent\\path") == "testagentpath"
190+
assert docker.sanitized_name("test!@#$%^&*()agent") == "testagent"
191+
assert docker.sanitized_name("test_agent.123") == "test_agent123"
192+
assert docker.sanitized_name("test/agent\\path") == "testagentpath"
193193

194194
# Test mixed case
195-
assert docker.sanitized_agent_name("TestAgent") == "testagent"
196-
assert docker.sanitized_agent_name("TEST AGENT") == "test-agent"
195+
assert docker.sanitized_name("TestAgent") == "testagent"
196+
assert docker.sanitized_name("TEST AGENT") == "test-agent"
197197

198198
# Test edge cases
199-
assert docker.sanitized_agent_name(" spaced name ") == "spaced-name"
200-
assert docker.sanitized_agent_name("!!!###") == ""
201-
assert docker.sanitized_agent_name("123 456") == "123-456"
199+
assert docker.sanitized_name(" spaced name ") == "spaced-name"
200+
assert docker.sanitized_name("!!!###") == ""
201+
assert docker.sanitized_name("123 456") == "123-456"

0 commit comments

Comments
 (0)