Public-flip audit: URL refresh + minor scrubs

Repository URLs, version strings, and example creds normalized for the
public git.sulkta.com endpoint. No code-behavior change.

Audit-applied by the public-flip rolling-audit pass — see
kayos/openclaw-workspace memory/2026-05-27 logs for the campaign
context.
This commit is contained in:
Cobb Hayes 2026-05-27 10:59:58 -07:00
parent 44ce76cb44
commit 99ee5f1a9a
12 changed files with 79 additions and 67 deletions

View file

@ -1,11 +1,11 @@
# ispconfig-py
Python SDK for the ISPConfig remote SOAP API. Internal tooling for the Sulkta
Coop — wraps the panel's SOAP surface so we stop writing throw-away PHP
scripts every time we need to touch a site, zone, or mailbox.
Python SDK for the ISPConfig remote SOAP API. Wraps the panel's SOAP surface
so you stop writing throw-away PHP scripts every time you need to touch a
site, zone, or mailbox.
v0.2 covers the **full remote API** — every method exposed by ISPConfig's
`remote/index.php`, 312 of them as of Rackham 2026-04-22. The hand-audited
v0.2 covers the full remote API — every method exposed by ISPConfig's
`remote/index.php`, 312 of them as of ISPConfig 3.2.11. The hand-audited
helpers (stable names, param-order fixes, convenience wrappers) sit on top
of auto-generated wrappers that mirror the PHP surface 1:1.
@ -32,8 +32,8 @@ from ispconfig import ISPConfigClient
with ISPConfigClient(
"https://panel.example.com:8080/remote/index.php",
username="kayos",
password="hunter2",
username="admin",
password="...",
) as c:
site = c.sites.web_domain_get(156)
print(site["domain"], site["php"])
@ -112,7 +112,7 @@ c.databases.user_update(client_id=5, primary_id=42, params={"database_password":
#### `clients`
```python
cli = c.clients.get_by_username("jacob")
cli = c.clients.get_by_username("alice")
groupid = c.clients.get_groupid(cli["client_id"])
ids = c.clients.get_all()
```
@ -120,8 +120,8 @@ ids = c.clients.get_all()
### Auto-generated (full surface, v0.2)
Wrappers mirror the PHP method names 1:1. Param shapes come from PHPDoc where
available and default to `Any` otherwise. Verified to wire up against Rackham
2026-04-22 but not yet battle-tested in production use — file issues if you
available and default to `Any` otherwise. Verified to wire up against
ISPConfig 3.2.11 but not exercised in every code path — file issues if you
hit one.
| Module | Class | Methods |
@ -191,8 +191,7 @@ funcs = c.list_functions()
of older documentation and PHP snippets floating around, ISPConfig 3.2.11+
wants the origin **without** a trailing dot: `dns_zone_get_id("example.com")`
works, `dns_zone_get_id("example.com.")` raises `no_domain_found`. Our
wrapper strips a trailing dot for you so either call works. Verified
against Rackham 2026-04-22.
wrapper strips a trailing dot for you so either call works.
- **`mail_user_get` with a filter dict returns inconsistent shapes.** If the
filter matches multiple rows you get an array; exactly-one match returns a
bare map. Our `mail.user_get(filter_dict)` always normalizes to a list.
@ -249,7 +248,7 @@ To run the live smoke test against a real panel:
```bash
export ISPCONFIG_TEST_URL="https://panel.example.com:8080/remote/index.php"
export ISPCONFIG_TEST_USER="kayos"
export ISPCONFIG_TEST_USER="admin"
export ISPCONFIG_TEST_PASS="..."
export ISPCONFIG_TEST_VERIFY_SSL=0 # for self-signed certs
pytest tests/test_smoke.py
@ -261,14 +260,14 @@ require admin privileges skip gracefully with a documented reason.
## Regenerating for newer ISPConfig versions
When ISPConfig ships a new version on Rackham (or another panel), resync:
When ISPConfig ships a new version, resync against its PHP sources:
```bash
# 1. Pull fresh PHP sources from the panel (sudo required; ask Cobb for creds):
# 1. Pull fresh PHP sources from the panel host (sudo required):
mkdir -p /tmp/ispconfig-php-src
ssh rackham "sudo tar -cz -C /usr/local/ispconfig/interface/lib/classes/remote.d ." \
ssh PANEL_HOST "sudo tar -cz -C /usr/local/ispconfig/interface/lib/classes/remote.d ." \
| tar -xz -C /tmp/ispconfig-php-src/
ssh rackham "sudo cat /usr/local/ispconfig/interface/lib/classes/remoting.inc.php" \
ssh PANEL_HOST "sudo cat /usr/local/ispconfig/interface/lib/classes/remoting.inc.php" \
> /tmp/ispconfig-php-src/remoting.inc.php
# 2. Re-extract the method inventory: