Skip to content

Releases: joaodrp/omarchy-controld-panel

v1.0.2

Choose a tag to compare

@joaodrp joaodrp released this 24 Aug 21:08

Security fixes, from a review of the whole plugin after two rounds of marketplace review.

  • Both process streams are capped at the producer, not only stdout. cdctl reports failures as a
    JSON envelope on stderr, so the two are bounded separately rather than merged.
  • Every Text states Text.PlainText. The default is Text.AutoText, which reads anything
    tag-shaped as rich text, so a looked-up name carrying markup was rendered as markup.
  • The analytics region must look like a name. It decides the request host, and a / in it ended
    the authority and sent the API token elsewhere.
  • Analytics requests no longer follow redirects, which urllib follows while re-sending the
    Authorization header, including to another host and to plain http.
  • -- ends option parsing before every hostname, so a name beginning with a dash is a host and
    not a flag, and hostnames from the activity log are validated like typed ones.
  • Row counts asked of the API are enforced where they are read, rather than trusted.

CI now checks the two invariants qmllint cannot express: a Text without an explicit format, and
a command that would run unbounded.

v1.0.1

Choose a tag to compare

@joaodrp joaodrp released this 23 Aug 22:13

Bounds every read by size as well as by time.

A marketplace review pointed out that the watchdogs added in 1.0.0 bound how long a command may
run, not how much it may return. StdioCollector holds a whole stream and offers no cap, and the
panel runs inside a shell process that outlives it, so a hostile response or a pathological config
file could exhaust the shell rather than the plugin.

  • scripts/controld_api.py reads a bounded number of bytes and reports a body that exceeds it,
    for the error body as well as the answer.
  • Every process the panel runs is piped through head -c under pipefail, so the command's own
    exit code still reaches the error handling and argv still passes positionally.
  • The resolver probe caps each section as well as the whole, so one large file cannot crowd out
    the sections after it and hide the resolver that answers.

No behaviour change for anyone whose account and configuration are ordinary size.

v1.0.0

Choose a tag to compare

@joaodrp joaodrp released this 23 Aug 19:30

What Control D is doing on your machine, in the Omarchy bar.

What it does

  • Bypass a host from the activity log when a site will not load, and put the block back.
  • Switch which profile your endpoint enforces.
  • Add, switch off and delete custom rules.
  • Stand Control D down and bring it back.
  • Identifies your endpoint from the resolver actually in use: ctrld, stubby, dnscrypt-proxy,
    unbound, dnsmasq, NetworkManager, systemd-resolved, or a bare IPv6 address.
  • Queries over time, the blocked share, and the domains and filters doing the blocking.
  • Keyboard first, with ? for the legend.

Install

omarchy plugin add https://github.com/joaodrp/omarchy-controld-panel.git --enable

Requires cdctl, installed and authenticated.
Everything else it uses ships with Omarchy.

Writes go through cdctl and are verified by a read-back. Your API token is read the way cdctl
reads it and sent in a request header only, never a process argument.

An independent project, not affiliated with Control D.