Skip to content

A site's check for a person is shown to the person, through the server - #1

Merged
iStorry merged 1 commit into
mainfrom
person-check
Nov 15, 2026
Merged

iStorry merged 1 commit into
mainfrom
person-check

Conversation

@iStorry

@iStorry iStorry commented Nov 15, 2026

Copy link
Copy Markdown
Owner

A plugin's site may put a check before its pages that only a person in a browser can pass (a picture of characters to type, say). A plugin now says so, and never answers it.

What it does

  • Contract (additive, PluginApi.Version stays 1): StageException.Check carries a PersonCheck (the page, and the cookie that says it was passed); a plugin that is an ICheckedPlugin hears of a pass.
  • Agent: an answer that failed on a check carries it to the PC; AgentCommand.Passed brings the pass back to the plugins.
  • PC: on the Browser page the check's own page opens in a WebView2 window with a profile of its own, reached through a SOCKS forward over ssh (ServerTunnel), so the site sees the server's address. When the cookie is there the window closes and the read is asked once more. One window at a time; a check given up on is left alone for 30 s.
  • ssh: the tunnel is the one run that forwards anything, on loopback, for as long as the window is open. Every other run still clears all forwardings.

Tested

  • The whole suite passes locally (579), with new tests for the tunnel's arguments and the check's round trip between PC and agent.
  • Not run: the window and the tunnel against a real server, and a real site's check.

A plugin's site may put a check before its pages that only a person in a browser can pass. A plugin says so with StageException.Check (a PersonCheck: the page and the cookie that says it was passed), and never answers it.

On the Browser page the PC opens that page as it is in a WebView2 window with a profile of its own, reached through a SOCKS forward over ssh (ServerTunnel), so the site sees the server's address. When the cookie is there the window closes, the agent hears of it (AgentCommand.Passed), plugins that are an ICheckedPlugin are told, and the read is asked once more.

The tunnel is the one run of ssh that forwards anything, on loopback, for as long as the window is open. The plugin contract's number stays: nothing built against it breaks.

The window and the tunnel have not been run against a server yet.
@iStorry
iStorry merged commit e8a87ab into main Nov 15, 2026
2 checks passed
@iStorry
iStorry deleted the person-check branch November 15, 2026 09:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant