2a9e57ad0d
This change proposed using Cloudflare API for persistent tunnels. Superseded by temporary tunnel approach using 'cloudflared tunnel --url' which requires no API tokens, account IDs, or DNS configuration.
2.1 KiB
2.1 KiB
ADDED Requirements
Requirement: System creates Cloudflare tunnel on instance start
When a tool instance is started, the system SHALL create a Cloudflare tunnel and DNS record to expose it publicly.
Scenario: Start instance creates tunnel
- WHEN a user starts a tool instance
- THEN the system calls the Cloudflare API to create a tunnel
- AND creates a CNAME DNS record for
instance-{id}.{zone} - AND stores the tunnel ID and public URL in the database
Scenario: Tunnel points to correct container
- WHEN a tunnel is created for an instance
- THEN the tunnel ingress rule maps the subdomain to the container's internal DNS name and port
Requirement: System deletes Cloudflare tunnel on instance stop
When a tool instance is stopped or deleted, the system SHALL clean up the associated Cloudflare tunnel and DNS record.
Scenario: Stop instance deletes tunnel
- WHEN a user stops a running instance
- THEN the system deletes the DNS record
- AND deletes the Cloudflare tunnel
Scenario: Delete instance cleans up tunnel
- WHEN a user deletes an instance
- AND the instance has an active tunnel
- THEN the system deletes both the DNS record and the tunnel
Requirement: Frontend uses public URL for instance access
The frontend SHALL display and link to the public Cloudflare URL for running instances.
Scenario: Open button uses public URL
- WHEN a user views a running instance
- THEN the "Open" button links to the instance's public URL
- AND the URL opens in a new tab
Scenario: Session list shows public URL
- WHEN a user views their sessions
- THEN each running session displays its public URL
Requirement: Only instance owner can start/stop/delete tunnels
The system SHALL verify that only the instance owner can trigger tunnel creation or deletion.
Scenario: Owner starts instance
- WHEN the instance owner clicks "Start"
- THEN the tunnel is created successfully
Scenario: Non-owner attempts to start
- WHEN a non-owner attempts to start an instance
- THEN the request returns 403 Forbidden