Commit Graph

179 Commits

Author SHA1 Message Date
Brian Manifold
430b32324a fix(portal): Update IDP sync error email threshold (#7757)
Why:

* An IdP sync can fail for different reasons and because of this we
previously put a threshold on when to send the first 'IdP sync failed'
email, which was set at 10 failed sync attempts. One thing that was
accidentally overlooked was that on one specific failure type (i.e. 401
- Unauthorized) the Firezone sync was automatically disabled and not
tried from that point forward. Unfortunately, that meant an email did
not get sent out because the threshold was not met. This PR resolves
that by making sure the 401 error will send out an email immediately,
while keeping the 10 failed sync threshold for all other errors.

Closes: #7725
2025-01-15 17:03:12 +00:00
Brian Manifold
1f457d2127 fix(portal): Fixing a few edge cases for identity email (#7532) 2024-12-16 23:11:25 +00:00
Brian Manifold
f114bc95cd refactor(portal): Add email as separate column on auth_identities table (#7472)
Why:

* Currently, when using the API, a user has no way of easily identifying
what identities they are pulling back as the response only includes the
`provider_identifier` which for most of our AuthProviders is an ID for
the IdP and not an email address. Along with that, when adding users to
an OIDC provider within Firezone, there is no check for whether or not
an identity has already been added with a given email address. By
creating a separate email column on the `auth_identities` table, it will
be very straight forward to know whether an email address exists for a
given identity, return it in an API response and allow the admin of a
Firezone account to track users (Identities) by email rather than IdP
identifier.

Fixes #7392
2024-12-13 17:26:47 +00:00
Brian Manifold
328e973502 feat(portal): add membership to google parent OUs (#6811) (#7382)
Hi @firezone/engineering , this is the following of
https://github.com/firezone/firezone/pull/6649

I forgot that people can be member of multiple OUs, this PR aims to add
support for this.

Imagine I have this OU architecture in my google workspace:

```mermaid
flowchart TD
    A[Employees] --> B[Engineering]
    A --> C[HR]
    B --> D[Devs]
    B --> E[Ops]
    D --> F{me}
```

Currently in Firezone, I will only be a member of the Firezone Group
`OU: Devs`.

With this PR: I will be a member of `OU: Devs`, `OU: Engineering` and
`OU: Employees`

Co-authored-by: Antoine <antoinelabarussias@gmail.com>
2024-11-19 21:38:22 +00:00
Brian Manifold
2d93100c41 fix(portal): Update Stripe event handler to only listen for certain update events (#7357)
Why:

* Recently we had an issue where a customer's payment info was
incorrectly entered, which caused the payment to not go through. When
something like this happens Stripe will send an update event with a
pending_update section (which we do not use currently). When the
customer fixes the payment info, and payment goes through we get another
update event with the correct subscription info, however, the previous
update (with the pending section) then gets expired and a
`pending_update_expired` event is sent to us. We had been inadvertantly
catching the event and updating the specified account with the info in
the event (which happened to be the previous state of the subscription)

Fixes: #7352
2024-11-15 20:52:50 +00:00
Brian Manifold
06791d2d05 refactor(portal): API persistent IDs (#7182)
In order for the firezone terraform provider to work properly, the
Resources and Policies need to be able to be referenced by their
`persistent_id`, specifically in the portal API.
2024-11-07 20:45:56 +00:00
Andrew Dryga
f296dc5ad2 feat(portal): Show clients peek on actors index (#7100)
We will show up to 5 recently started client icons and a status for them
as a green dot badge (no dot when it's offline to keep things simple).
Additional details are available on hover.

<img width="1415" alt="1"
src="https://github.com/user-attachments/assets/1d48d08b-f024-4016-837a-3a2ac9a34718">
<img width="1413" alt="2"
src="https://github.com/user-attachments/assets/101ff122-26e2-4282-ae1d-073b4eba9c56">

I also extended the `Clients` table on "Actor" view page to match the
"Clients" index view.

Also closes #7096
2024-10-28 16:06:22 -06:00
Thomas Eizinger
ce1e59c9fe feat(connlib): implement idempotent control protocol for gateway (#6941)
This PR implements the new idempotent control protocol for the gateway.
We retain backwards-compatibility with old clients to allow admins to
perform a disruption-free update to the latest version.

With this new control protocol, we are moving the responsibility of
exchanging the proxy IPs we assigned to DNS resources to a p2p protocol
between client and gateway. As a result, wildcard DNS resources only get
authorized on the first access. Accessing a new domain within the same
resource will thus no longer require a roundtrip to the portal.

Overall, users will see a greatly decreased connection setup latency. On
top of that, the new protocol will allow us to more easily implement
packet buffering which will be another UX boost for Firezone.
2024-10-18 15:59:47 +00:00
Andrew Dryga
b3c2e54460 feat(portal): New version of the WS control protocol (#6761)
TODOs:
- [x] Switch to sending messages instead of replies
- [ ] Do not hide pre-filtered resources and render them with an error
instead (in case we will want to expose that on a client later)
- [x] Figure out how to generate PSK so that it stays across WS
connections
2024-10-16 10:57:54 -06:00
Brian Manifold
41d1916cc7 fix(portal): Fix outdated gateway notification to respect enable/disable status (#7016)
Realized the enable/disable setting wasn't being respected for the
outdated gateway notification. This PR should fix that issue.
2024-10-13 06:38:28 +00:00
Brian Manifold
7838da9739 fix(portal): Prevent upstream DNS config from using sentinel CIDR ranges (#7010)
Closes #6962
2024-10-11 21:15:29 +00:00
Brian Manifold
7fda4c52c4 feat(portal): Add outdated gateway notifications (#6841)
Why:

* Without some type of notification, users do not realize that new
Gateway versions have been released and thus do not seem to be upgrading
their deployed Gateways.
2024-10-11 12:46:00 +00:00
Andrew Dryga
945b5813a0 fix(portal): Make DNS address validations more strict (#6991)
Closes ##6981
2024-10-10 09:10:00 -06:00
Andrew Dryga
34f42cb761 feat(portal): Accept hardware identifier fields and reset verification when they are changed (#6914)
If previous value is **null then** a new value is persisted and
verification is **not removed**.
If previous value is **not null** then a new value is persisted and
verification is **removed**.

<img width="957" alt="Screenshot 2024-10-02 at 4 59 58 PM"
src="https://github.com/user-attachments/assets/302208ca-3693-40f7-a08a-4521b7c0df05">

---------

Signed-off-by: Andrew Dryga <andrew@dryga.com>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2024-10-04 01:02:55 -06:00
Andrew Dryga
99866a81cc feat(portal): Refresh browser session token expirations using OIDC (#6786)
Closes [#2042](https://github.com/firezone/firezone/issues/2042)
2024-10-02 12:32:20 -06:00
Andrew Dryga
759e944729 fix(portal): Change provider_identifier type to citext (#6901)
Closes #6872
2024-10-01 16:08:42 -06:00
Brian Manifold
f4554d2795 fix(portal): Update IDP sync error notification threshold (#6797)
Why:

* Instead of sending a notification to users when an identity provider
in their account fails to sync 1 time, we've now decided to wait until
the sync failures have reached 10 times to account for various anomalies
that might occur with any given identity providers API.
2024-09-23 19:30:48 +00:00
Andrew Dryga
7f11772b05 fix(portal): Fallback to the user token if service account token is not available (#6764) 2024-09-19 11:35:42 -06:00
Andrew Dryga
1f8b2f8e39 fix(portal): Do not auto-enable policies when they are edited (#6763) 2024-09-18 14:31:34 -06:00
Andrew Dryga
3652839b1a feat(portal): Allow updating policies and resources (#6690)
Now you can "edit" any fields on the policy, when one of fields that
govern the access is changed (resource, actor group or conditions) a new
policy will be created and an old one is deleted. This will be
broadcasted to the clients right away to minimize downtime. New policy
will have it's own flows to prevent confusion while auditing. To make
experience better for external systems we added `persistent_id` that
will be the same across all versions of a given policy.

Resources work in a similar fashion but when they are replaced we will
also replace all corresponding policies.

An additional nice effect of this approach is that we also got
configuration audit log for resources and policies.

Fixes #2504
2024-09-18 13:06:05 -06:00
Brian Manifold
716623a993 feat(portal): Add IDP sync error email notifications (#6483)
This adds a feature that will email all admins in a Firezone Account
when sync errors occur with their Identity Provider.

In order to avoid spamming admins with sync error emails, the error
emails are only sent once every 24 hours. One exception to that is when
there is a successful sync the `sync_error_emailed_at` field is reset,
which means in theory if an identity provider was flip flopping between
successful and unsuccessful syncs the admins would be emailed more than
once in a 24 hours period.

### Sample Email Message
<img width="589" alt="idp-sync-error-message"
src="https://github.com/user-attachments/assets/d7128c7c-c10d-4d02-8283-059e2f1f5db5">
2024-09-18 15:29:50 +00:00
Andrew Dryga
99360060ec fix(portal): Hide trial duration message after subscription becomes active (#6703) 2024-09-16 11:09:30 -06:00
Antoine
e30127dbff feat(portal): sync all google workspace organization units (#6649)
Currently only root OUs are synced into Firezone. An additional query
parameter is needed to list all OUs.

Ref:
https://developers.google.com/admin-sdk/directory/reference/rest/v1/orgunits/list
2024-09-12 12:12:43 -06:00
Andrew Dryga
6c811796f7 fix(portal): Do not save new condition with an empty value and handle it properly if it's saved like that (#6624) 2024-09-06 10:43:21 -07:00
Andrew Dryga
1524dd967c fix(portal): Expire client flows when it's verification is removed (#6613) 2024-09-05 17:14:51 -07:00
Andrew Dryga
ed42f1db9f fix(portal): Show banners when trial is about to expire or is expired (#6579)
Signed-off-by: Andrew Dryga <andrew@dryga.com>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2024-09-05 17:14:29 -07:00
Andrew Dryga
e72bb05436 feat(portal): Reinit client when itself or a known group were updated (#6609)
This allows us to push a whole set of resources at once when client was
verified/unverified/updated/blocked.

Closes #6560
2024-09-05 16:51:47 -07:00
Andrew Dryga
da81fb7f41 feat(portal): Allow client verification and add a policy condition to enforce it (#6604)
<img width="1414" alt="Screenshot 2024-09-05 at 1 17 08 PM"
src="https://github.com/user-attachments/assets/f50816e5-1e16-413c-be35-15ef9153a95d">
<img width="1404" alt="Screenshot 2024-09-05 at 1 17 13 PM"
src="https://github.com/user-attachments/assets/a5e055d0-321d-417e-9fd8-78e9643498cd">
<img width="1178" alt="Screenshot 2024-09-05 at 1 17 23 PM"
src="https://github.com/user-attachments/assets/6ea45486-98fb-495f-96d9-a96eb01925dd">
<img width="678" alt="Screenshot 2024-09-05 at 1 17 31 PM"
src="https://github.com/user-attachments/assets/45b4e798-d1b8-4574-97b3-a41dec1619fd">
<img width="632" alt="Screenshot 2024-09-05 at 1 17 46 PM"
src="https://github.com/user-attachments/assets/3c7c02e0-fc78-442e-86d3-fa711c9bb77c">
2024-09-05 14:35:38 -07:00
Andrew Dryga
2ae5f921c8 fix(portal): Disable IP check for browser session tokens (#6598)
This PR reverts commit that moves out IPv6 address to a separate
subdomain (deploying that will cause a prod downtime) and simply removes
the check that causes redirect loops.
2024-09-05 11:07:40 -07:00
Andrew Dryga
282abb8534 fix(portal): Fix issue with Google Workspace sync token permissions (#6494) 2024-08-30 11:59:59 -06:00
Andrew Dryga
2a808292d0 feat(portal): Add blocked_tx_bytes to flow activity metrics (#6487)
Closes #4787
2024-08-29 14:21:51 -06:00
Andrew Dryga
572c5671d0 feat(portal): Use Service Accounts to sync Google Workspace directory (#6390)
We will need to update the docs for the website, some screens to show
where the settings are:
<img width="1728" alt="Screenshot 2024-08-19 at 1 04 23 PM"
src="https://github.com/user-attachments/assets/88ebb06f-241d-44c8-90fa-258d0b78905e">
<img width="1436" alt="Screenshot 2024-08-19 at 1 04 02 PM"
src="https://github.com/user-attachments/assets/5f7a1011-5a53-4348-81cb-da804ee18bed">

Related [#5959](https://github.com/firezone/firezone/issues/5959)

---------

Signed-off-by: Andrew Dryga <andrew@dryga.com>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2024-08-29 13:30:34 -06:00
Andrew Dryga
2fb5d6a0ac feat(portal): Allow deleting stale actors even for active providers (#6471) 2024-08-28 16:24:00 -06:00
Andrew Dryga
835fc4c8eb chore(portal): Bump all deps related to portal (#6445) 2024-08-28 10:40:02 -06:00
Andrew Dryga
2d083379c6 feat(portal): Internet resources (#6299)
They will be sent in the API for connlib 1.3 and above.

I think in future we can make a whole menu section called "Internet
Security" which will be a specialized UI for the new resource type (and
now show it in Resources list) to improve the user experience around it.

Closes #5852

---------

Signed-off-by: Andrew Dryga <andrew@dryga.com>
Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2024-08-27 23:11:17 +00:00
Andrew Dryga
5b93860ddb fix(portal): Prevent wildcard abuse in DNS resources (#6430)
Now most common TLDs can't have `*` or `?` on the 2nd level, and TLD
can't have matching in itself either.

Closes #6357
Closes #6415
2024-08-26 15:30:09 -06:00
Andrew Dryga
a5342256c3 feat(portal): Allow bulk-deleting synced actors (#6352)
Closes #6301
Closes #6217

<img width="1728" alt="Screenshot 2024-08-19 at 12 19 16 PM"
src="https://github.com/user-attachments/assets/0c1b570d-9ea9-413a-a8b5-febcd6d37072">
2024-08-20 13:05:19 -06:00
Brian Manifold
4e9bd7334a fix(portal): Fix Resource show error on API created Resource (#6284)
Viewing a Resource created by an API client was crashing the view due to
the function creating the link to the actor not accounting for the API
client case.

Closes #6267
2024-08-13 22:07:00 +00:00
Jamil
7cc68196dd test: Fix flaky time condition unit test due to overflow (#6250)
Fixes the flaky time condition unit test by always using midnight as the
end time range so that the `flow.expires_at` is never calculated across
a day boundary into the future.

Supersedes #6244
2024-08-10 18:30:31 +00:00
Andrew Dryga
00b93f6b82 feat(portal): Wildcard dns with backwards compatibility (#6214)
If a new resource is created that will use format not supported by
previous client versions we temporarily show a warning:
<img width="683" alt="Screenshot 2024-08-07 at 2 28 57 PM"
src="https://github.com/user-attachments/assets/bbfdfc96-0c4b-4226-93c5-bc2b5fdb9d30">

It will also be excluded from `resources` list for older clients (below
1.2).

---------

Co-authored-by: Thomas Eizinger <thomas@eizinger.io>
2024-08-10 18:25:24 +00:00
Brian Manifold
e78737c4c8 fix(portal): Refactor API URL config for Web app (#6202)
Why:

* The Swagger UI is currently served from the API application. This
means that the Web application does not have access to the external URL
in the API configuration during/after compilation. Without the API
external URL, we cannot generate a proper link in the portal to the
Swagger UI. This commit refactors how the API external URL is set from
the environment variables and allows the Web app to have access to the
value of the API URL.

Co-authored-by: Jamil <jamilbk@users.noreply.github.com>
2024-08-07 19:30:18 +00:00
Andrew Dryga
bf06534caf fix(portal): Prevent races during relay selection by only using the ones connected for more than 5 seconds ago (#6111)
Closes #6099
Should push #6109 to not being needed short term.
2024-08-02 11:10:40 -06:00
Andrew Dryga
63de0efb73 feat(portal): Time based policies (#6115)
Flows authorized by time-based policies will now expire at the latest
time permitted by the policy.
2024-08-02 01:49:44 -06:00
Jamil
ff88bffc03 fix(ux): Trim whitespace from address before validation (#6061)
When a user copy-pastes an address into the `address` field that
contains a leading or trailing whitespace, it's not apparent why the
address is invalid. This is common when copy-pasting DNS names from
cloud consoles that have poor UIs, such as Azure.

Fixes #6059
2024-07-27 17:49:27 +00:00
Jamil
2c1e6f12ef fix(portal): Restrict creating Resources with addresses in our reserved ranges (#5844)
In the Clients, we need to prioritize DNS Resource traffic before CIDR
traffic in order to ensure DNS resources take priority over full-route
ones.

Because of this, any CIDR Resources defined within our reserved DNS
range will never be routable. This PR updates the portal validations to
reflect that.

refs #5840 
refs #2667
2024-07-12 03:57:50 +00:00
Andrew Dryga
c9a9c1864a fix(portal): Update client identity on every connection (#5697)
This identity must track the last sign in method used by the client

Closes #5633
2024-07-03 13:17:06 -06:00
Andrew Dryga
ecf3944848 fix(portal): Rate limit outbount emails (#5455) 2024-06-19 20:23:37 -06:00
Andrew Dryga
526f9ca269 fix(portal): Fix various production bugs with IdPs (#5342)
Closes #5335
2024-06-12 20:01:51 -06:00
Jamil
fd3d66293c feat(portal): Enable address_description field to provide hint for accessing Resources in Clients (#5273)
Fixes #5270 

- Relaxes the `NOT NULL` constraint because in Clients we already
account for empty address descriptions (by showing the address in its
place if missing). We may want to simply hide the Resource altogether if
the description is missing (based on user feedback). With a blank field,
we can differentiate between not entered vs entered an address.
- Updates help text a bit

```[tasklist]
- [x] Update docs with examples
```

<img width="772" alt="Screenshot 2024-06-06 at 12 01 48 PM"
src="https://github.com/firezone/firezone/assets/167144/523aa0ff-f30d-44cb-bb3c-5d5cda7236e6">

---------

Signed-off-by: Jamil <jamilbk@users.noreply.github.com>
2024-06-12 16:21:56 +00:00
Jamil
77d979e67b fix(portal): fix email sent flash when using oidc (#5128) (#5267)
For oidc users, `provider_identifier` is an id and not the email of the
user.

Contributed by @Intuinewin

---------

Co-authored-by: Antoine <antoinelabarussias@gmail.com>
2024-06-12 16:21:30 +00:00