Commit graph

4 commits

Author SHA1 Message Date
A
f1e8d946df
fix: secure upload_file functions against command injection in 5 clouds (#453)
Replace unsafe printf '%q'-escaped unquoted variables with validated
single-quoted embedding in upload_file() for fly, northflank, daytona,
e2b, and koyeb. The previous pattern used unquoted $escaped_content and
$escaped_path in command strings passed to bash -c or run_server, which
could allow command injection via crafted filenames.

The fix:
- Validates remote_path rejects unsafe chars (', $, `, newlines)
- Uses base64 content directly (alphanumeric + /+= is shell-safe)
- Single-quotes both content and path in the command string
- Uses printf '%s' instead of echo for safer output

Matches the pattern already used by render, modal, and railway.

Agent: security-auditor

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 06:28:45 -08:00
A
f79de27bc7
refactor: replace custom config loaders with shared helpers in 3 cloud libs (#445)
Migrate binarylane, northflank, and kamatera to use the shared
ensure_api_token_with_provider, _load_json_config_fields, and
_save_json_config helpers, removing ~120 lines of duplicated
token loading/saving/validation logic.

- binarylane: replace 50-line ensure_binarylane_token with
  ensure_api_token_with_provider + test_binarylane_token
- northflank: remove _load_northflank_config, _save_northflank_token,
  _northflank_login; consolidate into ensure_api_token_with_provider
  with test_northflank_token doing login + validation
- kamatera: replace inline python3 config loader with
  _load_json_config_fields, replace manual JSON save with
  _save_json_config

Agent: complexity-hunter

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-11 05:20:08 -08:00
A
aac47f1823
refactor: Decompose long functions in Railway and Northflank providers (#220)
Railway create_server (76 lines) split into:
- _railway_create_project: project init and linking
- _railway_deploy_container: Dockerfile creation and deploy
- _railway_wait_for_deployment: deployment readiness polling

Northflank ensure_northflank_token (59 lines) split into:
- _northflank_login: CLI authentication wrapper
- _load_northflank_config: config file loading and validation
- _save_northflank_token: token persistence

Northflank create_server (54 lines): extracted
- _northflank_wait_for_service: service readiness polling

No function exceeds 42 lines after decomposition.

Agent: complexity-hunter

Co-authored-by: A <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-02-10 12:32:54 -08:00
A
822413bcbf
feat: Add Northflank cloud provider (#210)
Add Northflank container platform with CLI exec access:
- northflank/lib/common.sh: Provider primitives (auth, create, exec, upload)
- northflank/claude.sh: Claude Code deployment
- northflank/aider.sh: Aider deployment
- northflank/openclaw.sh: OpenClaw deployment
- manifest.json: Add Northflank cloud + 14 matrix entries (3 implemented, 11 missing)
- northflank/README.md: Usage instructions and pricing info

Free tier: 2 services. Pay-per-second pricing after free tier.

Agent: cloud-scout

Co-authored-by: B <6723574+louisgv@users.noreply.github.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-10 10:43:01 -08:00