Review of "Tailscale QS" version v7 (10)

Details Page Preview

Add Tailscale to GNOME quick settings. Fork of joaophi/tailscale-gnome-qs with continued maintenance and improvements. Features: • Quick Toggle — Enable/disable Tailscale directly from the Quick Settings panel • Copy Node IP - Long-click a node to copy that node's ip address to the clipboard • Exit Nodes — Select and disconnect exit nodes, including Mullvad support with country flag display • Multi-Account — Switch between multiple Tailscale accounts (profiles) •Status Indicator — Visual indication of your Tailscale connection status NOTE: This extension accesses the clipboard to copy the node ip address. NOTE: Make sure you set your user as tailscale operator: `sudo tailscale set --operator=$USER`

Extension Homepage
https://github.com/tailscale-qs/tailscale-gnome-qs

No comments.

Diff Against

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 2 manual_review 1

Shexli found 3 issues that may need reviewer attention.

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • extension.js:333
    St.Clipboard.get_default()
  • extension.js:334
    St.Clipboard.get_default()

EGO-L-003 warning

signals connected by extension should be disconnected in disable()

Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.

Disconnect all signals

  • extension.js:79
    this._RunningNotifier = tailscale.connect('notify::running', () => setVisible())
  • extension.js:78
    this._exitNodeNotifier = tailscale.connect('notify::exit-node', () => setVisible())
  • extension.js:127
    action.connect('notify::pressed', () => {
                          if (action.pressed)
                              this.add_style_pseudo_class('active');
                          else
                              this.remove_style_pseudo_class('active');
                      })
  • extension.js:299
              this._notifyExitNodeName = tailscale.connect('notify::exit-node-name', () => {
                  this.subtitle = tailscale.exit_node_name;
                  this.menu.setHeader(icon, this.title, this.subtitle);
                  disableExitNodeButton.reactive = tailscale.exit_node !== '';
              })
  • extension.js:362
    this._notifyNodes = tailscale.connect('notify::nodes', obj => updateNodes(obj))
  • extension.js:444
    this._notifyProfiles = tailscale.connect('notify::profiles', obj => updateProfiles(obj))
  • extension.js:388
    tailscale.connect('notify::accept-dns', obj => dns.setToggleState(obj.accept_dns))
  • extension.js:377
    tailscale.connect('notify::accept-routes', obj => routes.setToggleState(obj.accept_routes))
  • extension.js:399
    tailscale.connect('notify::allow-lan-access', obj => lan.setToggleState(obj.allow_lan_access))
  • extension.js:421
    tailscale.connect('notify::ssh', obj => ssh.setToggleState(obj.ssh))
  • extension.js:410
    tailscale.connect('notify::shields-up', obj => shields.setToggleState(obj.shields_up))

EGO-L-008 warning

Soup.Session instances should be aborted during cleanup

Soup.Session instances should be aborted during cleanup.

Soup.Session.abort

  • tailscale.js:11
            this.session = new Soup.Session({
                'remote-connectable': address,
                'timeout': 0,
                'idle-timeout': 0,
            })

All Versions

Version Status
v7 (14) Active
v7 (13) Rejected
v7 (12) Rejected
v7 (11) Rejected
v7 (10) Rejected
v6 (9) Active
v6 (8) Rejected
v6 (7) Rejected
v6 (6) Rejected
5 Active
4 Inactive
3 Inactive
2 Rejected
1 Rejected

Previous Reviews on this Version

JustPerfection rejected
1. Please use `connectObject()` and `disconnectObject()` so it is easier to track for cleanup. 2. Timeout should be removed on destroy and before creating a new one (line 157 `extension.js`): [EGO Review Guidelines: Timeout](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#remove-main-loop-sources) 3. Remove version from the import (line 4 `tailscale.js`). 4. Also fix all of the Shexli's EGO-L-003. When you connect, you should disconnect (`disconnectObject`). Not source remove: [EGO Review Guidelines: Disconnect all signals](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#disconnect-all-signals)