Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions augment/hooks/mdm/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -1252,7 +1252,7 @@ def main():

if clear_mode:
clear_setup()
return
return True

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clear mode false success

High Severity

In --clear mode, main() always returns True right after clear_setup(), even when clear_setup() exits early (for example missing root/admin) without performing cleanup. The new __main__ block then exits 0, so mdm/onboard.py treats a failed uninstall as success.

Additional Locations (2)
Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 98cb63a. Configure here.

Comment on lines 1254 to +1255

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Clear Failure Exits Successfully

When --clear runs without root or a cleanup step only prints a failure, clear_setup() returns without raising and this branch still returns True. The new sys.exit(0 if ok else 1) path then reports success to the MDM orchestrator even though cleanup did not happen or only partially completed.


print("=" * 60)
print("Augment Code Hooks - MDM Setup")
Expand All @@ -1266,7 +1266,7 @@ def main():
)
print("This script requires administrator/root privileges")
print(" Please re-run with sudo.")
return
return False

base_url = "https://backend.getunbound.ai"
gateway_url = DEFAULT_GATEWAY_URL
Expand Down Expand Up @@ -1301,27 +1301,27 @@ def main():
print("\nMissing required argument: --api-key")
print("Usage: sudo python3 setup.py --api-key <api_key> [--backend-url <url>] [--app_name <app_name>] [--debug]")
print(" Or: sudo python3 setup.py --clear [--debug]")
return
return False

print("\nGetting device identifier...")
device_id = get_device_identifier()
if not device_id:
print("Failed to get device identifier")
return
return False
debug_print(f"Device identifier: {device_id}")
print("Device identifier retrieved")

print("\nFetching API key from MDM...")
api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id)
if not api_key:
return
return False
print("API key received")

print("\nSetting environment variables system-wide...")
success, _ = set_env_var_system_wide("UNBOUND_AUGMENT_API_KEY", api_key)
if not success:
print("Failed to set UNBOUND_AUGMENT_API_KEY")
return
return False
debug_print("UNBOUND_AUGMENT_API_KEY set successfully")

# Write the per-user unbound config now (needed by the managed hook; harmless
Expand All @@ -1336,7 +1336,7 @@ def main():
print("\nConfiguring Augment managed hooks...")
if not setup_managed_hooks(gateway_url=gateway_url):
print("Failed to configure managed hooks")
return
return False
managed_dir = get_managed_settings_dir()
print(f"Created managed hooks in {managed_dir}")

Expand All @@ -1357,12 +1357,16 @@ def main():

notify_setup_complete(api_key, "augment_code", backend_url=base_url, install_state=state, serial_number=device_id)

return True


if __name__ == "__main__":
try:
main()
ok = main()
except KeyboardInterrupt:
print("\n\nSetup cancelled.")
sys.exit(1)
except Exception as e:
print(f"\nError: {e}")
exit(1)
sys.exit(1)
sys.exit(0 if ok else 1)
24 changes: 14 additions & 10 deletions claude-code/gateway/mdm/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -905,7 +905,7 @@ def main():

if clear_mode:
clear_setup()
return
return True

print("=" * 60)
print("Claude Code - MDM Setup")
Expand All @@ -919,7 +919,7 @@ def main():
)
print("❌ This script requires administrator/root privileges")
print(" Please re-run with sudo.")
return
return False

base_url = "https://backend.getunbound.ai"
gateway_url = DEFAULT_GATEWAY_URL
Expand Down Expand Up @@ -950,13 +950,13 @@ def main():
print("\n❌ Missing required argument: --api-key")
print("Usage: sudo python3 setup.py --api-key <api_key> [--backend-url <url>] [--app_name <app_name>] [--debug]")
print(" Or: sudo python3 setup.py --clear [--debug]")
return
return False

print("\n🔍 Getting device identifier...")
device_id = get_device_identifier()
if not device_id:
print("❌ Failed to get device identifier")
return
return False
debug_print(f"Device identifier: {device_id}")
print("✅ Device identifier retrieved")

Expand All @@ -966,7 +966,7 @@ def main():
print("\n🔑 Fetching API key from MDM...")
claude_api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id)
if not claude_api_key:
return
return False
print("✅ API key received")

print("\n📝 Setting environment variables system-wide...")
Expand All @@ -977,13 +977,13 @@ def main():
success, env_changed = set_env_var_system_wide("UNBOUND_API_KEY", claude_api_key)
if not success:
print(f"❌ Failed to set UNBOUND_API_KEY")
return
return False
debug_print("UNBOUND_API_KEY set successfully")

success, url_changed = set_env_var_system_wide("ANTHROPIC_BASE_URL", gateway_url)
if not success:
print(f"❌ Failed to set ANTHROPIC_BASE_URL")
return
return False
debug_print("ANTHROPIC_BASE_URL set successfully")

# Remove leftover hooks scripts, strip leftover user-level Unbound
Expand All @@ -1000,20 +1000,24 @@ def main():
print(f"✅ Created managed settings in {managed_dir}")
else:
print("❌ Failed to configure managed settings")
return
return False

print("\n" + "=" * 60)
print("Setup Complete!")
print("=" * 60)

notify_setup_complete(claude_api_key, "unbound-claude-code", backend_url=base_url, install_state=install_state, serial_number=device_id)

return True


if __name__ == "__main__":
try:
main()
ok = main()
except KeyboardInterrupt:
print("\n\n⚠️ Setup cancelled.")
sys.exit(1)
except Exception as e:
print(f"\n❌ Error: {e}")
exit(1)
sys.exit(1)
sys.exit(0 if ok else 1)
22 changes: 13 additions & 9 deletions claude-code/hooks/mdm/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -1534,7 +1534,7 @@ def main():

if clear_mode:
clear_setup()
return
return True

print("=" * 60)
print("Claude Code Hooks - MDM Setup")
Expand All @@ -1548,7 +1548,7 @@ def main():
)
print("This script requires administrator/root privileges")
print(" Please re-run with sudo.")
return
return False

base_url = "https://backend.getunbound.ai"
gateway_url = DEFAULT_GATEWAY_URL
Expand Down Expand Up @@ -1587,20 +1587,20 @@ def main():
print("\nMissing required argument: --api-key")
print("Usage: sudo python3 setup.py --api-key <api_key> [--backend-url <url>] [--app_name <app_name>] [--debug] [--backfill]")
print(" Or: sudo python3 setup.py --clear [--debug]")
return
return False

print("\nGetting device identifier...")
device_id = get_device_identifier()
if not device_id:
print("Failed to get device identifier")
return
return False
debug_print(f"Device identifier: {device_id}")
print("Device identifier retrieved")

print("\nFetching API key from MDM...")
api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id)
if not api_key:
return
return False
print("API key received")

print("\nSetting environment variables system-wide...")
Expand All @@ -1612,7 +1612,7 @@ def main():
success, _ = set_env_var_system_wide("UNBOUND_CLAUDE_API_KEY", api_key)
if not success:
print("Failed to set UNBOUND_CLAUDE_API_KEY")
return
return False
debug_print("UNBOUND_CLAUDE_API_KEY set successfully")

# Remove gateway artifacts, strip leftover user-level Unbound hooks
Expand All @@ -1630,7 +1630,7 @@ def main():
print(f"Created managed hooks in {managed_dir}")
else:
print("Failed to configure managed hooks")
return
return False

print("\n" + "=" * 60)
print("Setup Complete!")
Expand All @@ -1641,12 +1641,16 @@ def main():
if backfill_mode:
run_backfill(api_key, base_url, get_all_user_homes())

return True


if __name__ == "__main__":
try:
main()
ok = main()
except KeyboardInterrupt:
print("\n\nSetup cancelled.")
sys.exit(1)
except Exception as e:
print(f"\nError: {e}")
exit(1)
sys.exit(1)
sys.exit(0 if ok else 1)
24 changes: 14 additions & 10 deletions codex/gateway/mdm/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -868,7 +868,7 @@ def main():

if clear_mode:
clear_setup()
return
return True

print("=" * 60)
print("Codex - MDM Setup")
Expand All @@ -882,7 +882,7 @@ def main():
)
print("❌ This script requires administrator/root privileges")
print(" Please re-run with sudo.")
return
return False

base_url = "https://backend.getunbound.ai"
gateway_url = DEFAULT_GATEWAY_URL
Expand Down Expand Up @@ -913,13 +913,13 @@ def main():
print("\n❌ Missing required argument: --api-key")
print("Usage: sudo python3 setup.py --api-key <api_key> [--backend-url <url>] [--app_name <app_name>] [--debug]")
print(" Or: sudo python3 setup.py --clear [--debug]")
return
return False

print("\n🔍 Getting device identifier...")
device_id = get_device_identifier()
if not device_id:
print("❌ Failed to get device identifier")
return
return False
debug_print(f"Device identifier: {device_id}")
print("✅ Device identifier retrieved")

Expand All @@ -929,7 +929,7 @@ def main():
print("\n🔑 Fetching API key from MDM...")
codex_api_key = fetch_api_key_from_mdm(base_url, app_name, auth_api_key, device_id)
if not codex_api_key:
return
return False
print("✅ API key received")

# Remove leftover hooks setup env var
Expand All @@ -940,14 +940,14 @@ def main():
success, env_changed = set_env_var_system_wide("OPENAI_API_KEY", codex_api_key)
if not success:
print(f"❌ Failed to set OPENAI_API_KEY")
return
return False
debug_print("OPENAI_API_KEY set successfully")

print("\n📝 Configuring all users...")
user_homes = get_all_user_homes()
if not user_homes:
print("❌ No user home directories found")
return
return False
config_count = 0
for username, home_dir in user_homes:
if write_codex_config_for_user(username, home_dir, f"{gateway_url.rstrip('/')}/v1"):
Expand All @@ -958,7 +958,7 @@ def main():

if config_count == 0:
print("❌ Failed to configure codex for any users")
return
return False

print(f"✅ Configured {config_count} user(s)")

Expand All @@ -971,12 +971,16 @@ def main():

notify_setup_complete(codex_api_key, "unbound-codex", backend_url=base_url, install_state=install_state, serial_number=device_id)

return True


if __name__ == "__main__":
try:
main()
ok = main()
except KeyboardInterrupt:
print("\n\n⚠️ Setup cancelled by user.")
sys.exit(1)
except Exception as e:
print(f"\n❌ An error occurred: {e}")
exit(1)
sys.exit(1)
sys.exit(0 if ok else 1)
Loading