diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d0cc42c..a0e2fda 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -158,7 +158,8 @@ jobs: sudo apt-get install -y --no-install-recommends \ build-essential meson ninja-build pkg-config gettext \ libglib2.0-dev nlohmann-json3-dev \ - libgtkmm-4.0-dev libadwaita-1-dev libsecret-1-dev + libgtkmm-4.0-dev libadwaita-1-dev libsecret-1-dev \ + appstream - name: Configure and build the GUI working-directory: app @@ -169,3 +170,11 @@ jobs: - name: Run the test suite working-directory: app run: ./build/urnetwork-tests + + # app/meson.build stamps the release version and date into the metainfo + # from -Dapp_version, so this validates the GENERATED file, not the + # template. appstreamcli is the same validator Flathub gates on, and + # nothing checked this file before. + - name: Validate the AppStream metainfo + working-directory: app + run: appstreamcli validate --no-net --pedantic build/com.bringyour.network.metainfo.xml diff --git a/APPIMAGE.md b/APPIMAGE.md index e6c71eb..cf32ba8 100644 --- a/APPIMAGE.md +++ b/APPIMAGE.md @@ -738,11 +738,11 @@ bundling format inside a `.deb` — legitimate, but then use `/opt` + `$ORIGIN` - **apt gets strict in 26.04, not 24.04.** apt 3.2 uses Sequoia; `apt-key` is gone; `Signed-By` must point at a dearmored keyring in `/usr/share/keyrings`, never `/etc/apt/trusted.gpg.d` (which would trust our key for *all* repositories). -- **Desktop-file naming**: `main.cpp:67` uses app id `network.ur.urnetwork` but the +- **Desktop-file naming**: `main.cpp:67` uses app id `com.bringyour.network` but the desktop file is `urnetwork.desktop`. Nothing is broken today (`StartupWMClass` covers window association), but D-Bus activation — the clean way to deliver a `urnetwork://` URI to a running instance — requires the names to match. - Rename to `network.ur.urnetwork.desktop`. + Rename to `com.bringyour.network.desktop`. ### 10d. The recommended alternative, if the direction changes @@ -903,7 +903,7 @@ working with no error anywhere — a changed type is a decode error, and a chang in from `postinst` (IVPN's latent bug). **`install.sh` must run `update-desktop-database` and `gtk-update-icon-cache` itself** — see the §5 callout for why this one silently passes testing and reaches users broken. -- [ ] Rename the desktop file to `network.ur.urnetwork.desktop` to match +- [ ] Rename the desktop file to `com.bringyour.network.desktop` to match `main.cpp:67`'s app id. Harmless today, but D-Bus activation — the clean way to hand a `urnetwork://` URI to a running instance — requires the names to match. - [ ] Autostart via a root-owned **inert template** (`/etc/urnetwork/autostart/`) that diff --git a/MIGRATION.md b/MIGRATION.md index 30b9876..745195e 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -37,12 +37,12 @@ a known follow-up, do not silently pretend loopback is private. | `/usr/lib/urnetwork/libURnetworkSdk.so` | daemon pkg | rpath `$ORIGIN` | | `/usr/bin/urnetwork` | daemon pkg | **launcher script**, the stable `Exec=` target | | `/lib/systemd/system/urnetworkd.service` | daemon pkg | `/lib`, in every release's load path | -| `/usr/share/applications/network.ur.urnetwork.desktop` | daemon pkg | filename **must** match `main.cpp`'s app id | -| `/usr/share/icons/hicolor/{48x48,256x256}/apps/urnetwork.png` | daemon pkg | | +| `/usr/share/applications/com.bringyour.network.desktop` | daemon pkg | filename **must** match `main.cpp`'s app id | +| `/usr/share/icons/hicolor/{48x48,64x64,128x128,256x256,512x512}/apps/com.bringyour.network.png` | daemon pkg | one 1024 master, downscaled | | `/usr/share/urnetwork/world-110m.json` | daemon pkg | globe land outlines | | `/usr/share/urnetwork/icons/urnetwork-tray-*.png` | daemon pkg | tray art | | `/usr/share/locale//LC_MESSAGES/urnetwork.mo` | daemon pkg | gettext catalogs | -| `/etc/urnetwork/autostart/network.ur.urnetwork.desktop` | daemon pkg | **inert template**, GUI symlinks it | +| `/etc/urnetwork/autostart/com.bringyour.network.desktop` | daemon pkg | **inert template**, GUI symlinks it | | `/etc/NetworkManager/conf.d/95-urnetwork.conf` | daemon pkg | `unmanaged-devices=interface-name:urnet0` | | `/etc/udev/rules.d/85-urnetwork-unmanaged.rules` | daemon pkg | `ENV{NM_UNMANAGED}="1"` | | `~/.local/lib/urnetwork/URnetwork.AppImage` | **user** | never packaged; must be user-writable | diff --git a/PLAN.md b/PLAN.md index 49c92b0..dedbcf5 100644 --- a/PLAN.md +++ b/PLAN.md @@ -302,7 +302,7 @@ than being the one platform that differs. refreshed by **dpkg triggers**, no dependency or maintainer script needed; §9.7.1 covers `x-scheme-handler/urnetwork`. ⚠️ Triggers fire only for files **dpkg** installs, so never symlink one in from `postinst` (IVPN's latent bug). Residual: - `main.cpp:67`'s app id `network.ur.urnetwork` does not match + `main.cpp:67`'s app id `com.bringyour.network` does not match `urnetwork.desktop`; harmless today, but D-Bus activation requires them to match. - **R8 — GeoClue ≥ 2.7.0 is required for the location override** [confirmed]: Ubuntu 22.04 (2.5.7) and Debian 12 (2.6.0) can **never** support it. Those users diff --git a/app/meson.build b/app/meson.build index 2fad86a..77a35e9 100644 --- a/app/meson.build +++ b/app/meson.build @@ -305,30 +305,99 @@ endif # host_integration=false (Flatpak) drops it with the rest: the GUI never calls # polkit — the daemon does, against a subject the GUI cannot influence. if host_integration -install_data('..' / 'packaging' / 'polkit' / 'network.ur.urnetwork.policy', +install_data('..' / 'packaging' / 'polkit' / 'com.bringyour.network.policy', install_dir : get_option('datadir') / 'polkit-1' / 'actions') endif -# desktop file: the filename MUST match main.cpp's app id network.ur.urnetwork +# desktop file: the filename MUST match main.cpp's app id com.bringyour.network # (D-Bus activation requires it; APPIMAGE.md §11d) -install_data('packaging/network.ur.urnetwork.desktop', +install_data('packaging/com.bringyour.network.desktop', install_dir : get_option('datadir') / 'applications') -# AppStream metadata — required by Flathub, read by GNOME Software / Discover -# for the .deb and .rpm too. The component id matches the .desktop basename. -install_data('packaging/network.ur.urnetwork.metainfo.xml', +# AppStream metadata — required by Flathub, read by GNOME Software / Discover. +# The component id matches the .desktop basename. +# +# THE RELEASE STAMP IS DERIVED, NOT HARDCODED. The release version is +# ..-[-]. Nothing used to write it into this file, so +# it sat at whatever was typed last while the pipeline shipped something else — +# and this element is exactly what GNOME Software, KDE Discover and the Flathub +# page display. +# +# The FULL version goes in, suffix and all: appstreamcli 1.0.2 (the version on +# the ubuntu-24.04 image CI validates on) accepts a version like +# "2026.8.16-1020679030-beta" with exit 0, so there is no reason to truncate. +# Truncating would advertise a version that matches no artifact — every other +# consumer of $VERSION (UR_APP_VERSION in both binaries, every package +# filename, the release-asset gates) uses the whole string — and would collapse +# every build of the same UTC day onto one indistinguishable release element. +# +# Only the DATE is derived, from the leading ... +# +# NB: the .deb, .rpm and tarball do NOT ship this file. packaging/lib/common.sh's +# assemble_daemon_root() copies an explicit whitelist (desktop entry, polkit +# policy, icons) that does not include usr/share/metainfo, and make-appimage.sh +# does not package it either. The Flatpak is the only artifact that installs it, +# which is why -Dapp_version has to reach the Flatpak build. +_appver = get_option('app_version') +_av = _appver.split('-')[0] +_vp = _av.split('.') +if _vp.length() == 3 and _vp[0].to_int() > 2000 + _mm = _vp[1].to_int() < 10 ? '0' + _vp[1] : _vp[1] + _dd = _vp[2].to_int() < 10 ? '0' + _vp[2] : _vp[2] + appstream_date = _vp[0] + '-' + _mm + '-' + _dd +else + # -Dapp_version was not passed (the 0.0.0 dev sentinel). LOUD on purpose: a + # document saying version="0.0.0" is perfectly valid AppStream, so neither the + # meson test below nor CI's validate step can catch it — the build log is the + # only place it can surface. A release build must never take this branch. + warning('app_version was not set, so the AppStream release stamp will say "' + + _appver + '". Pass -Dapp_version= for anything you ' + + 'intend to ship; the store front reads this element.') + appstream_date = '2026-08-20' +endif + +metainfo_xml = configure_file( + input : 'packaging/com.bringyour.network.metainfo.xml.in', + output : 'com.bringyour.network.metainfo.xml', + configuration : { + 'APPSTREAM_VERSION' : _appver, + 'APPSTREAM_DATE' : appstream_date, + }, +) +install_data(metainfo_xml, install_dir : get_option('datadir') / 'metainfo') -# hicolor icons (Icon=urnetwork in the desktop file) -install_data('packaging/icons/hicolor/48x48/apps/urnetwork.png', - install_dir : get_option('datadir') / 'icons' / 'hicolor' / '48x48' / 'apps') -install_data('packaging/icons/hicolor/256x256/apps/urnetwork.png', - install_dir : get_option('datadir') / 'icons' / 'hicolor' / '256x256' / 'apps') +# Nothing validated this file before, which is how a stale version survived in +# it. appstreamcli is the validator Flathub gates submissions on, so a bad edit +# fails here instead of in review. Optional: not every build host ships it. +appstreamcli = find_program('appstreamcli', required : false) +if appstreamcli.found() + test('appstream-metainfo', appstreamcli, + args : ['validate', '--no-net', '--pedantic', metainfo_xml]) +endif + +# hicolor icons (Icon=com.bringyour.network in the desktop file) +# Every size is a downscale of ONE 1024x1024 master, so they cannot drift the +# way separately-drawn assets do. Shipping only 48 and 256 meant the shell had +# to upscale for the 64px app grid and the 128/256 HiDPI lookups, which is the +# softness that showed up on a HiDPI desktop. +# +# 512 IS THE CEILING ON PURPOSE. flatpak refuses to export an icon larger than +# 512x512 -- "Image too large (1024x1024). Max. size 512x512" -- and fails the +# whole build at export time. The master is kept at +# packaging/icons/com.bringyour.network-master-1024.png for regenerating these +# and is deliberately not installed; nothing downstream asks for more than 512 +# (Flathub renders the store page at up to 512). +foreach size : ['48', '64', '128', '256', '512'] + install_data('packaging/icons/hicolor/' + size + 'x' + size + '/apps/com.bringyour.network.png', + install_dir : get_option('datadir') / 'icons' / 'hicolor' / + (size + 'x' + size) / 'apps') +endforeach # autostart INERT TEMPLATE: root-owned under /etc/urnetwork/autostart/, where # no desktop reads it; the GUI symlinks it into ~/.config/autostart atomically if host_integration -install_data('packaging/autostart/network.ur.urnetwork.desktop', +install_data('packaging/autostart/com.bringyour.network.desktop', install_dir : '/etc/urnetwork/autostart') endif diff --git a/app/packaging/autostart/network.ur.urnetwork.desktop b/app/packaging/autostart/com.bringyour.network.desktop similarity index 96% rename from app/packaging/autostart/network.ur.urnetwork.desktop rename to app/packaging/autostart/com.bringyour.network.desktop index ac7d01f..31b99cd 100644 --- a/app/packaging/autostart/network.ur.urnetwork.desktop +++ b/app/packaging/autostart/com.bringyour.network.desktop @@ -2,7 +2,7 @@ Type=Application Name=URnetwork Comment=URnetwork VPN -Icon=urnetwork +Icon=com.bringyour.network Exec=urnetwork # TryExec self-disables this entry once the daemon package (and with it the # launcher) is removed, so a stale symlink cannot error at every login. diff --git a/app/packaging/network.ur.urnetwork.desktop b/app/packaging/com.bringyour.network.desktop similarity index 93% rename from app/packaging/network.ur.urnetwork.desktop rename to app/packaging/com.bringyour.network.desktop index 63e8327..e592abc 100644 --- a/app/packaging/network.ur.urnetwork.desktop +++ b/app/packaging/com.bringyour.network.desktop @@ -2,7 +2,7 @@ Type=Application Name=URnetwork Comment=URnetwork VPN -Icon=urnetwork +Icon=com.bringyour.network # /usr/bin/urnetwork is the launcher script the daemon package installs; it # finds the user's AppImage (search order in MIGRATION.md) and execs it with # the same arguments. Keeping Exec= on a stable, package-managed path is what @@ -13,7 +13,7 @@ Terminal=false Categories=Network;Security; Keywords=VPN;URnetwork;proxy;privacy; StartupNotify=true -StartupWMClass=network.ur.urnetwork +StartupWMClass=com.bringyour.network # Register the urnetwork:// scheme so OAuth/SSO callbacks and wallet deep # links route back to the app. Shipped as a plain dpkg file so the # desktop-file-utils dpkg trigger refreshes mimeinfo.cache automatically diff --git a/app/packaging/com.bringyour.network.metainfo.xml.in b/app/packaging/com.bringyour.network.metainfo.xml.in new file mode 100644 index 0000000..fe1749b --- /dev/null +++ b/app/packaging/com.bringyour.network.metainfo.xml.in @@ -0,0 +1,125 @@ + + + + com.bringyour.network + + URnetwork + Private, decentralized VPN powered by a peer network + + CC0-1.0 + MPL-2.0 + + + URnetwork + + + +

+ URnetwork routes your traffic through a decentralized network of peers + instead of a single provider's servers. Choose a country or let the app + pick the best available provider, and connect. +

+

+ Provide bandwidth back to the network and earn payouts in USDC. Track + what you have provided, what you are owed, and where your network ranks. +

+

+ A kill switch blocks traffic if the tunnel drops, IPv6 is closed off + rather than leaked, and DNS is pinned to the tunnel so lookups cannot + escape it. +

+

+ Setup takes one extra step: URnetwork installs a small system service + that owns the network tunnel. The app detects your distribution and + shows you the exact command — a package for Debian, Ubuntu, Fedora and + other RPM distributions, or a portable installer that works anywhere + else, including immutable systems such as Silverblue and SteamOS. +

+
+ + com.bringyour.network.desktop + + + + + Connected, showing live per-host activity and transport health + https://raw.githubusercontent.com/urnetwork/linux/main/app/packaging/screenshots/connected.png + + + + https://ur.io + https://github.com/urnetwork/linux/issues + https://github.com/urnetwork/linux + https://ur.xyz + + + + #87fb67 + #101010 + + + + Network + Security + + + + VPN + privacy + proxy + decentralized + + + + pointing + keyboard + touch + + + + 480 + + + + + mild + + + + + + +

First public release of the URnetwork desktop client for Linux.

+
    +
  • Connect through the peer network, with provider selection and live status
  • +
  • Kill switch, IPv6 leak protection and DNS pinned to the tunnel
  • +
  • Provide bandwidth back to the network and track earnings
  • +
  • Authorization through polkit, so no group membership or re-login is needed
  • +
+
+
+
+
diff --git a/app/packaging/icons/com.bringyour.network-master-1024.png b/app/packaging/icons/com.bringyour.network-master-1024.png new file mode 100644 index 0000000..191d44b Binary files /dev/null and b/app/packaging/icons/com.bringyour.network-master-1024.png differ diff --git a/app/packaging/icons/hicolor/128x128/apps/com.bringyour.network.png b/app/packaging/icons/hicolor/128x128/apps/com.bringyour.network.png new file mode 100644 index 0000000..c92b2da Binary files /dev/null and b/app/packaging/icons/hicolor/128x128/apps/com.bringyour.network.png differ diff --git a/app/packaging/icons/hicolor/256x256/apps/com.bringyour.network.png b/app/packaging/icons/hicolor/256x256/apps/com.bringyour.network.png new file mode 100644 index 0000000..f051e1a Binary files /dev/null and b/app/packaging/icons/hicolor/256x256/apps/com.bringyour.network.png differ diff --git a/app/packaging/icons/hicolor/256x256/apps/urnetwork.png b/app/packaging/icons/hicolor/256x256/apps/urnetwork.png deleted file mode 100644 index b77ae31..0000000 Binary files a/app/packaging/icons/hicolor/256x256/apps/urnetwork.png and /dev/null differ diff --git a/app/packaging/icons/hicolor/48x48/apps/com.bringyour.network.png b/app/packaging/icons/hicolor/48x48/apps/com.bringyour.network.png new file mode 100644 index 0000000..1a1a532 Binary files /dev/null and b/app/packaging/icons/hicolor/48x48/apps/com.bringyour.network.png differ diff --git a/app/packaging/icons/hicolor/48x48/apps/urnetwork.png b/app/packaging/icons/hicolor/48x48/apps/urnetwork.png deleted file mode 100644 index 3299a1b..0000000 Binary files a/app/packaging/icons/hicolor/48x48/apps/urnetwork.png and /dev/null differ diff --git a/app/packaging/icons/hicolor/512x512/apps/com.bringyour.network.png b/app/packaging/icons/hicolor/512x512/apps/com.bringyour.network.png new file mode 100644 index 0000000..06646a3 Binary files /dev/null and b/app/packaging/icons/hicolor/512x512/apps/com.bringyour.network.png differ diff --git a/app/packaging/icons/hicolor/64x64/apps/com.bringyour.network.png b/app/packaging/icons/hicolor/64x64/apps/com.bringyour.network.png new file mode 100644 index 0000000..36fb54a Binary files /dev/null and b/app/packaging/icons/hicolor/64x64/apps/com.bringyour.network.png differ diff --git a/app/packaging/network.ur.urnetwork.metainfo.xml b/app/packaging/network.ur.urnetwork.metainfo.xml deleted file mode 100644 index 409e1e0..0000000 --- a/app/packaging/network.ur.urnetwork.metainfo.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - - network.ur.urnetwork - - URnetwork - Private, decentralized VPN powered by a peer network - - CC0-1.0 - MPL-2.0 - - - URnetwork - - - -

- URnetwork routes your traffic through a decentralized network of peers - instead of a single provider's servers. Choose a country or let the app - pick the best available provider, and connect. -

-

- Provide bandwidth back to the network and earn payouts in USDC. Track - what you have provided, what you are owed, and where your network ranks. -

-

- This Flatpak ships the graphical client only. Connecting requires the - URnetwork system service, which must be installed from your - distribution's native package: a sandboxed application cannot create a - tunnel device or enforce a kill switch. The app talks to that service - over a local socket and tells you plainly when it is missing or out of - date. -

-
- - network.ur.urnetwork.desktop - - https://ur.io - https://github.com/urnetwork/urnetwork-linux/issues - https://ur.xyz - - - Network - Security - - - - VPN - privacy - proxy - decentralized - - - - pointing - keyboard - touch - - - - 480 - - - - - - - -

First Linux release of the GTK4 client.

-
-
-
-
diff --git a/app/packaging/screenshots/connected.png b/app/packaging/screenshots/connected.png new file mode 100644 index 0000000..c4ec06f Binary files /dev/null and b/app/packaging/screenshots/connected.png differ diff --git a/app/snap/snapcraft.yaml b/app/snap/snapcraft.yaml index 43a049f..ced14b0 100644 --- a/app/snap/snapcraft.yaml +++ b/app/snap/snapcraft.yaml @@ -49,7 +49,7 @@ apps: urnetwork: command: usr/bin/urnetwork extensions: [gnome] # GTK4/libadwaita runtime, themes, portals, wayland/x11 - common-id: network.ur.urnetwork + common-id: com.bringyour.network desktop: usr/share/applications/urnetwork.desktop plugs: - network # outbound sockets (SDK platform + provider traffic) diff --git a/app/src/ControlProtocol.hpp b/app/src/ControlProtocol.hpp index 078d762..985f566 100644 --- a/app/src/ControlProtocol.hpp +++ b/app/src/ControlProtocol.hpp @@ -108,14 +108,14 @@ inline constexpr const char* kControlGroupName = "urnetwork"; // policy file absent -> byte-for-byte today's behaviour: 0660 // root:urnetwork and AuthorizeControlPeer. inline constexpr const char* kPolkitPolicyPath = - "/usr/share/polkit-1/actions/network.ur.urnetwork.policy"; + "/usr/share/polkit-1/actions/com.bringyour.network.policy"; // The immutable-host twin. ostree/bootc machines mount /usr read-only, so the // tarball installer maps its whole payload under /usr/local — and polkit has // read both directories since 124. ControlServer::PolicyPath() probes this one // FIRST; without it the daemon looks in the one place the file cannot be on // Bazzite/Silverblue/Kinoite/SteamOS and silently falls back to the group. inline constexpr const char* kPolkitPolicyPathLocal = - "/usr/local/share/polkit-1/actions/network.ur.urnetwork.policy"; + "/usr/local/share/polkit-1/actions/com.bringyour.network.policy"; // HelloReply::auth_mode — which authority this daemon actually latched at // start. The GUI needs it because the "add yourself to the urnetwork group, @@ -125,16 +125,16 @@ inline constexpr const char* kAuthModePolkit = "polkit"; inline constexpr const char* kAuthModeGroup = "group"; // The four polkit action ids, namespaced to the app id. Shipped in -// packaging/polkit/network.ur.urnetwork.policy (0644 root:root — polkit +// packaging/polkit/com.bringyour.network.policy (0644 root:root — polkit // ignores group- or world-writable action files). They are checked by // urnetworkd, never by the GUI: the subject is built from SO_PEERCRED on the // connection being served, so a client can neither nominate its own subject // nor skip the check by not asking. -inline constexpr const char* kActionControlTunnel = "network.ur.urnetwork.control-tunnel"; +inline constexpr const char* kActionControlTunnel = "com.bringyour.network.control-tunnel"; inline constexpr const char* kActionManageKillSwitch = - "network.ur.urnetwork.manage-kill-switch"; -inline constexpr const char* kActionTakeOverTunnel = "network.ur.urnetwork.take-over-tunnel"; -inline constexpr const char* kActionReadLog = "network.ur.urnetwork.read-log"; + "com.bringyour.network.manage-kill-switch"; +inline constexpr const char* kActionTakeOverTunnel = "com.bringyour.network.take-over-tunnel"; +inline constexpr const char* kActionReadLog = "com.bringyour.network.read-log"; // The SDK's built-in default device-RPC address (sdk/device_rpc.go:109, // deviceRpcDefaultAddress = "127.0.0.1:12025"). Kept as a NAMED CONSTANT ONLY, diff --git a/app/src/MainWindow.cpp b/app/src/MainWindow.cpp index 22e496e..9a424b6 100644 --- a/app/src/MainWindow.cpp +++ b/app/src/MainWindow.cpp @@ -517,7 +517,7 @@ void MainWindow::BuildChrome() { if (auto logo = BrandLogoTexture()) { icon->set(logo); } else { - icon->set_from_icon_name("urnetwork"); + icon->set_from_icon_name(kAppIconName); } icon->set_pixel_size(20); brand->append(*icon); diff --git a/app/src/SecretServiceRpcSessionStore.cpp b/app/src/SecretServiceRpcSessionStore.cpp index 325fe40..664286a 100644 --- a/app/src/SecretServiceRpcSessionStore.cpp +++ b/app/src/SecretServiceRpcSessionStore.cpp @@ -12,7 +12,13 @@ namespace { constexpr int kSecretPayloadVersion = 1; constexpr size_t kMaxSecretPayloadBytes = 256 * 1024; -constexpr const char* kApplicationAttribute = "network.ur.urnetwork"; +// The keyring attribute that scopes our secrets. Renamed with the app ID, so +// an entry written by an older build is not found by this one and the app +// falls back to a fresh RPC session — the same one-time cost as the Flatpak +// data path moving. Deliberately NOT dual-read: keeping the old attribute +// alive would leave the previous app identity holding live key material in the +// user's keyring with nothing left to clean it up. +constexpr const char* kApplicationAttribute = "com.bringyour.network"; const SecretSchema kRpcSessionSchema = [] { // Zero-initialize libsecret's reserved ABI fields explicitly. A short C diff --git a/app/src/UrTheme.cpp b/app/src/UrTheme.cpp index db6d024..44573d0 100644 --- a/app/src/UrTheme.cpp +++ b/app/src/UrTheme.cpp @@ -369,7 +369,8 @@ Glib::RefPtr BrandLogoTexture() { const std::string dir = BrandIconDir(); if (dir.empty()) return cached; for (const char* size : {"256x256", "48x48"}) { - const std::string path = dir + "/hicolor/" + size + "/apps/urnetwork.png"; + const std::string path = + dir + "/hicolor/" + size + "/apps/" + kAppIconName + ".png"; if (!g_file_test(path.c_str(), G_FILE_TEST_IS_REGULAR)) continue; try { cached = Gdk::Texture::create_from_filename(path); @@ -378,7 +379,7 @@ Glib::RefPtr BrandLogoTexture() { g_warning("brand logo: %s failed to load: %s", path.c_str(), e.what()); } } - g_warning("brand logo: no urnetwork.png under %s", dir.c_str()); + g_warning("brand logo: no %s.png under %s", kAppIconName, dir.c_str()); return cached; } diff --git a/app/src/UrTheme.hpp b/app/src/UrTheme.hpp index 7341792..de5e00f 100644 --- a/app/src/UrTheme.hpp +++ b/app/src/UrTheme.hpp @@ -34,10 +34,20 @@ void LoadBrandFonts(); // Install the brand CSS provider once per display. Safe to call repeatedly. void EnsureBrandCss(); +// The app icon's basename AND its icon-theme name: the packaging installs +// /icons/hicolor//apps/.png, and the .desktop's +// Icon= key names the same string. It lives here as ONE constant because it was +// previously spelled as a literal in two places -- the by-path load in +// UrTheme.cpp and the by-name fallback in MainWindow.cpp -- and the rename to +// the reverse-DNS app id caught only the packaging, so both lookups missed and +// the title-bar logo went blank with no error. Flatpak additionally REQUIRES +// this to equal the app id, or it exports no icon at all. +inline constexpr const char* kAppIconName = "com.bringyour.network"; + // Register the app's hicolor icon directory with the default icon theme so -// the icon NAME "urnetwork" resolves (window icon, tray, .desktop matching) +// the icon NAME "com.bringyour.network" resolves (window icon, tray, .desktop matching) // even when the app runs from a build tree or a relocated AppImage. Without -// this, set_from_icon_name("urnetwork") silently renders a BLANK image — +// this, set_from_icon_name("com.bringyour.network") silently renders a BLANK image — // which is exactly how the title-bar logo came out empty. Idempotent. void RegisterBrandIcons(); diff --git a/app/src/main.cpp b/app/src/main.cpp index 6eb543f..dc33838 100644 --- a/app/src/main.cpp +++ b/app/src/main.cpp @@ -78,7 +78,7 @@ int main(int argc, char** argv) { // the window with the app (and the hide-to-tray window keeps its identity). // HANDLES_OPEN: the single instance receives urnetwork:// deep links (wallet // callbacks) via signal_open — the .desktop registers x-scheme-handler/urnetwork. - auto app = Gtk::Application::create("network.ur.urnetwork", + auto app = Gtk::Application::create("com.bringyour.network", Gio::Application::Flags::HANDLES_OPEN); // Hold the application so it survives with only the tray (window hidden). @@ -98,7 +98,7 @@ int main(int argc, char** argv) { // missing face fails silently to the fallback font (windows parity). urnw::LoadBrandFonts(); urnw::EnsureBrandCss(); - // the icon NAME "urnetwork" must resolve for the window icon and the + // the icon NAME kAppIconName must resolve for the window icon and the // tray, wherever the app runs from urnw::RegisterBrandIcons(); diff --git a/docs/TESTING-CACHYOS.md b/docs/TESTING-CACHYOS.md index 3cc0da3..f3a9705 100644 --- a/docs/TESTING-CACHYOS.md +++ b/docs/TESTING-CACHYOS.md @@ -1094,7 +1094,7 @@ cd urnetwork-linux ### 10.2 Run it ```bash -flatpak run network.ur.urnetwork +flatpak run com.bringyour.network ``` ### 10.3 What is different from the AppImage — and what to test because of it @@ -1121,7 +1121,7 @@ inode, and every `connect()` fails with `EACCES` — which historically got repo as a group-membership problem. The app now detects this and says so instead. To test it: ```bash -flatpak run network.ur.urnetwork & # leave it running +flatpak run com.bringyour.network & # leave it running sudo systemctl restart urnetworkd # now press Connect in the Flatpak GUI ``` @@ -1187,7 +1187,7 @@ Plus, separately: * **The full `--selftest-egress` output and its exit code** (§5.2). Always. * **The app's own log** — the `connect:` lines. From a terminal launch that is `gui.log` from §7.1; otherwise `journalctl --user -b | grep -E 'urnetwork|connect:'`, or for the Flatpak, - `flatpak run network.ur.urnetwork 2>&1 | tee flatpak-gui.log`. + `flatpak run com.bringyour.network 2>&1 | tee flatpak-gui.log`. * **The installer's full output** (§4 dry-run and §6 real run). **Use `stat -c %C`, never `ls -Z`.** On a machine with no SELinux, `ls -Z` prints `?` and @@ -1208,7 +1208,7 @@ tunnel addresses (`169.254.x.x`) are fine and are useful to us. sudo systemctl stop urnetworkd sudo /usr/lib/urnetwork/uninstall.sh # add --purge to also remove state + group rm -f ~/.local/lib/urnetwork/URnetwork.AppImage -flatpak uninstall --user network.ur.urnetwork +flatpak uninstall --user com.bringyour.network ``` Then confirm the machine is back to normal: diff --git a/docs/linux_agent_help.md b/docs/linux_agent_help.md index 5606c9d..4508e4a 100644 --- a/docs/linux_agent_help.md +++ b/docs/linux_agent_help.md @@ -1803,7 +1803,7 @@ single-process model existed only under Snap and is dead). ~17.8k lines of C++ a `urnetwork_sdk.hpp` wrapper as Windows. Holds `urnet::DeviceRemote` + a control-socket client. Ships as a **user AppImage in a user-writable path** with a `/usr/bin/urnetwork` launcher-script indirection; never installed by a package (meson `install_rpath - '$ORIGIN/../lib'`). App id `network.ur.urnetwork`; GApplication HANDLES_OPEN deep links; + '$ORIGIN/../lib'`). App id `com.bringyour.network`; GApplication HANDLES_OPEN deep links; hide-to-tray; forces `ADW_COLOR_SCHEME_FORCE_DARK`; runtime-resolved `bindtextdomain`. - **`urnetworkd`** — root daemon, **no GTK of any kind** (glib GMainLoop + gio + json + SDK; `-static-libstdc++ -static-libgcc`). Holds `DeviceLocal(enable_rpc=true)`, opens @@ -1898,8 +1898,8 @@ replacing it, keeping its version/SDK-match enforcement. `urnetworkd.service` (Type=notify, After/Wants `network-pre.target`, `RuntimeDirectory=urnetwork` 0750, `StateDirectory`/`LogsDirectory` 0700, `NoNewPrivileges`, `ProtectHome`, `Restart=on-failure`/`RestartSec=2`), - `network.ur.urnetwork.desktop` (`Exec=urnetwork %u`, - `MimeType=x-scheme-handler/urnetwork;`, `StartupWMClass=network.ur.urnetwork`), + `com.bringyour.network.desktop` (`Exec=urnetwork %u`, + `MimeType=x-scheme-handler/urnetwork;`, `StartupWMClass=com.bringyour.network`), `urnetwork-launcher` (installed `/usr/bin/urnetwork`; search order `$URNETWORK_APPIMAGE` → `~/.local/lib/urnetwork/URnetwork.AppImage` → `~/Applications/URnetwork*.AppImage` newest → `/usr/lib/urnetwork/URnetwork.AppImage` → `urnetwork-gui` on PATH; exit 127 with install @@ -1947,7 +1947,7 @@ Files that ARE snap support (delete): - `linux:app/snap/snapcraft.yaml` — the whole file (114 lines). Already carries a SUPERSEDED banner ("NOT BUILT, NOT SHIPPED... describes the SINGLE-PROCESS architecture... Do not resurrect as-is"); it is also **broken** — it organizes `packaging/urnetwork.desktop`, - which was renamed to `network.ur.urnetwork.desktop`, and its `version: "0.0.0"` sed + which was renamed to `com.bringyour.network.desktop`, and its `version: "0.0.0"` sed stamping mechanism is gone. It was retained only because "Snap Store as secondary channel" was left open (`APPIMAGE.md` §8 item 5); that door is now closed. - `linux:app/.gitignore` lines 8–11: `*.snap`, `parts/`, `prime/`, `stage/`. @@ -2139,7 +2139,7 @@ EOL ~yearly — plan an annual runtime bump. - polkit: actions as XML `.policy` in `/usr/share/polkit-1/actions/`; the daemon checks each privileged request via `CheckAuthorization` (CLI form `pkcheck`), passing request variables so admins can write rules. Proposed action split (tiering idiom is standard; names are our - proposal): `network.ur.urnetwork.connect`/`.disconnect` → `allow_active=yes`; + proposal): `com.bringyour.network.connect`/`.disconnect` → `allow_active=yes`; `.install-daemon`, `.set-killswitch`, `.clear-blocking` → `auth_admin_keep`. Simpler alternative used by Mullvad/Tailscale: socket file mode + group membership (already the linux: model — group `urnetwork`); reasonable default, with polkit/pkexec reserved for the diff --git a/packaging/deb/nfpm.yaml b/packaging/deb/nfpm.yaml index f2d8605..4877706 100644 --- a/packaging/deb/nfpm.yaml +++ b/packaging/deb/nfpm.yaml @@ -97,7 +97,7 @@ contents: # APPIMAGE.md 11d). # # The polkit action file rides inside this same /usr tree, at - # usr/share/polkit-1/actions/network.ur.urnetwork.policy, put there by + # usr/share/polkit-1/actions/com.bringyour.network.policy, put there by # linux/packaging/lib/common.sh (assemble_daemon_root), which also asserts # its 0644 mode before the package is built. It is deliberately NOT given a # second explicit contents entry: nfpm would then emit the path twice, and @@ -112,8 +112,8 @@ contents: dst: /lib type: tree # Admin-editable integration files: conffiles, preserved on upgrade. - - src: "${PKGROOT}/etc/urnetwork/autostart/network.ur.urnetwork.desktop" - dst: /etc/urnetwork/autostart/network.ur.urnetwork.desktop + - src: "${PKGROOT}/etc/urnetwork/autostart/com.bringyour.network.desktop" + dst: /etc/urnetwork/autostart/com.bringyour.network.desktop type: config - src: "${PKGROOT}/etc/NetworkManager/conf.d/95-urnetwork.conf" dst: /etc/NetworkManager/conf.d/95-urnetwork.conf diff --git a/packaging/deb/scripts/postinst b/packaging/deb/scripts/postinst index ff6ebae..cc2e41b 100644 --- a/packaging/deb/scripts/postinst +++ b/packaging/deb/scripts/postinst @@ -57,7 +57,7 @@ case "$1" in # Which authority this machine will run under, said out loud. # # DETECTED BY LOOKING FOR POLKIT, NOT FOR OUR OWN ACTION FILE: dpkg has - # already unpacked /usr/share/polkit-1/actions/network.ur.urnetwork + # already unpacked /usr/share/polkit-1/actions/com.bringyour.network # .policy by the time this runs (and created that directory on the way), # so testing the file or the directory would report "polkit" on a box # that has never had it. polkitd is a Recommends, so apt pulls it in by @@ -88,7 +88,7 @@ case "$1" in # from the package tree; assert it rather than assume it, and check the # directory too (polkit does not police the directory, and whoever can # write it can drop in a file that redefines our defaults). - UR_POLICY=/usr/share/polkit-1/actions/network.ur.urnetwork.policy + UR_POLICY=/usr/share/polkit-1/actions/com.bringyour.network.policy if [ -f "${UR_POLICY}" ]; then chmod 0644 "${UR_POLICY}" 2>/dev/null || true chown root:root "${UR_POLICY}" 2>/dev/null || true diff --git a/packaging/distro-smoke.sh b/packaging/distro-smoke.sh index fdd923c..b8a064b 100755 --- a/packaging/distro-smoke.sh +++ b/packaging/distro-smoke.sh @@ -347,7 +347,7 @@ if have flatpak; then FP_REMOTES="${FP_REMOTES%% }" check 2.2 ok "flatpak" "present; remotes: ${FP_REMOTES:-}" note "No .flatpak bundle is published in the release yet either -- the manifest" - note "at packaging/flatpak/network.ur.urnetwork.yml builds one locally." + note "at packaging/flatpak/com.bringyour.network.yml builds one locally." else check 2.2 n/a "flatpak" "not installed (only matters for the GUI, never the daemon)" fi @@ -922,8 +922,8 @@ fi GUI_FOUND='' [ -x /usr/bin/urnetwork ] && GUI_FOUND="/usr/bin/urnetwork" [ -x /usr/local/bin/urnetwork ] && GUI_FOUND="${GUI_FOUND} /usr/local/bin/urnetwork" -if have flatpak && flatpak list --app --columns=application 2>/dev/null | grep -qx 'network.ur.urnetwork'; then - GUI_FOUND="${GUI_FOUND} flatpak:network.ur.urnetwork" +if have flatpak && flatpak list --app --columns=application 2>/dev/null | grep -qx 'com.bringyour.network'; then + GUI_FOUND="${GUI_FOUND} flatpak:com.bringyour.network" fi if [ -n "${GUI_FOUND}" ]; then check 9.6 ok "GUI" "${GUI_FOUND# }" diff --git a/packaging/flatpak/network.ur.urnetwork.yml b/packaging/flatpak/com.bringyour.network.yml similarity index 97% rename from packaging/flatpak/network.ur.urnetwork.yml rename to packaging/flatpak/com.bringyour.network.yml index 7bc1238..7be0e0a 100644 --- a/packaging/flatpak/network.ur.urnetwork.yml +++ b/packaging/flatpak/com.bringyour.network.yml @@ -23,8 +23,8 @@ # LOCAL INSTALL (the current target — Flathub submission comes later): # flatpak install -y flathub org.gnome.Platform//49 org.gnome.Sdk//49 # flatpak run org.flatpak.Builder --force-clean --user --install \ -# build-flatpak packaging/flatpak/network.ur.urnetwork.yml -# flatpak run network.ur.urnetwork +# build-flatpak packaging/flatpak/com.bringyour.network.yml +# flatpak run com.bringyour.network # # FOR FLATHUB, two changes are required and are deliberately NOT made here: # 1. `sources: [{type: dir, path: ../..}]` must become a git/archive source @@ -34,7 +34,7 @@ # redistribution; that audit (§7.17) must land before submission. # # SPDX-License-Identifier: MPL-2.0 -id: network.ur.urnetwork +id: com.bringyour.network runtime: org.gnome.Platform runtime-version: '49' sdk: org.gnome.Sdk @@ -192,9 +192,9 @@ modules: # no AppImage here and no /usr/bin to put a launcher in, so the Flatpak # runs the GUI binary directly. - desktop-file-edit --set-key=Exec --set-value="urnetwork-gui %u" - /app/share/applications/network.ur.urnetwork.desktop + /app/share/applications/com.bringyour.network.desktop - desktop-file-edit --remove-key=TryExec - /app/share/applications/network.ur.urnetwork.desktop + /app/share/applications/com.bringyour.network.desktop sources: # LOCAL SOURCE — replace with a git/archive source before any Flathub # submission (see the header). The path is relative to this manifest. diff --git a/packaging/lib/common.sh b/packaging/lib/common.sh index 2f58e19..ab2fc97 100644 --- a/packaging/lib/common.sh +++ b/packaging/lib/common.sh @@ -124,11 +124,14 @@ assemble_daemon_root() { # --- static integration files: canonical sources in app/packaging ------- local src="${APP_PACKAGING_DIR}" local f - for f in urnetwork-launcher urnetworkd.service network.ur.urnetwork.desktop \ - autostart/network.ur.urnetwork.desktop 95-urnetwork.conf \ + for f in urnetwork-launcher urnetworkd.service com.bringyour.network.desktop \ + autostart/com.bringyour.network.desktop 95-urnetwork.conf \ 85-urnetwork-unmanaged.rules \ - icons/hicolor/48x48/apps/urnetwork.png \ - icons/hicolor/256x256/apps/urnetwork.png; do + icons/hicolor/48x48/apps/com.bringyour.network.png \ + icons/hicolor/64x64/apps/com.bringyour.network.png \ + icons/hicolor/128x128/apps/com.bringyour.network.png \ + icons/hicolor/256x256/apps/com.bringyour.network.png \ + icons/hicolor/512x512/apps/com.bringyour.network.png; do [ -f "${src}/${f}" ] || die "packaging source missing: ${src}/${f}" done @@ -140,17 +143,22 @@ assemble_daemon_root() { cp "${src}/urnetworkd.service" "${root}/lib/systemd/system/urnetworkd.service" install -d "${root}/usr/share/applications" - cp "${src}/network.ur.urnetwork.desktop" "${root}/usr/share/applications/" - - install -d "${root}/usr/share/icons/hicolor/48x48/apps" \ - "${root}/usr/share/icons/hicolor/256x256/apps" - cp "${src}/icons/hicolor/48x48/apps/urnetwork.png" \ - "${root}/usr/share/icons/hicolor/48x48/apps/urnetwork.png" - cp "${src}/icons/hicolor/256x256/apps/urnetwork.png" \ - "${root}/usr/share/icons/hicolor/256x256/apps/urnetwork.png" + cp "${src}/com.bringyour.network.desktop" "${root}/usr/share/applications/" + + # All five installed sizes, not just 48 and 256. Shipping only those two is + # why the shell had to upscale 48 -> 64 and 256 -> 512 for the app grid and + # the window titlebar, which is exactly the softness that showed up on a + # HiDPI desktop. app/meson.build installs the same five for the Flatpak; + # keep the two lists in step. + local icon_size + for icon_size in 48 64 128 256 512; do + install -d "${root}/usr/share/icons/hicolor/${icon_size}x${icon_size}/apps" + cp "${src}/icons/hicolor/${icon_size}x${icon_size}/apps/com.bringyour.network.png" \ + "${root}/usr/share/icons/hicolor/${icon_size}x${icon_size}/apps/com.bringyour.network.png" + done install -d "${root}/etc/urnetwork/autostart" - cp "${src}/autostart/network.ur.urnetwork.desktop" "${root}/etc/urnetwork/autostart/" + cp "${src}/autostart/com.bringyour.network.desktop" "${root}/etc/urnetwork/autostart/" install -d "${root}/etc/NetworkManager/conf.d" cp "${src}/95-urnetwork.conf" "${root}/etc/NetworkManager/conf.d/" @@ -174,11 +182,11 @@ assemble_daemon_root() { # world-writable .policy file, so a wrong mode here does not fail loudly, # it silently drops every action back to its built-in default. The mode # normalization below sets it; the assertion after it proves it. - [ -f "${PACKAGING_DIR}/polkit/network.ur.urnetwork.policy" ] || \ - die "packaging source missing: ${PACKAGING_DIR}/polkit/network.ur.urnetwork.policy" + [ -f "${PACKAGING_DIR}/polkit/com.bringyour.network.policy" ] || \ + die "packaging source missing: ${PACKAGING_DIR}/polkit/com.bringyour.network.policy" install -d "${root}/usr/share/polkit-1/actions" - cp "${PACKAGING_DIR}/polkit/network.ur.urnetwork.policy" \ - "${root}/usr/share/polkit-1/actions/network.ur.urnetwork.policy" + cp "${PACKAGING_DIR}/polkit/com.bringyour.network.policy" \ + "${root}/usr/share/polkit-1/actions/com.bringyour.network.policy" # Normalize modes: directories 0755; everything except the two # executables 0644 (shared libraries ship 0644 on Debian). @@ -191,7 +199,7 @@ assemble_daemon_root() { # and skips the file), and the visible symptom would be "every Connect asks # for an admin password" long after the build. local policy_mode - policy_mode="$(_file_mode_octal "${root}/usr/share/polkit-1/actions/network.ur.urnetwork.policy")" + policy_mode="$(_file_mode_octal "${root}/usr/share/polkit-1/actions/com.bringyour.network.policy")" [ "${policy_mode}" = '644' ] || \ die "polkit action file is mode ${policy_mode}, must be 644 (polkit ignores a group- or world-writable .policy)" } diff --git a/packaging/make-appimage.sh b/packaging/make-appimage.sh index a283e0d..e064097 100755 --- a/packaging/make-appimage.sh +++ b/packaging/make-appimage.sh @@ -188,22 +188,22 @@ done < <(find "${STAGING}/usr/share/locale" -type f -name 'urnetwork.mo' 2>/dev/ # Desktop entry: same app-id filename as the system one (wayland app_id -> # icon association), but Exec points at the bundled binary -- inside the # AppDir the launcher script does not exist. AppRun is what actually runs. -DESKTOP_SRC="${APP_PACKAGING_DIR}/network.ur.urnetwork.desktop" +DESKTOP_SRC="${APP_PACKAGING_DIR}/com.bringyour.network.desktop" [ -f "${DESKTOP_SRC}" ] || die "missing ${DESKTOP_SRC}" install -d "${APPDIR}/usr/share/applications" sed -e 's/^Exec=urnetwork /Exec=urnetwork-gui /' \ -e 's/^TryExec=urnetwork$/TryExec=urnetwork-gui/' \ - "${DESKTOP_SRC}" > "${APPDIR}/usr/share/applications/network.ur.urnetwork.desktop" -printf 'X-AppImage-Version=%s\n' "${VERSION}" >> "${APPDIR}/usr/share/applications/network.ur.urnetwork.desktop" -cp "${APPDIR}/usr/share/applications/network.ur.urnetwork.desktop" "${APPDIR}/network.ur.urnetwork.desktop" + "${DESKTOP_SRC}" > "${APPDIR}/usr/share/applications/com.bringyour.network.desktop" +printf 'X-AppImage-Version=%s\n' "${VERSION}" >> "${APPDIR}/usr/share/applications/com.bringyour.network.desktop" +cp "${APPDIR}/usr/share/applications/com.bringyour.network.desktop" "${APPDIR}/com.bringyour.network.desktop" install -d "${APPDIR}/usr/share/icons/hicolor/256x256/apps" "${APPDIR}/usr/share/icons/hicolor/48x48/apps" -install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/urnetwork.png" \ - "${APPDIR}/usr/share/icons/hicolor/256x256/apps/urnetwork.png" -install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/48x48/apps/urnetwork.png" \ - "${APPDIR}/usr/share/icons/hicolor/48x48/apps/urnetwork.png" -install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/urnetwork.png" "${APPDIR}/urnetwork.png" -cp "${APPDIR}/urnetwork.png" "${APPDIR}/.DirIcon" +install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/com.bringyour.network.png" \ + "${APPDIR}/usr/share/icons/hicolor/256x256/apps/com.bringyour.network.png" +install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/48x48/apps/com.bringyour.network.png" \ + "${APPDIR}/usr/share/icons/hicolor/48x48/apps/com.bringyour.network.png" +install -m 0644 "${APP_PACKAGING_DIR}/icons/hicolor/256x256/apps/com.bringyour.network.png" "${APPDIR}/com.bringyour.network.png" +cp "${APPDIR}/com.bringyour.network.png" "${APPDIR}/.DirIcon" install -m 0755 "${SCRIPT_DIR}/appimage/AppRun" "${APPDIR}/AppRun" diff --git a/packaging/make-flatpak.sh b/packaging/make-flatpak.sh index c92da22..722431a 100755 --- a/packaging/make-flatpak.sh +++ b/packaging/make-flatpak.sh @@ -5,7 +5,7 @@ # /dev/net/tun, no CAP_NET_ADMIN and no way to install a system unit. The app # reaches the HOST's urnetworkd over /run/urnetwork/control.sock, which the # manifest exposes read-only (Trayscale's pattern). Install the daemon from the -# native .deb/.rpm — see packaging/flatpak/network.ur.urnetwork.yml for the +# native .deb/.rpm — see packaging/flatpak/com.bringyour.network.yml for the # full reasoning. # # Works on an immutable host (Bazzite/Silverblue): flatpak-builder itself runs @@ -20,8 +20,8 @@ set -euo pipefail REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" -MANIFEST="${MANIFEST:-$REPO_ROOT/packaging/flatpak/network.ur.urnetwork.yml}" -APP_ID="network.ur.urnetwork" +MANIFEST="${MANIFEST:-$REPO_ROOT/packaging/flatpak/com.bringyour.network.yml}" +APP_ID="com.bringyour.network" RUNTIME_VERSION="${RUNTIME_VERSION:-49}" # The build dir MUST live inside the repo. flatpak-builder runs sandboxed and # gets a PRIVATE /tmp, so a build dir under the host's /tmp vanishes between diff --git a/packaging/polkit/network.ur.urnetwork.policy b/packaging/polkit/com.bringyour.network.policy similarity index 95% rename from packaging/polkit/network.ur.urnetwork.policy rename to packaging/polkit/com.bringyour.network.policy index b33e2ba..d6c0c5f 100644 --- a/packaging/polkit/network.ur.urnetwork.policy +++ b/packaging/polkit/com.bringyour.network.policy @@ -2,7 +2,7 @@ - + Connect or disconnect the URnetwork VPN Authentication is required to route this device's traffic through URnetwork. @@ -81,7 +81,7 @@ a site can require a password for THIS and not for Connect. The kill switch can cut every user on the box off the network, which is why it is worth its own knob. --> - + Change the URnetwork kill switch Authentication is required to change whether this device's traffic is blocked when the URnetwork connection drops. @@ -95,7 +95,7 @@ DIFFERENT uid started. This is the action that replaces "everyone in the urnetwork group is interchangeable": any active local user may run their own tunnel, nobody takes over someone else's without proving admin. --> - + Take over a URnetwork connection started by another user Authentication is required to take over the URnetwork connection another user started on this device. @@ -111,7 +111,7 @@ own. Same default trust as control-tunnel (if you can silently start a tunnel you can read its log), separate id so it can be tightened alone. The daemon ALSO refuses it across uids: see kCodeAuthNotTunnelOwner. --> - + Read the URnetwork service log Authentication is required to read the URnetwork service log. diff --git a/packaging/rpm/nfpm.yaml b/packaging/rpm/nfpm.yaml index 1e43b3b..4ba2282 100644 --- a/packaging/rpm/nfpm.yaml +++ b/packaging/rpm/nfpm.yaml @@ -153,8 +153,8 @@ contents: # Admin-editable integration files. %config(noreplace) is the rpm equivalent # of a dpkg conffile: an edited file is preserved and the package's version # lands beside it as .rpmnew. - - src: "${PKGROOT}/etc/urnetwork/autostart/network.ur.urnetwork.desktop" - dst: /etc/urnetwork/autostart/network.ur.urnetwork.desktop + - src: "${PKGROOT}/etc/urnetwork/autostart/com.bringyour.network.desktop" + dst: /etc/urnetwork/autostart/com.bringyour.network.desktop type: "config|noreplace" - src: "${PKGROOT}/etc/NetworkManager/conf.d/95-urnetwork.conf" dst: /etc/NetworkManager/conf.d/95-urnetwork.conf diff --git a/packaging/tarball/install.sh b/packaging/tarball/install.sh index 8b7ec98..2164aa6 100755 --- a/packaging/tarball/install.sh +++ b/packaging/tarball/install.sh @@ -162,7 +162,7 @@ DNS_WARNING='' # legacy `urnetwork` group check stays in force. POLKIT_PRESENT=0 POLKIT_VERSION='' -POLICY_REL='/usr/share/polkit-1/actions/network.ur.urnetwork.policy' +POLICY_REL='/usr/share/polkit-1/actions/com.bringyour.network.policy' log() { printf '%s\n' "$*"; } note() { printf -- '- %s\n' "$*"; } @@ -1339,7 +1339,7 @@ if [ "${POLKIT_PRESENT}" = 1 ]; then # # MEASURED on Bazzite: after a clean install the daemon correctly # reported `authorization: polkit`, and `pkaction --action-id - # network.ur.urnetwork.control-tunnel` answered "No action with action + # com.bringyour.network.control-tunnel` answered "No action with action # id" -- polkitd had been up since the previous boot, two days earlier. # Every authorization check would have been made against an action # polkit did not know, so Connect would have failed on a host the diff --git a/packaging/tarball/uninstall.sh b/packaging/tarball/uninstall.sh index 34a32f6..84a8725 100755 --- a/packaging/tarball/uninstall.sh +++ b/packaging/tarball/uninstall.sh @@ -152,12 +152,15 @@ ${BIN_DIR}/urnetwork /lib/systemd/system/urnetworkd.service /usr/lib/systemd/system/urnetworkd.service /etc/systemd/system/urnetworkd.service -${SHARE_DIR}/applications/network.ur.urnetwork.desktop -${SHARE_DIR}/metainfo/network.ur.urnetwork.metainfo.xml -${SHARE_DIR}/icons/hicolor/48x48/apps/urnetwork.png -${SHARE_DIR}/icons/hicolor/256x256/apps/urnetwork.png -${SHARE_DIR}/polkit-1/actions/network.ur.urnetwork.policy -/etc/urnetwork/autostart/network.ur.urnetwork.desktop +${SHARE_DIR}/applications/com.bringyour.network.desktop +${SHARE_DIR}/metainfo/com.bringyour.network.metainfo.xml +${SHARE_DIR}/icons/hicolor/48x48/apps/com.bringyour.network.png +${SHARE_DIR}/icons/hicolor/64x64/apps/com.bringyour.network.png +${SHARE_DIR}/icons/hicolor/128x128/apps/com.bringyour.network.png +${SHARE_DIR}/icons/hicolor/256x256/apps/com.bringyour.network.png +${SHARE_DIR}/icons/hicolor/512x512/apps/com.bringyour.network.png +${SHARE_DIR}/polkit-1/actions/com.bringyour.network.policy +/etc/urnetwork/autostart/com.bringyour.network.desktop /etc/NetworkManager/conf.d/95-urnetwork.conf /etc/udev/rules.d/85-urnetwork-unmanaged.rules" # plus whole directories swept below: ${SHARE_DIR}/urnetwork, locale .mo