Skip to content

v0.4.0

Choose a tag to compare

@steeb-k steeb-k released this 14 Jul 03:37
· 30 commits to main since this release

Per-device action buttons, and relays you can test before you trust them

Added

  • Per-device action buttons. A device can be given a labelled, coloured button — "RDP", "SSH", "Web" — that runs a command of your choosing. It appears on that device's row in the member list and in a new section at the top of the tray menu, read as "device (label)", so a machine can be reached without opening the window. Configure it from Action button in the member panel: a label, one of eight colours, a command, and an Open in a terminal window checkbox. {ip}, {name}, {hostname} and {node_id} are substituted at click time.

    Open in a terminal window is what makes ssh (or any console program) usable: without it the command is detached with no streams, which is right for a graphical program like mstsc and useless for one that wants a console.

    Actions are stored per machine, in your own config directory — they are the one piece of per-member state the daemon knows nothing about. The command that reaches a device is a property of the machine you're sitting at (mstsc on Windows, xfreerdp on Linux), so the roster would only push a Windows command line onto a Mac; and unlike a note or a nickname, an action is an executable command line, which has no business in a root-owned store. It is spawned as a program with arguments — no shell — so a config file can't smuggle in a pipeline.

  • A relay is checked against the relay server before it is saved. Both the CLI and the GUI now connect to the relay with the credentials you gave, from a throwaway endpoint. relay add asks for the token again if the relay won't accept it; the GUI keeps its Add a relay server dialog open, reports the failure in place, and offers Try again or Add anyway (a relay that is merely down looks exactly like a wrong token from out here). Saving a relay this device can't use is not a small mistake: the device homes on that relay, and peers lose both the relay path to it and — hole-punching being relay-coordinated — usually the direct one.

  • Test a relay you've already added, from the ⇄ button beside it in the relay list. A relay can start refusing a token it used to accept (rotated, revoked, redeployed) and nothing else would tell you — the symptom is peers quietly losing sight of this device.

Fixed

  • A GUI/daemon version mismatch reported itself as "The Nullgate service isn't running". The service was running perfectly well; it just spoke a different IPC protocol version — so the one message that could have told you to update the other half was replaced, a frame after it appeared, by one that sent you to restart a service that was already up. The GUI now reports why the event stream ended, so a mismatch stays on screen.
  • The "Relay servers" warning banners now span the panel, instead of sitting as narrow cards inside it.
  • The window title is vertically centred again.

Changed

  • nullgate-cli relay add no longer takes --token; it asks for the token. Passing a secret as an argument put it in the shell's history file and in every other local user's view of ps — a leak to exactly the readers that root ownership of the data dir is meant to exclude. It is now read with echo off (from the terminal, or from stdin when piped, so scripting still works), and a blank answer means the relay has no token.
  • The app version no longer sits under the title in the header bar. It crowded the bar, and the version is already on the About row and in the About dialog.

Windows: install the MSI. Linux/macOS: curl -fsSL https://raw.githubusercontent.com/steeb-k/nullgate/main/install.sh | sh (or nullgatectl --update). Android: install the APK (it updates in place). Artifacts are uploaded as each platform's build finishes, so a download that isn't here yet will appear shortly.