Commit Graph

7325 Commits

Author SHA1 Message Date
Jamil
f2d88f49a0 feat(android): Managed configuration (#9227)
Adds managed configuration support for Android in line with other
platforms.

Related: #4505 
Related: #9203 
Related: #9196
2025-05-26 23:37:02 +00:00
Thomas Eizinger
d25e378b5e ci: automatically upload published clients to winget (#9213)
This utilizes the https://github.com/vedantmgoyal9/winget-releaser
action to automatically submit a PR to the winget repository every time
we publish a new version of the GUI / Headless Client.

The bot uses the initial manifest added in
https://github.com/microsoft/winget-pkgs/pull/259366 and updates the
installer link and hash.

Resolves: #4729
2025-05-26 22:52:10 +00:00
Thomas Eizinger
4c04c69ec0 ci: remove lychee cache (#9234)
Hoping to fix the repeated errors from the link checker with this.
2025-05-26 20:55:59 +00:00
Jamil
3659b07259 fix(portal): Fix capitalization for All Identity Providers (#9241) 2025-05-26 17:30:01 +00:00
Jamil
b7ec92e3aa chore(ci): Bump apple clients to 1.5.0 (#9239) 2025-05-26 08:20:05 -07:00
Jamil
591a245471 chore(docs): Remove defaults from macOS profile manifest (#9233)
Having defaults in here is confusing, because they are actually all
unset by default which means the user settings won't be overridden.

This is the final version submitted at
https://github.com/profilemanifests/profilemanifests
2025-05-26 14:48:11 +00:00
Jamil
b5c18db5e8 chore(ci): Bump next clients version to 1.5.0 (#9229)
We've decided we'll be bumping the minor with shipping managed
configurations support.
2025-05-26 04:24:35 +00:00
Jamil
ec682d5871 fix(apple): Don't throw when quitting with a stopped tunnel (#9231)
If the tunnel is already down when we try to quit the application, we
were throwing a harmless error because we mistakenly required a
connected status to send the `stopTunnel` command, which is just a no-op
if we're already connected.
2025-05-26 04:19:12 +00:00
Jamil
842fe8718d chore(apple): Remove managed enforcement of full-tunnel (#9230)
After discussing with @thomaseizinger, we realized this is better
supported with Polices.
2025-05-26 03:47:17 +00:00
Jamil
9a29d9c2fa chore(deps/android): Enable desugaring (#9222)
The `com.google.android.gms:play-services-tasks` 2.3.0 update requires
desugaring to be enabled on the project, so this PR adds that.

Supersedes: #8830
2025-05-25 09:01:08 -07:00
Jamil
2325f5532e fix(ci): Fetch latest PR title for pr-lint (#9225)
When opening a PR with a lengthy title, the `pr-lint` check will fail.
Fixing the title and re-running the check didn't fix it because it was
always referencing the original title that triggered the run.

To fix it, we need to fetch the title fresh on each run of the workflow.
2025-05-25 09:00:39 -07:00
Jamil
5112e48f15 docs: Use clearer descriptions for macOS profile manifest (#9219)
Setting some of these like `internetResourceEnabled` may have unintended
consequences, so the descriptions are updated to reflect this.

Related:
https://github.com/firezone/firezone/pull/9203#discussion_r2105477015
2025-05-24 22:13:44 +00:00
Jamil
068f7dfc8e chore(deps): Bump codespell to 2.4.1 and fix found issues (#9221)
The dictionary was updated in and codespell found a few minor issues to
fix.

Supersedes #8990
2025-05-24 22:02:06 +00:00
Jamil
5cb6d278d1 chore(deps): Bump next-hubspot to 2.0.0 (#9220)
This dependency had some breaking changes for 2.0.0 which required
updated some variable names from imports.

Supersedes #8991
2025-05-24 22:01:34 +00:00
Jamil
2afd5c5d7a fix(infra): Bump healthcheck again to fit within limits (#9218)
> Error 400: Invalid value for field 'resource.unhealthyThreshold':
'12'. Must be less than or equal to 10,
2025-05-24 07:31:26 -07:00
Jamil
a7054b8f40 ci: Bump apple to 1.4.15 (#9217) 2025-05-24 12:51:27 +00:00
Jamil
10a6dca92f chore(infra): Bump envs to optimize healthcheck (#9216)
Related: https://github.com/firezone/environments/pull/28
2025-05-24 12:51:02 +00:00
Jamil
d18c40ef7d feat(infra): Use Postgres 17 for dev and test (#9215)
Upgrades dev and test envs to use Postgres 17.

Related: #5442
2025-05-23 21:43:47 +00:00
Andrew Dryga
18cb7c147b chore(portal): Upgrade Postgres to 17 (#5442)
### Pre-upgrade TODO

- [ ] Update firezone.statuspage.io with planned maintenance status

### Performing the upgrade

- [ ] Upgrade in place using the GCP UI
- [ ] Run `ANALYZE;`
- [ ] Run `REINDEX DATABASE firezone;`
- [ ] When complete, deploy production via Terraform with new version
selected

### Post-upgrade TODO

- [ ] Test application connectivity
- [ ] Monitor Cloud SQL logs for any issues
- [ ] Unmark the planned maintenance window in firezone.statuspage.io

Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com>
2025-05-23 14:02:38 -07:00
Thomas Eizinger
67d11b1e01 fix(gui-client): don't reset favourites when settings change (#9211)
The GUI client currently has a bug that resets the favourites and the
status of the Internet Resource every time the advanced settings are
saved. This happens because those fields are annotated with
`#[serde(default)]` and are thus initialised to their default value when
the struct is deserialised from the frontend.

To mitigate this, we introduce a new `GeneralSettings` struct that holds
the status of the Internet Resource and the list of favourites. When a
client starts up, it will try to migrate the existing advanced settings
into the new split of general and advanced settings.
2025-05-23 17:39:58 +00:00
Jamil
a73c03d7ee docs: Default of false for all macOS plist keys (#9212)
I was mistaken on the defaults of booleans returned by `UserDefaults` -
they're false by default.


https://developer.apple.com/documentation/foundation/userdefaults/bool(forkey:)
2025-05-23 07:26:57 +00:00
Jamil
c61f3ed238 docs: Update Apple changelog with recent additions (#9207) 2025-05-22 21:31:22 +00:00
Jamil
8156b8fb11 docs: Address feedback on macos profile manifest (#9210)
Incorporating feedback from
https://github.com/ProfileManifests/ProfileManifests/pull/791#pullrequestreview-2862167897
2025-05-22 21:17:18 +00:00
Jamil
06551c80c8 fix(website): Use dummy when mixpanel token is blank (#9209)
This fixes an issue on dev if the `NEXT_PUBLIC_MIXPANEL_TOKEN` env var
is not available.
2025-05-22 21:08:11 +00:00
Jamil
e84ba4545e feat(apple): Add supportURL as managed config item (#9202)
Adds `supportURL` as a managed configuration item so that admins may
point their workforce towards their own support Resources.
2025-05-22 16:48:35 +00:00
Jamil
6fd3493ed0 refactor(apple): Consolidate configuration to host app (#9196)
On Apple platforms, `UserDefaults` provides a convenient way to store
and fetch simple plist-compatible data for your app. Unbeknownst to the
author at the time of original implementation was the fact this these
keys are already designed for managed configurations to "mask" any
user-configured equivalents.

This means we no longer need to juggle two dicts in UserDefaults, and we
can instead check which keys are forced via a simple method call.

Additionally, the implementation was simplified in the following ways:

- The host app is the "source of truth" for app configuration now. The
tunnel service receives `setConfiguration` which applies the current
configuration, and saves it in order to start up again without the GUI
connected. The obvious caveat here is that if the GUI isn't running,
configuration such as `internetResourceEnabled` applied by the
administrator won't take effect. This is considered an edge case for the
time being since no customers have asked for this. Additionally, admins
can be advised to ensure the Firezone GUI is running on the system at
all times to prevent this.
- Settings and ConfigurationManager are now able to be removed - these
became redundant after consolidating configuration to the containing
app.
2025-05-22 16:18:00 +00:00
Jamil
100d5f2204 docs: Add iMazing Profile Editor manifest (#9204)
On macOS, we need to use `mobileconfig` files to configure the client.
These are cumbersome to generate by hand and so a number of popular
tools exist to aid in generating these.

One of the more popular options is [iMazing Profile
Editor](https://imazing.com/profile-editor), which maintains a
[repository](https://github.com/ProfileManifests/ProfileManifests) of
popular "Profile Manifests" for various enterprise-managed applications
on Apple.

In addition to opening the PR for the Firezone client in this repo,
we'll want to open one there too so we can be added to the in-app list
of support applications to generate `mobileconfig` files for.
2025-05-22 13:59:47 +00:00
Thomas Eizinger
cee4be9e24 build(deps): bump Rust dependencies (#9192)
A mass upgrade of our Rust dependencies. Most crucially, these remove
several duplicated dependencies from our tree.

- The Tauri plugins have been stuck on `windows v0.60` for a while. They
are now updated to use `windows v0.61` which is what the rest of our
dependency tree uses.
- By bumping `axum`, can also bump `reqwest` which reduces a few more
duplicated dependencies.
- By removing `env_logger`, we can get rid of a few dependencies.
2025-05-22 13:15:01 +00:00
Jamil
029d6ba6ee fix(android): Fix request permission screen padding (#9200)
The padding on this screen was broken, resulting in elements flush
against the edge of the display.

While I was in here, I decided to do a quick round of polish on the
layout and sizing of elements here.

<img width="395" alt="Screenshot 2025-05-21 at 4 24 08 PM"
src="https://github.com/user-attachments/assets/db4f53a3-1ee9-41ae-8172-8cca22be742b"
/>
2025-05-22 10:02:38 +00:00
Jamil
279115910e fix(ci): Don't compose up the same image simultaneously (#9205)
Recently GitHub actions seems to have installed a buggy version of
compose that [fails with
`fatalError`](https://github.com/firezone/firezone/actions/runs/15181224905/job/42691214402?pr=9203)
on this line `docker compose up -d relay-1 relay-2 --no-build`.

Since those point to the same underlying image, I speculate that
separating these out will temporary alleviate this issue for us.
2025-05-22 09:14:23 +00:00
Jamil
745b57218b chore(apple): Remove useless IPC error log (#9201)
This error case happens during normal operation, particularly when
exiting the application and can be dropped.
2025-05-22 07:19:05 +00:00
Brian Manifold
3eacb6b9b5 fix(portal): Add sync deletion circuit breaker (#9194)
Why:

* We have seen issues with Google Admin SDK API returning bad
information when requesting directory info, such as Groups and
Identities. The requests seem to return successful HTTP codes, but the
data is missing, which our sync system interprets as all
Groups/Identities have been deleted from the Google Workspace. In order
to prevent this from happening a deletion circuit breaker function has
been added to stop a sync job if a certain percentage of the identities
will be deleted on the current run. This should prevent the possibility
of mass deleting Groups/Identities if an Identity Provider hands back
incorrect info on any sync.

Fixes: #9188
2025-05-22 04:31:21 +00:00
Thomas Eizinger
600f00f82e refactor(gui-client): update settings window via event (#9193)
Ensuring that the "Settings" window always displays the latest state is
important. At the moment, we achieve this by fetching the settings from
Rust every time we know that they changed and when the window is opened.
Currently, the settings can only change as a result of the reset button.

Once we integrate MDM-controlled configuration into the GUI client, the
settings can change at any point when administrators push a new
configuration change. The window doesn't know that though.

To simplify the code and handle dynamic changes to the settings, we now
use an event to send the settings to the frontend.
2025-05-22 00:26:21 +00:00
Jamil
a1feba9458 fix(android): Bump Android NDK and build target (#9198)
Android recently bumped their default page size to 16 KB, which requires
an updated NDK to successfully build connlib.

See https://developer.android.com/guide/practices/page-sizes
2025-05-21 23:29:48 +00:00
Jamil
af7eaa8cc9 chore: release GUI client 1.4.14 (#9197) 2025-05-21 23:23:45 +00:00
Thomas Eizinger
ae872980ae refactor(gui-client): scope telemetry sessions to GUI client (#9179)
For our telemetry sessions with Sentry, we need to know which
environment we are running in, i.e. staging, production or on-prem. The
GUI client's tunnel service doesn't have a concept of an environment
until a GUI connects and sends the `StartTelemetry` message. Therefore,
we should scope a telemetry session to a GUI being connected over IPC.

Any errors around setting up / tearing down the background service are a
catch-22. Until a GUI connects, we can't initialise the telemetry
connection but if we fail to set up the background service, no GUI can
ever connect. Hence, the current setup and tear down of the `Telemetry`
module around the `ipc_listen` calls can safely be removed as they are
effectively no-ops anyway.
2025-05-20 23:18:18 +00:00
Brian Manifold
12b4a12f26 feat(portal): Add created_by_subject (#9176)
Why:

* We have decided to change the way we will do audit logging. Instead of
soft deleting data and keeping it in the table it was created in, we
will be moving to an audit trail table where various actions will be
recorded in a table/DB specifically for auditing purposes. Due to this
change we need to make sure that we don't have stale/dangling
references. One set of references we keep everywhere is
`created_by_identity_id` and `created_by_actor_id`. Those foreign key
references won't be able to be used after moving to the new audit
system. This commit will allow us to keep that info by pulling the
values and storing the data in a created_by_subject field on the record.
2025-05-20 20:03:46 +00:00
Thomas Eizinger
042d03af2a feat(gui-client): polish Linux bundling (#9181)
Tauri's `deb` and `rpm` bundler have support for configuring maintainer
scripts. We can therefore just use those instead of tearing apart the
`deb` file that it creates and rebuilding it ourselves.

Our `rpm` packaging is currently completely broken as well. I couldn't
get it to work on CentOS 9 at all due to missing dependencies, likely
introduced by our move to Tauri v2. It installs fine on CentOS 10
though, assuming that the user has the EPEL repository installed which
provides the WebView dependency. I extended the docs to reflect this.

Hence, with this PR, we drop support for CentOS 9 and now require CentOS
10. This allows us to remove a lot of cruft from our bundling process
and instead entirely rely on the Tauri provided bundler.

Lastly, for consistency with other platforms, the name of the
application in places like app drawers has been changed from "Firezone
Client" to just "Firezone".

---------

Signed-off-by: Thomas Eizinger <thomas@eizinger.io>
2025-05-20 15:34:16 +00:00
Thomas Eizinger
d53deaf0d8 chore(gui-client): allow override log filter from command-line (#9182)
Can be useful when debugging the GUI client process.
2025-05-20 15:24:37 +00:00
Thomas Eizinger
9a4c87dd2e chore(gui-client): include version in run-debug log (#9187)
This TODO can now be resolved because we have moved the Tunnel service
into the `gui-client` crate.
2025-05-20 15:23:59 +00:00
Jamil
03d8ed0b5d fix(ci): Revert removal of CURRENT_PROJECT_VERSION (#9189)
In #9072 this variable was removed in favor of populating it via an
Xcode build script. It appears however that the script does not take
effect properly when run from CLI and we need to populate this variable
again.
2025-05-20 08:19:25 -07:00
Thomas Eizinger
00b40ae267 refactor(gui-client): improve error handling in Windows service (#9178)
The current error handling logic in the Windows service is a bit dodgy.
We first initialise the logger but then pass the logging handle into the
`try_run_service` function. This means that any failures in starting the
Windows service aren't actually logged because the handle has been
dropped by then already.
2025-05-20 14:46:46 +00:00
dependabot[bot]
0d75600b93 build(deps): bump windows-core from 0.61.0 to 0.61.1 in /rust in the windows group (#9183)
Bumps the windows group in /rust with 1 update:
[windows-core](https://github.com/microsoft/windows-rs).

Updates `windows-core` from 0.61.0 to 0.61.1
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/microsoft/windows-rs/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=windows-core&package-manager=cargo&previous-version=0.61.0&new-version=0.61.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 22:43:03 +00:00
dependabot[bot]
0f6f7b3f8c build(deps): bump tempfile from 3.19.1 to 3.20.0 in /rust (#9185)
Bumps [tempfile](https://github.com/Stebalien/tempfile) from 3.19.1 to
3.20.0.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Stebalien/tempfile/blob/master/CHANGELOG.md">tempfile's
changelog</a>.</em></p>
<blockquote>
<h2>3.20.0</h2>
<p>This release mostly unifies the behavior/capabilities around
&quot;keeping&quot; temporary files:</p>
<ul>
<li>Rename <code>Builder::keep(bool)</code> (via deprecation) to
<code>Builder::disable_cleanup(bool)</code> to make it clear that
behaves differently from <code>NamedTempFile::keep()</code>. The former
disables automatic cleanup while the latter <em>consumes</em> the
<code>NamedTempFile</code> object entirely and unsets the
&quot;temporary file&quot; attribute (on Windows).</li>
<li>Rename <code>TempDir::into_path</code> (via deprecation) to
<code>TempDir::keep</code> to mirror
<code>NamedTempFile::keep</code>.</li>
<li>Add <code>TempDir::disable_cleanup</code>,
<code>NamedTempFile::disable_cleanup</code>, and
<code>TempPath::disable_cleanup</code> making it possible to disable
automatic cleanup in-place <em>after</em> creating a temporary
file/directory (equivalent to calling
<code>Builder::disable_cleanup</code> before creating the
file/directory).</li>
</ul>
<p>Additionally, it adds a few spooled temporary file features:</p>
<ul>
<li>Add <code>SpooledTempFile::into_file</code> for turning a
<code>SpooledTempFile</code> into a regular unnamed temporary file,
writing it to the backing storage (&quot;rolling&quot; it) if it was
still stored in-memory.</li>
<li>Add <code>spooled_tempfile_in</code> and
<code>SpooledTempFile::new_in</code> methods for creating spooled
temporary files in a specific directory. This makes it possible to
choose the backing device for your spooled temporary file which is
rather important on Linux where the default temporary directory is
likely backed by memory (defeating the entire point of having a spooled
temporary file).</li>
</ul>
<p>Finally, this release improves documentation, especially the
top-level documentation explaining which temporary file type to use.</p>
<p><strong>BREAKING</strong> for those with
<code>deny(warnings)</code>:</p>
<ul>
<li><code>Builder::keep</code> deprecated in favor of
<code>Builder::disable_cleanup</code>.</li>
<li><code>TempDir::into_path</code> is deprecated in favor of
<code>TempDir::keep</code>.</li>
</ul>
<p><strong>BREAKING</strong>:</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="99ffea61ad"><code>99ffea6</code></a>
chore: release v3.20.0 (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/358">#358</a>)</li>
<li><a
href="bd2b267442"><code>bd2b267</code></a>
feat: make it possible to disable cleanup in-place after creation (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/355">#355</a>)</li>
<li><a
href="3b30099abd"><code>3b30099</code></a>
ci: really check docs for warnings (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/357">#357</a>)</li>
<li><a
href="f701f52456"><code>f701f52</code></a>
ci: check docs (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/356">#356</a>)</li>
<li><a
href="d34afe99fd"><code>d34afe9</code></a>
doc: improve SpooledData documentation</li>
<li><a
href="6deb42e04c"><code>6deb42e</code></a>
doc: make it easier to pick the correct tempfile constructor/type</li>
<li><a
href="e284782c6c"><code>e284782</code></a>
feat: allow creating spooled temporary files in a specific directory (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/353">#353</a>)</li>
<li><a
href="07edc310a5"><code>07edc31</code></a>
feat: implement <code>SpooledTempFile::into_file</code> (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/352">#352</a>)</li>
<li><a
href="b1223553bb"><code>b122355</code></a>
fix: add must_use attribute to TempDir::keep (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/351">#351</a>)</li>
<li><a
href="cbd1e976e1"><code>cbd1e97</code></a>
feat: rename <code>TempDir::into_path</code> to
<code>TempDir::keep</code> (<a
href="https://redirect.github.com/Stebalien/tempfile/issues/349">#349</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/Stebalien/tempfile/compare/v3.19.1...v3.20.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=tempfile&package-manager=cargo&previous-version=3.19.1&new-version=3.20.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 22:42:25 +00:00
dependabot[bot]
83bc279c55 build(deps): bump axum from 0.7.7 to 0.7.9 in /rust (#9186)
Bumps [axum](https://github.com/tokio-rs/axum) from 0.7.7 to 0.7.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/axum/releases">axum's
releases</a>.</em></p>
<blockquote>
<h2>axum - v0.7.9</h2>
<ul>
<li><strong>fixed:</strong> Avoid setting content-length before
middleware (<a
href="https://redirect.github.com/tokio-rs/axum/issues/3031">#3031</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/tokio-rs/axum/issues/3031">#3031</a>:<a
href="https://redirect.github.com/tokio-rs/axum/pull/3031">tokio-rs/axum#3031</a></p>
<h2>axum - v0.7.8</h2>
<ul>
<li><strong>fixed:</strong> Skip SSE incompatible chars of
<code>serde_json::RawValue</code> in <code>Event::json_data</code> (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2992">#2992</a>)</li>
<li><strong>added:</strong> Add <code>method_not_allowed_fallback</code>
to set a fallback when a path matches but there is no handler for the
given HTTP method (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2903">#2903</a>)</li>
<li><strong>added:</strong> Add <code>MethodFilter::CONNECT</code>,
<code>routing::connect[_service]</code>
and <code>MethodRouter::connect[_service]</code> (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2961">#2961</a>)</li>
<li><strong>added:</strong> Add <code>NoContent</code> as a
self-described shortcut for <code>StatusCode::NO_CONTENT</code> (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2978">#2978</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/tokio-rs/axum/issues/2903">#2903</a>:
<a
href="https://redirect.github.com/tokio-rs/axum/pull/2903">tokio-rs/axum#2903</a>
<a
href="https://redirect.github.com/tokio-rs/axum/issues/2961">#2961</a>:
<a
href="https://redirect.github.com/tokio-rs/axum/pull/2961">tokio-rs/axum#2961</a>
<a
href="https://redirect.github.com/tokio-rs/axum/issues/2978">#2978</a>:
<a
href="https://redirect.github.com/tokio-rs/axum/pull/2978">tokio-rs/axum#2978</a>
<a
href="https://redirect.github.com/tokio-rs/axum/issues/2992">#2992</a>:
<a
href="https://redirect.github.com/tokio-rs/axum/pull/2992">tokio-rs/axum#2992</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9983bc1da4"><code>9983bc1</code></a>
Bump versions</li>
<li><a
href="a8ce6fa030"><code>a8ce6fa</code></a>
axum-extra: Add links to features table (<a
href="https://redirect.github.com/tokio-rs/axum/issues/3030">#3030</a>)</li>
<li><a
href="ce3d42947e"><code>ce3d429</code></a>
fix: Avoid setting content-length before middleware (<a
href="https://redirect.github.com/tokio-rs/axum/issues/3031">#3031</a>)</li>
<li><a
href="893bb75e3b"><code>893bb75</code></a>
CI: allow <code>pin-project-lite</code> in public dependencies (<a
href="https://redirect.github.com/tokio-rs/axum/issues/3020">#3020</a>)</li>
<li><a
href="feee742ca1"><code>feee742</code></a>
Bump versions</li>
<li><a
href="da4580247a"><code>da45802</code></a>
Some documentation fixes (<a
href="https://redirect.github.com/tokio-rs/axum/issues/3027">#3027</a>)</li>
<li><a
href="8bc326cc3d"><code>8bc326c</code></a>
Improve docs regarding state and extensions (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2991">#2991</a>)</li>
<li><a
href="b30cdcfbea"><code>b30cdcf</code></a>
Remove unneeded macro usage (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2995">#2995</a>)</li>
<li><a
href="185804398f"><code>1858043</code></a>
fix(sse): skip sse incompatible chars of
<code>serde_json::RawValue</code> (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2992">#2992</a>)</li>
<li><a
href="43814c174f"><code>43814c1</code></a>
Fix TSR redirecting to top-level inside nested Router (<a
href="https://redirect.github.com/tokio-rs/axum/issues/2993">#2993</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/axum/compare/axum-v0.7.7...axum-v0.7.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=axum&package-manager=cargo&previous-version=0.7.7&new-version=0.7.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-19 22:41:54 +00:00
Thomas Eizinger
1bdba3601a feat(gui-client): rename IPC service to Tunnel service (#9154)
The name IPC service is not very descriptive. By nature of being
separate processes, we need to use IPC to communicate between them. The
important thing is that the service process has control over the tunnel.
Therefore, we rename everything to "Tunnel service".

The only part that is not changed are historic changelog entries.

Resolves: #9048
2025-05-19 09:52:06 +00:00
Jamil
e14c4e1eb8 refactor(apple): Only apply MDM config when changed (#9173)
In #9169 we applied MDM configuration from MDM upon _any_ change to
UserDefaults. This is unnecessary.

Instead, we can compare new vs old and only apply the new dict if
there's changes.

In this PR we also log the old and new dicts for debugging reasons.
2025-05-16 23:21:08 +00:00
Jamil
ca59492003 fix(portal): bump width of default auth provider selection (#9174)
This is just a bit short at the moment:

<img width="467" alt="Screenshot 2025-05-16 at 3 55 55 PM"
src="https://github.com/user-attachments/assets/6d4b6d6d-d3a2-453e-a860-cb638127f684"
/>

---------

Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-05-16 16:20:47 -07:00
Jamil
73f334e345 feat(apple): Add start on login functionality (#9168)
Adds a new settings/configuration item `startOnLogin` which simply adds
a "Login Item" which starts Firezone after signing into the Mac.

This feature is macOS 13 and above only because otherwise we will need
to bundle a helper application to register as a service to start the
app. Given our very small footprint of macOS 12 users, and how
unsupported it is, this is ok.

When it comes time to implement MDM for this feature, note that Apple
provides a means to enforce login items via the
[`ServiceManagementLoginItems`
payload](https://developer.apple.com/documentation/devicemanagement/servicemanagementmanagedloginitems)
which is outside the scope of `com.apple.configuration.managed`. This
enforces the login item in System Settings so that the user is unable to
disable it.

We also add functionality here, but bear in mind that even if we disable
the Toggle switch in our Settings page, the user could still disable the
item in system settings unless it is being set through MDM via the
service management key above.

Another thing to note is that this setting is applied on the GUI side of
the tunnel only, because it is inherently tied to the process it is
running as. We are not able to (nor does it make sense to) enable the
login item for the tunnel service. This should be fine.

Tested to ensure enabling/disabling appropriately adds and removes the
login item (and re-adds it if I manually remove it from system
settings).


Related: #8916 
Related: #2306

---------

Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
2025-05-16 22:15:49 +00:00
Jamil
c18cb69157 feat(portal): Add broadcast to simulate more real-world events (#9172)
We are currently consuming the WAL on production and it has shown very
little cost in terms of resource usage.

It would be better to get a more real-world test by sending actual
broadcasts with data.

To do this, we simply send a `Domain.PubSub.broadcast` with all of the
data received in the WAL message, which represents an absolute
worst-case scenario.
2025-05-16 22:00:59 +00:00