Refs #5022
The debug IPC service has been useful on Windows, and since there is
more refactoring to do, I want it on Linux too.
With this you can just do `sudo -E target/debug/firezone-client-ipc
debug-ipc-service` and it will launch an IPC service without messing
with systemd or installing anything. (Assuming the directory for the
socket is created)
```[tasklist]
### Before merging
- [ ] Check for regressions in Windows
- [ ] Check for regressions in Linux
```
Closes#4995Closes#4925Closes#4997Closes#5047
Supersedes #4965 and #5004.
NOT changing:
- Page description for other Clients. That is still "Firezone
Documentation"
Need these Clients:
- Windows GUI
- Linux headless
- Linux GUI
to have these things documented: (with exact terms)
- Prerequisites
- Installation
- Usage
- Signing in
- Accessing a Resource
- Signing out
- Quitting
- Upgrading
- Diagnostic logs
- Uninstalling
- Troubleshooting
- DNS not reverted after exit
- DNS Resource not accessible
- Known issues
```[tasklist]
### Before merging
- [x] Test Windows GUI instructions
- [x] Add troubleshooting for #5027
- [x] Fill in troubleshooting sections
- [x] Test Linux GUI instructions
- [x] Linux headless - Make sure SIGTERM or Ctrl+C or whatever reverts resolv.conf
- [x] Test Linux Headless instructions
- [x] Page descriptions should be "How to install and use the Firezone $OS $UI client."
- [x] ~~Linux headless - Confirm behaviors and default values of all env vars~~ (skipping - The ones that are used are exercised)
- [x] Grep for TODOs
- [x] Change "un-install" to "uninstall"
- [x] Capitalize "Client" where needed
- [x] Change "IPC service" to "Tunnel service" or something
- [x] Change "SplitDNS" to "Split DNS"
- [ ] Wait for next Client release to be cut
```
---------
Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com>
This call always results in an error because the GUI runs unprivileged
on both Linux and Windows now, so it can't control DNS or deactivate DNS
control. The IPC service has taken over all that, so the GUI not only
shouldn't do it, it can't do it.
<img width="568" alt="image"
src="https://github.com/firezone/firezone/assets/13400041/ad1b861f-4f3e-453a-94b5-d6f21c9eb198">
Closes#5015.
This way if the user opens and closes the GUI without doing anything,
the Welcome screen still appears until they successfully sign in.
Previously the `ran_before` flag was set after the first GUI startup.
Tested on Windows once.
Bumps [arboard](https://github.com/1Password/arboard) from 3.3.2 to
3.4.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/1Password/arboard/releases">arboard's
releases</a>.</em></p>
<blockquote>
<h2>v3.4.0</h2>
<h3>Added</h3>
<ul>
<li>Added a <code>wait_until</code> method for Linux, as a superset of
the existing <code>wait</code> functionality.
This is a helper for letting an application wait without manual timeout
handling.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Transparency in copied images now behaves better in certain Windows
apps.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated <code>image</code> to <code>0.25</code>.</li>
<li>Removed direct <code>thiserror</code> dependency.</li>
<li>Fixed Linux documentation links</li>
<li>Raised MSRV to 1.67.1</li>
<li>Reverted timeout behavior of <code>Clipboard::new()</code> on
platforms using X11. Applications are
encouraged to wrap constructor calls in their own thread/channel timeout
mechanisms instead
to make sure the behavior matches each usecase.</li>
<li>Migrated away from <code>objc</code> to the <code>objc2</code>
ecosystem for the Apple clipboard implementation.</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/1Password/arboard/compare/v3.3.2...v3.4.0">https://github.com/1Password/arboard/compare/v3.3.2...v3.4.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/1Password/arboard/blob/master/CHANGELOG.md">arboard's
changelog</a>.</em></p>
<blockquote>
<h2>3.4.0 on 2024-29-04</h2>
<h3>Added</h3>
<ul>
<li>Added a <code>wait_until</code> method for Linux, as a superset of
the existing <code>wait</code> functionality.
This is a helper for letting an application wait without manual timeout
handling.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Transparency in copied images now behaves better in certain Windows
apps.</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Updated <code>image</code> to <code>0.25</code>.</li>
<li>Removed direct <code>thiserror</code> dependency.</li>
<li>Fixed Linux documentation links</li>
<li>Raised MSRV to 1.67.1</li>
<li>Reverted timeout behavior of <code>Clipboard::new()</code> on
platforms using X11. Applications are
encouraged to wrap constructor calls in their own thread/channel timeout
mechanisms instead
to make sure the behavior matches each usecase.</li>
<li>Migrated away from <code>objc</code> to the <code>objc2</code>
ecosystem for the Apple clipboard implementation.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="151e679ee5"><code>151e679</code></a>
Release 3.4.0</li>
<li><a
href="610e29ba81"><code>610e29b</code></a>
Remove direct thiserror dependency</li>
<li><a
href="83740b7ab0"><code>83740b7</code></a>
Copy image as PNG file on Windows (<a
href="https://redirect.github.com/1Password/arboard/issues/141">#141</a>)</li>
<li><a
href="0bff1e07ea"><code>0bff1e0</code></a>
Use objc2 and its framework crates</li>
<li><a
href="1cca83d7e5"><code>1cca83d</code></a>
Revert "add timeout to RustConnection::connect to X11
server"</li>
<li><a
href="b4646f6c5f"><code>b4646f6</code></a>
Increase version of clipboard-win used by default</li>
<li><a
href="e2846f9288"><code>e2846f9</code></a>
Fix clippy errors</li>
<li><a
href="2f4b502508"><code>2f4b502</code></a>
Move <code>WaitConfig</code> to src/platform/linux/mod.rs, use
<code>WaitConfig</code> inside `stru...</li>
<li><a
href="6cf324cc44"><code>6cf324c</code></a>
Added <code>WaitConfig</code>, fix <code>wait_until</code> note in
docs</li>
<li><a
href="eabb191df0"><code>eabb191</code></a>
add notice for X11 in <code>SetExtLinux#wait_until</code> docs</li>
<li>Additional commits viewable in <a
href="https://github.com/1Password/arboard/compare/v3.3.2...v3.4.0">compare
view</a></li>
</ul>
</details>
<br />
[](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>
Co-authored-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Ready for review.
Closes#3712.
Supersedes #4940.
Refs #4963.
I haven't figured out if it needs any new automated tests (unit,
integration, etc.) but the code itself is ready for review. There is
more refactoring that could be done, or could be left for later.
```[tasklist]
- [x] Move wintun setup from GUI to IPC service / headless client
- [x] Make sure the device ID is in a sensible place
- [x] Export IPC service logs in the zips
- [x] Test GUI + SC IPC service on Windows (f4db808919a passed)
- [x] Make sure IPC service does not busy-loop
- [x] Test un-install checklist for Windows
- [x] Test upgrade checklist for Windows
- [x] Test GUI + systemd IPC service on Linux (c4ab7e7 passed)
- [x] Test upgrade checklist for Linux
- [x] Test un-install checklist for Linux
- [x] Make sure the IPC service logs out and deactivates DNS control if the GUI crashes
- [x] Test network changing
- [x] (it's intended behavior) ~~Look into spurious `on_update_resources` (fad86babd7)~~
- [x] ~~Test max partition time on offline laptop~~ (I ended up just setting a 30-day default in the code)
- [x] Make sure headless Client does not busy-loop
- [x] Test standalone headless on Linux
- [ ] Add unit / integration tests
- [ ] Think about security a bit #3971
```
---------
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
This PR introduces site's `Status`. That's used to report to the client
the status, either, unknown, online or offline, mostly as a hint to
users as what's wrong with a connection.
This are the criteria for an online or offline resource
* If all sites related to a resource are offline the resource is
considered offline, since there's no gateway that can respond to that
resource's connection
* If any site is online the resource is online, since that same peer can
be used to reach that resource
* Any other case is unknown
Right now resources are single site so it doesn't matter too much but
tracking online/offline per-site instead of per-gateway or resource
seems like the better long-term solution.
The way to "find out" the site's status is:
* If a response to a connection details is offline, all sites related to
that resource must be offline otherwise there would've been a gateway in
the response
* At the point we connect to a gateway, the site that corresponds to
that gateway must be online
* When a connection to a peer stops it's considered unknown again
Fixes#4738
Bumps [zip](https://github.com/zip-rs/zip2) from 0.6.6 to 1.2.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/zip-rs/zip2/releases">zip's
releases</a>.</em></p>
<blockquote>
<h2>v1.2.3</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Remove a window when an extracted directory might be unexpectedly
listable and/or <code>cd</code>able by non-owners</li>
<li>Extract directory contents on Unix even if the directory doesn't
have write permission (<a
href="https://redirect.github.com/zip-rs/zip-old/issues/423">zip-rs/zip-old#423</a>)</li>
</ul>
<h3><!-- raw HTML omitted -->⚙️ Miscellaneous Tasks</h3>
<ul>
<li>More conditionally-unused imports</li>
</ul>
<h2>v1.2.2</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Failed to clear "writing_raw" before finishing a symlink,
leading to dropped extra fields</li>
</ul>
<h3><!-- raw HTML omitted -->⚡ Performance</h3>
<ul>
<li>Use boxed slice for archive comment, since it can't be
concatenated</li>
<li>Optimize for the fact that false signatures can't overlap with real
ones</li>
</ul>
<h2>v1.2.1</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Prevent panic when trying to read a file with an unsupported
compression method</li>
<li>Prevent panic after reading an invalid LZMA file</li>
<li>Make <code>Stored</code> the default compression method if
<code>Deflated</code> isn't available, so that zip files are readable by
as much software as possible</li>
<li>version_needed was wrong when e.g. cfg(bzip2) but current file
wasn't bzip2 (<a
href="https://redirect.github.com/zip-rs/zip2/pull/100">#100</a>)</li>
<li>file paths shouldn't start with slashes (<a
href="https://redirect.github.com/zip-rs/zip2/pull/102">#102</a>)</li>
</ul>
<h3><!-- raw HTML omitted -->🚜 Refactor</h3>
<ul>
<li>Overhaul <code>impl Arbitrary for FileOptions</code></li>
<li>Remove unused <code>atomic</code> module</li>
</ul>
<h2>v1.2.0</h2>
<h3><!-- raw HTML omitted -->🚀 Features</h3>
<ul>
<li>Add method <code>decompressed_size()</code> so non-recursive ZIP
bombs can be detected</li>
</ul>
<h3><!-- raw HTML omitted -->🚜 Refactor</h3>
<ul>
<li>Make <code>ZipWriter::finish()</code> consume the
<code>ZipWriter</code></li>
</ul>
<h3><!-- raw HTML omitted -->⚙️ Miscellaneous Tasks</h3>
<ul>
<li>Use panic! rather than abort to ensure the fuzz harness can process
the failure</li>
<li>Update fuzz_write to use replace_with</li>
<li>Remove a drop that can no longer be explicit</li>
<li>Add <code>#![allow(unexpected_cfgs)]</code> in nightly</li>
</ul>
<h2>v1.1.4</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Rare bug where find_and_parse would give up prematurely on detecting
a false end-of-CDR header</li>
</ul>
<h2>v1.1.3</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Alignment was previously handled incorrectly (<a
href="https://redirect.github.com/Pr0methean/zip/pull/33">#33</a>)</li>
</ul>
<h3><!-- raw HTML omitted -->🚜 Refactor</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/zip-rs/zip2/blob/master/CHANGELOG.md">zip's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/zip-rs/zip2/compare/v1.2.2...v1.2.3">1.2.3</a>
- 2024-05-10</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Remove a window when an extracted directory might be unexpectedly
listable and/or <code>cd</code>able by non-owners</li>
<li>Extract directory contents on Unix even if the directory doesn't
have write permission (<a
href="https://redirect.github.com/zip-rs/zip-old/issues/423">zip-rs/zip-old#423</a>)</li>
</ul>
<h3><!-- raw HTML omitted -->⚙️ Miscellaneous Tasks</h3>
<ul>
<li>More conditionally-unused imports</li>
</ul>
<h2><a
href="https://github.com/zip-rs/zip2/compare/v1.2.1...v1.2.2">1.2.2</a>
- 2024-05-09</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Failed to clear "writing_raw" before finishing a symlink,
leading to dropped extra fields</li>
</ul>
<h3><!-- raw HTML omitted -->⚡ Performance</h3>
<ul>
<li>Use boxed slice for archive comment, since it can't be
concatenated</li>
<li>Optimize for the fact that false signatures can't overlap with real
ones</li>
</ul>
<h2><a
href="https://github.com/zip-rs/zip2/compare/v1.2.0...v1.2.1">1.2.1</a>
- 2024-05-06</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Prevent panic when trying to read a file with an unsupported
compression method</li>
<li>Prevent panic after reading an invalid LZMA file</li>
<li>Make <code>Stored</code> the default compression method if
<code>Deflated</code> isn't available, so that zip files are readable by
as much software as possible</li>
<li>version_needed was wrong when e.g. cfg(bzip2) but current file
wasn't bzip2 (<a
href="https://redirect.github.com/zip-rs/zip2/pull/100">#100</a>)</li>
<li>file paths shouldn't start with slashes (<a
href="https://redirect.github.com/zip-rs/zip2/pull/102">#102</a>)</li>
</ul>
<h3><!-- raw HTML omitted -->🚜 Refactor</h3>
<ul>
<li>Overhaul <code>impl Arbitrary for FileOptions</code></li>
<li>Remove unused <code>atomic</code> module</li>
</ul>
<h2><a
href="https://github.com/zip-rs/zip2/compare/v1.1.4...v1.2.0">1.2.0</a>
- 2024-05-06</h2>
<h3><!-- raw HTML omitted -->🚀 Features</h3>
<ul>
<li>Add method <code>decompressed_size()</code> so non-recursive ZIP
bombs can be detected</li>
</ul>
<h3><!-- raw HTML omitted -->🚜 Refactor</h3>
<ul>
<li>Make <code>ZipWriter::finish()</code> consume the
<code>ZipWriter</code></li>
</ul>
<h3><!-- raw HTML omitted -->⚙️ Miscellaneous Tasks</h3>
<ul>
<li>Use panic! rather than abort to ensure the fuzz harness can process
the failure</li>
<li>Update fuzz_write to use replace_with</li>
<li>Remove a drop that can no longer be explicit</li>
<li>Add <code>#![allow(unexpected_cfgs)]</code> in nightly</li>
</ul>
<h2><a
href="https://github.com/zip-rs/zip2/compare/v1.1.3...v1.1.4">1.1.4</a>
- 2024-05-04</h2>
<h3><!-- raw HTML omitted -->🐛 Bug Fixes</h3>
<ul>
<li>Build was failing with bzip2 enabled</li>
<li>use is_dir in more places where Windows paths might be handled
incorrectly</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/zip-rs/zip2/commits/v1.2.3">compare
view</a></li>
</ul>
</details>
<br />
[](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>
Co-authored-by: Not Applicable <ReactorScram@users.noreply.github.com>
```[tasklist]
### Before merging
- [x] Make sure the service auto-starts
- [x] Make the process idle and report its status to Windows properly using https://github.com/mullvad/windows-service-rs
- [x] DRY log dir code
- [x] Figure out where service logs will go and how the GUI will zip them
- [x] Make sure the service gets a shut down signal from Windows (this is hard to catch in the Tauri GUI)
- [x] Make sure the service restarts when Firezone is updated
- [x] Make sure the service is stopped and un-installed when Firezone is un-installed
- [x] Add test to install the MSI and check that the service runs
- [x] (will move to another PR) ~~Clean up function names~~
- [x] Make sure the Linux GUI was not broken by refactoring
```
Bumps [reqwest](https://github.com/seanmonstar/reqwest) from 0.12.2 to
0.12.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/seanmonstar/reqwest/releases">reqwest's
releases</a>.</em></p>
<blockquote>
<h2>v0.12.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Add <code>zstd</code> support, enabled with <code>zstd</code> Cargo
feature (thanks <a
href="https://github.com/paolobarbolini"><code>@paolobarbolini</code></a>!)</li>
<li>Add <code>ClientBuilder::read_timeout(Duration)</code>, which
applies the duration for each read operation. The timeout resets after a
successful read.</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/SamuelMarks"><code>@SamuelMarks</code></a>
made their first contribution in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2245">seanmonstar/reqwest#2245</a></li>
</ul>
<h2>v0.12.3</h2>
<h2>What's Changed</h2>
<ul>
<li>Add <code>FromStr</code> for <code>dns::Name</code>.</li>
<li>Add <code>ClientBuilder::built_in_webpki_certs(bool)</code> to
enable them separately.</li>
<li>Add <code>ClientBuilder::built_in_native_certs(bool)</code> to
enable them separately.</li>
<li>Fix sending <code>content-length: 0</code> for GET requests.</li>
<li>Fix response body <code>content_length()</code> to return value when
timeout is configured.</li>
<li>Fix <code>ClientBuilder::resolve()</code> to use lowercase domain
names.</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/zuisong"><code>@zuisong</code></a> made
their first contribution in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2207">seanmonstar/reqwest#2207</a></li>
<li><a href="https://github.com/djc"><code>@djc</code></a> made their
first contribution in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2222">seanmonstar/reqwest#2222</a></li>
<li><a href="https://github.com/krant"><code>@krant</code></a> made
their first contribution in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2226">seanmonstar/reqwest#2226</a></li>
<li><a
href="https://github.com/Kriskras99"><code>@Kriskras99</code></a> made
their first contribution in <a
href="https://redirect.github.com/seanmonstar/reqwest/pull/2236">seanmonstar/reqwest#2236</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/seanmonstar/reqwest/compare/v0.12.2...v0.12.3">https://github.com/seanmonstar/reqwest/compare/v0.12.2...v0.12.3</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md">reqwest's
changelog</a>.</em></p>
<blockquote>
<h2>v0.12.4</h2>
<ul>
<li>Add <code>zstd</code> support, enabled with <code>zstd</code> Cargo
feature.</li>
<li>Add <code>ClientBuilder::read_timeout(Duration)</code>, which
applies the duration for each read operation. The timeout resets after a
successful read.</li>
</ul>
<h2>v0.12.3</h2>
<ul>
<li>Add <code>FromStr</code> for <code>dns::Name</code>.</li>
<li>Add <code>ClientBuilder::built_in_webpki_certs(bool)</code> to
enable them separately.</li>
<li>Add <code>ClientBuilder::built_in_native_certs(bool)</code> to
enable them separately.</li>
<li>Fix sending <code>content-length: 0</code> for GET requests.</li>
<li>Fix response body <code>content_length()</code> to return value when
timeout is configured.</li>
<li>Fix <code>ClientBuilder::resolve()</code> to use lowercase domain
names.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="de5dbb1ab8"><code>de5dbb1</code></a>
v0.12.4</li>
<li><a
href="0f126f57ab"><code>0f126f5</code></a>
tests: fix blocking test about empty bodies and content-length</li>
<li><a
href="107388134b"><code>1073881</code></a>
feat: add zstd support (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/1866">#1866</a>)</li>
<li><a
href="1af8945143"><code>1af8945</code></a>
feat: add ClientBuilder::read_timeout(dur) (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2241">#2241</a>)</li>
<li><a
href="e99da854a1"><code>e99da85</code></a>
refactor: fix warnings related to mutability of <code>self</code> (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2245">#2245</a>)</li>
<li><a
href="0720159f63"><code>0720159</code></a>
v0.12.3</li>
<li><a
href="92096952b7"><code>9209695</code></a>
Remove duplicate example for ClientBuilder::default_headers (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2236">#2236</a>)</li>
<li><a
href="e3a15650d6"><code>e3a1565</code></a>
fix: use lower case domain string when using <code>resolve</code> and
<code>resolve_to_addrs</code>...</li>
<li><a
href="b4c491a6ff"><code>b4c491a</code></a>
feat: allow fine-grained root certs for rustls (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2232">#2232</a>)</li>
<li><a
href="cf4295d59d"><code>cf4295d</code></a>
chore: update winreg to 0.52.0 (<a
href="https://redirect.github.com/seanmonstar/reqwest/issues/2226">#2226</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/seanmonstar/reqwest/compare/v0.12.2...v0.12.4">compare
view</a></li>
</ul>
</details>
<br />
[](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>
Co-authored-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Closes#4888
It turns out clicking on a notification in Ubuntu can cause it to call
the application, so I had to add back single-instance protection.
Windows' named pipes do this easily. For Unix domain sockets, we allow
the 2nd instance to connect to us, and then when the connection
succeeds, the 2nd instance bails out and the 1st instance bails out of
the deep link handler because it sees a 0-byte-long deep link.
So clicking on the notification does result in a 2nd instance warning
dialog, but it's better than before. I guess it makes sense why Ubuntu
does that, in case any app wants to raise their window when clicked, but
I wish they passed a well-known subcommand or something. Or just used a
normal click action.
<img width="609" alt="image"
src="https://github.com/firezone/firezone/assets/13400041/37467f57-22b0-4a38-9e74-e4863fd331b1">
---------
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
17ac1ebe79 looks good on both Linux and Windows
```[tasklist]
### Before merging
- [x] Allow GUI to delete IPC service logs
- [x] Test Linux
- [x] Test Windows
```
This is what I've been doing on the testing VMs to exercise the
first-run behavior.
---------
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Closes#4819
There is a way to get them async with D-Bus. We can invest time in that
if we want. Polling works for now, it's just gonna be a slight battery
waste on laptops.
Bumps [@tauri-apps/cli](https://github.com/tauri-apps/tauri) from 1.5.11
to 1.5.12.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tauri-apps/tauri/releases"><code>@tauri-apps/cli</code>'s
releases</a>.</em></p>
<blockquote>
<h2><code>@tauri-apps/cli</code> v1.5.12</h2>
<h2>[1.5.12]</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="1675e41f05"><code>1675e41f0</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9481">#9481</a>)
Fixed an issue with the CLI renaming the main executable in kebab-case
when building for Windows on a non-Windows system which caused the
bundler step to fail.</li>
<li><a
href="9dd67abd93"><code>9dd67abd9</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9298">#9298</a>)
Upgrade <code>heck</code> to v0.5 to better support Chinese and Japanese
product name, because Chinese do not have word separation.</li>
<li><a
href="f9638b6315"><code>f9638b631</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9491">#9491</a>)
Fixed an issue that caused the CLI to rename app binaries incorrectly if
the product name contained a <code>.</code> which resulted in the
bundling step to fail.</li>
<li><a
href="77cc49ac3c"><code>77cc49ac3</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9188">#9188</a>)
Fixed an issue causing the <code>build.runner</code> and
<code>build.features</code> configs to not take effect.</li>
<li><a
href="aeddc40b9e"><code>aeddc40b9</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9411">#9411</a>)
Fix <code>tauri info</code> crashing when Node.js is not installed.</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>Upgraded to <code>tauri-cli@1.5.12</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="caddd5bdd8"><code>caddd5b</code></a>
Apply Version Updates From Current Changes (v1) (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9544">#9544</a>)</li>
<li><a
href="72c2636527"><code>72c2636</code></a>
chore(ci): fix MSRV downgrade (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9543">#9543</a>)</li>
<li><a
href="83e024c670"><code>83e024c</code></a>
chore(ci): downgrade home crate (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9542">#9542</a>)</li>
<li><a
href="07c9e352df"><code>07c9e35</code></a>
fix(ci): downgrade cc crate for MSRV compatibility (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9541">#9541</a>)</li>
<li><a
href="d00178d60c"><code>d00178d</code></a>
ci: Fix package downgrades in covector workflow (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9538">#9538</a>)</li>
<li><a
href="705da977a9"><code>705da97</code></a>
fix: optional chaining is not supported on older webviews (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9529">#9529</a>)</li>
<li><a
href="1675e41f05"><code>1675e41</code></a>
fix(bundler): don't convert product name to snake case when cross
compiling (...</li>
<li><a
href="f9638b6315"><code>f9638b6</code></a>
fix(cli): append extension to app binary manually on rename (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9491">#9491</a>)</li>
<li><a
href="aeddc40b9e"><code>aeddc40</code></a>
fix(cli/info): fix crash when checking node version (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9411">#9411</a>)</li>
<li><a
href="fe6f81fa88"><code>fe6f81f</code></a>
chore: fix clippy false positive (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9329">#9329</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tauri-apps/tauri/compare/@tauri-apps/cli-v1.5.11...@tauri-apps/cli-v1.5.12">compare
view</a></li>
</ul>
</details>
<br />
[](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>
Bumps [@tauri-apps/api](https://github.com/tauri-apps/tauri) from 1.5.3
to 1.5.4.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tauri-apps/tauri/releases"><code>@tauri-apps/api</code>'s
releases</a>.</em></p>
<blockquote>
<h2><code>@tauri-apps/api</code> v1.5.4</h2>
<!-- raw HTML omitted -->
<pre><code>yarn audit v1.22.22
info No lockfile found.
0 vulnerabilities found - Packages audited: 148
Done in 1.53s.
</code></pre>
<!-- raw HTML omitted -->
<h2>[1.5.4]</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="e3b6d38d26"><code>e3b6d38d2</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9166">#9166</a>)
Fix <code>basename(path, 'ext')</code> JS API when removing all
occurances of <code>ext</code> where it should only remove the last
one.</li>
<li><a
href="705da977a9"><code>705da977a</code></a>(<a
href="https://redirect.github.com/tauri-apps/tauri/pull/9529">#9529</a>)
Do not use JS optional chaining to prevent script errors on older
webviews such as macOS 10.14.</li>
</ul>
<!-- raw HTML omitted -->
<pre><code>yarn run v1.22.22
$ yarn build && cd ./dist && yarn publish --access
public --loglevel silly
$ rollup -c --configPlugin typescript
[36m
[1m./src/app.ts, ./src/cli.ts, ./src/clipboard.ts, ./src/dialog.ts,
./src/event.ts, ./src/fs.ts, ./src/globalShortcut.ts, ./src/http.ts,
./src/index.ts, ./src/mocks.ts, ./src/notification.ts, ./src/os.ts,
./src/path.ts, ./src/process.ts, ./src/shell.ts, ./src/tauri.ts,
./src/updater.ts, ./src/window.ts[22m → [1m./dist, ./dist[22m...[39m
[32mcreated [1m./dist, ./dist[22m in [1m1.6s[22m[39m
[36m
[1msrc/index.ts[22m →
[1m../../core/tauri/scripts/bundle.global.js[22m...[39m
[32mcreated [1m../../core/tauri/scripts/bundle.global.js[22m in
[1m1.8s[22m[39m
[1/4] Bumping version...
info Current version: 1.5.4
[2/4] Logging in...
[3/4] Publishing...
success Published.
[4/4] Revoking token...
info Not revoking login token, specified via config file.
Done in 9.52s.
</code></pre>
<!-- raw HTML omitted -->
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="caddd5bdd8"><code>caddd5b</code></a>
Apply Version Updates From Current Changes (v1) (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9544">#9544</a>)</li>
<li><a
href="72c2636527"><code>72c2636</code></a>
chore(ci): fix MSRV downgrade (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9543">#9543</a>)</li>
<li><a
href="83e024c670"><code>83e024c</code></a>
chore(ci): downgrade home crate (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9542">#9542</a>)</li>
<li><a
href="07c9e352df"><code>07c9e35</code></a>
fix(ci): downgrade cc crate for MSRV compatibility (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9541">#9541</a>)</li>
<li><a
href="d00178d60c"><code>d00178d</code></a>
ci: Fix package downgrades in covector workflow (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9538">#9538</a>)</li>
<li><a
href="705da977a9"><code>705da97</code></a>
fix: optional chaining is not supported on older webviews (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9529">#9529</a>)</li>
<li><a
href="1675e41f05"><code>1675e41</code></a>
fix(bundler): don't convert product name to snake case when cross
compiling (...</li>
<li><a
href="f9638b6315"><code>f9638b6</code></a>
fix(cli): append extension to app binary manually on rename (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9491">#9491</a>)</li>
<li><a
href="aeddc40b9e"><code>aeddc40</code></a>
fix(cli/info): fix crash when checking node version (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9411">#9411</a>)</li>
<li><a
href="fe6f81fa88"><code>fe6f81f</code></a>
chore: fix clippy false positive (<a
href="https://redirect.github.com/tauri-apps/tauri/issues/9329">#9329</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tauri-apps/tauri/compare/@tauri-apps/api-v1.5.3...@tauri-apps/api-v1.5.4">compare
view</a></li>
</ul>
</details>
<br />
[](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>
```[tasklist]
# Before merging
- [x] Add CI test to check that the Unix domain socket is owned by `root:firezone` (#4832 will do this)
```
This allows the GUI (running as a normal user who belongs to the
`firezone` group) to read back the connlib logs and export them in the
zip file.
<img width="716" alt="image"
src="https://github.com/firezone/firezone/assets/13400041/59cb7cc5-fd6a-4b27-a311-1b9c56b7b23e">
This will keep the files from going out of sync.
This PR also checks that the IPC service creates the IPC socket with
`root:firezone` as the owner and group, when running under systemd.
Bumps
[@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node)
from 20.12.2 to 20.12.7.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node">compare
view</a></li>
</ul>
</details>
<br />
[](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>
ae67064121 works on the live site.
However if you click the notification while the tunnel is coming up,
there's a chance that the download will fail because Firezone isn't
fully up yet. Oops. That will probably only affect us since we have
github.com as a resource. If real customers are okay with their Firezone
updates coming through normal Internet it'll probably be fine.
---------
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Co-authored-by: Jamil Bou Kheir <jamilbk@users.noreply.github.com>
Bumps [tracing-panic](https://github.com/LukeMathWalker/tracing-panic)
from 0.1.1 to 0.1.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/LukeMathWalker/tracing-panic/blob/main/CHANGELOG.md">tracing-panic's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<p>All notable changes to this project will be documented in this
file.</p>
<p>The format is based on <a
href="https://keepachangelog.com/en/1.0.0/">Keep a Changelog</a>,
and this project adheres to <a
href="https://semver.org/spec/v2.0.0.html">Semantic Versioning</a>.</p>
<h2>[Unreleased]</h2>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e27729b9d7"><code>e27729b</code></a>
chore: Release tracing-panic version 0.1.2</li>
<li><a
href="dc8b3bc3b6"><code>dc8b3bc</code></a>
Update docs</li>
<li><a
href="678ac5ca39"><code>678ac5c</code></a>
Add backtrace to panic log entry, make it opt-out (<a
href="https://redirect.github.com/LukeMathWalker/tracing-panic/issues/4">#4</a>)</li>
<li>See full diff in <a
href="https://github.com/LukeMathWalker/tracing-panic/compare/v0.1.1...v0.1.2">compare
view</a></li>
</ul>
</details>
<br />
[](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>
Make the GUI use systemd-resolved to retrieve the system's resolvers.
This allows the IPC service to set up sentinels for those resolvers and
control the system's DNS.
Closes#3812
This aligns some of the internal names with #4531, but it shouldn't
break the externally-visible things like package names or permalinks.
---------
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
```[tasklist]
- [ ] Maybe change that "dev.firezone.client/token" name to something friendlier
```

But it does work, survives reboots as expected, etc.
I can't test it easily in CI, I just disabled the keyring test for now.
It works manually, and the keyring-rs crate seems pretty stable, and our
use of it hasn't changed in a couple months at least.
Closes#4270
Refs #3713
Refs #3782
It sort-of works, but many features are missing and it needs a refactor.
```[tasklist]
- [ ] Break `imp_linux.rs` into modules
- [ ] Get rid of `try_send` and panics where possible
```
---------
Signed-off-by: Reactor Scram <ReactorScram@users.noreply.github.com>
Closes#4763
Previously it would get stuck signing in and say that the situation was
impossible, it was actually possible.
I tested this manually by forcing the tunnel to error out in the place
where wintun fails for #4765
---------
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>