syntheses:binarylane-architecture-panels-customer-entry-points
Differences
This shows you the differences between two versions of the page.
| syntheses:binarylane-architecture-panels-customer-entry-points [16/07/2026 03:54] – created - external edit 127.0.0.1 | syntheses:binarylane-architecture-panels-customer-entry-points [15/10/2026 05:26] (current) – removed - external edit (Unknown date) 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== BinaryLane Architecture - Panels & Customer Entry Points ====== | ||
| - | |||
| - | ===== Notes ===== | ||
| - | |||
| - | |||
| - | |||
| - | ===== Summary ===== | ||
| - | |||
| - | ====== BinaryLane Architecture - Panels & Customer Entry Points ====== | ||
| - | |||
| - | ===== Overview ===== | ||
| - | |||
| - | BinaryLane' | ||
| - | |||
| - | ===== Repository Structure (git.mammoth.com.au, | ||
| - | |||
| - | ==== Core Repos ==== | ||
| - | |||
| - | * **vps/vps** (project 1) — Main .NET solution containing all customer-facing software | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | |||
| - | ==== product/ | ||
| - | |||
| - | The '' | ||
| - | |||
| - | < | ||
| - | product/ | ||
| - | ├── AdminSite/ | ||
| - | ├── ClassicPanel/ | ||
| - | ├── PanelSite/ | ||
| - | ├── WebApi/ | ||
| - | ├── Domain/ | ||
| - | ├── Persistence/ | ||
| - | ├── HostDaemon/ | ||
| - | ├── StatsDaemon/ | ||
| - | ├── MpayClient/ | ||
| - | ├── SynergyClient/ | ||
| - | ├── Configuration.* | ||
| - | ├── Controllers.Shared | ||
| - | ├── MonoRail/ | ||
| - | ├── Mammoth.Wooly/ | ||
| - | ├── MigratorDotNet/ | ||
| - | ├── lib/ — Shared libraries | ||
| - | ├── devenv/ | ||
| - | └── scripts/ | ||
| - | </ | ||
| - | |||
| - | ===== Customer-Facing Entry Points (EXTERNAL) ===== | ||
| - | |||
| - | ==== 1. WebApi (product/ | ||
| - | * **REST API** — Primary programmatic customer interface | ||
| - | * **Controllers: | ||
| - | * **Called by:** PanelSite frontend, binarylane-cli, | ||
| - | * **Key service:** AdvancedFirewallApiService.SetFirewallRules() — accepts firewall rules for a guest | ||
| - | * **Authentication: | ||
| - | |||
| - | ==== 2. PanelSite (product/ | ||
| - | * **Modern SPA** — .NET Core backend + React/ | ||
| - | * **Purpose: | ||
| - | * **Customer access:** Web browser at panel.binarylane.com.au (or equivalent) | ||
| - | * **Visual regression tests:** vps/ | ||
| - | |||
| - | ==== 3. ClassicPanel (product/ | ||
| - | * **Legacy WebForms** — MonoRail MVC on ASP.NET | ||
| - | * **Controllers: | ||
| - | * **Customer access:** Older panel URL (being phased out per issue #1802) | ||
| - | * **Notable endpoints: | ||
| - | * POST / | ||
| - | * POST / | ||
| - | * POST / | ||
| - | * GET / | ||
| - | |||
| - | ==== 4. AdminSite (product/ | ||
| - | * **Admin panel** — Staff only, NOT customer-facing | ||
| - | * **Purpose: | ||
| - | * **Access restricted** to permitted admin addresses (PermittedAdminAddress entity) | ||
| - | |||
| - | ===== Key Domain Entities (product/ | ||
| - | |||
| - | These are the core objects customers interact with: | ||
| - | |||
| - | * **Guest** — A VPS/server instance. Has FirewallRules, | ||
| - | * **GuestFirewallRule** — Individual firewall rule with SourceAddresses, | ||
| - | * **Customer** — Customer account | ||
| - | * **Plan** / **WebPlan** — Hosting plans | ||
| - | * **Lease** / **WebLease** — Billing leases | ||
| - | * **Invoice** / **InvoiceLineItem** — Billing | ||
| - | * **DomainName** — Domain registration | ||
| - | * **Backup** / **Snapshot** — Data protection | ||
| - | * **Network** / **Interface** — Networking | ||
| - | * **Host** — Physical compute node | ||
| - | |||
| - | ===== Compute Host Stack (External-Triggerable) ===== | ||
| - | |||
| - | When a customer modifies firewall rules or powers a guest on/off, the following chain executes: | ||
| - | |||
| - | - **Customer action** → WebApi/ | ||
| - | - **Domain validation** → Validators (per-item, NOT per-collection) | ||
| - | - **Command execution** → NHibernate persists changes | ||
| - | - **GuestManagementService.UpdateGuestNetwork()** → Sends config to HostDaemon | ||
| - | - **HostDaemon** → Runs on compute host, applies iptables rules | ||
| - | - **OperatingSystem.XenConfiguration()** → Builds FIREWALLRULES xenConfig string | ||
| - | - **Guest.GetIptablesEntries()** → Iterates all firewall rules | ||
| - | - **GuestFirewallRule.GetIptablesEntries()** → 4-level Cartesian loop (source x destination x protocol x port) | ||
| - | - **qemu-network/ | ||
| - | |||
| - | ===== Critical Bug Surface Areas ===== | ||
| - | |||
| - | ==== Firewall Rules (highest impact) ==== | ||
| - | * GuestFirewallRule.cs — No cap on SourceAddresses/ | ||
| - | * ValidateAddressListAttribute.cs — Validates individual addresses but NOT collection count | ||
| - | * GuestFirewallRule.GetIptablesEntries() — 4-level nested loop (source x dest x protocol x port) | ||
| - | * Guest.GetIptablesEntries() — Aggregates across ALL rules on a guest (no size limit) | ||
| - | * OperatingSystem.XenConfiguration() line 350 — FIREWALLRULES xenConfig built from unbounded list | ||
| - | * HostDaemon — claim_lock iptables held during apply, serialising across ALL guests on host | ||
| - | |||
| - | ==== Payment/ | ||
| - | * ApproveAccount / ProcessDomainNameCommand — Race condition (#1635, #1863) | ||
| - | * Mpay token-delete — Timeouts blocking card updates (#1811) | ||
| - | * PayPal opening deposit — Can leave billing on old card (#1891) | ||
| - | |||
| - | ==== Guest Lifecycle ==== | ||
| - | * Live migration with DB failover (#1889, #1890) | ||
| - | * Paid guest stuck suspended (#1884) | ||
| - | * Building guest receiving leases (#1886) | ||
| - | |||
| - | ===== Non-Customer-Facing (INTERNAL) ===== | ||
| - | |||
| - | * **AdminSite** — Staff only | ||
| - | * **HostDaemon** — Runs on compute hosts, not directly customer-accessible | ||
| - | * **StatsDaemon** — Internal statistics | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | * **vps/ | ||
| - | |||
| - | |||
| - | ===== Related ===== | ||
| - | |||
| - | ==== Related Pages ==== | ||
| - | |||
| - | * [[customer-side-bug-finding-methodology|Customer-Side Bug Finding Methodology]] | ||
syntheses/binarylane-architecture-panels-customer-entry-points.1784174059.txt.gz · Last modified: by 127.0.0.1
