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 (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)