Commit Graph

3872 Commits

Author SHA1 Message Date
Marco A.
e8a9cd6964 fix: remove legacy events (#10464)
# Which Problems Are Solved

Some events that are now unused are clogging the event queue from time
to time.

# How the Problems Are Solved

Remove the events described in #10458

# Additional Changes

- Updated `stringer` and `enumer` in Makefile target `core_generate_all`
to resolve generated files compilation issues

# Notes
It looks like there are a lot of changes, but most of it is fixing
translation files. I suggest doing a review per-commit

# Additional Context

- Closes #10458
- Depends on https://github.com/zitadel/zitadel/pull/10513
2025-08-19 15:22:34 +02:00
Marco A.
4dad13cbcd chore: upgrade enumer and stringer deps for go generate (#10513)
# Which Problems Are Solved

This change stems from
e2c8f46a41 (r2284548483)

# How the Problems Are Solved

Upgrade dependencies to their latest version

# Additional Context

Relates to https://github.com/zitadel/zitadel/pull/10464
2025-08-19 13:48:18 +02:00
Federico Coppede
c83a85dee9 docs(legal): remove billing page to redirect to the HubSpot KBA URL (#10488)
Removed the billing md document and updated the links to the HubSpot KBA
-> https://help.zitadel.com/pricing-and-billing-of-zitadel-services

Co-authored-by: Maximilian <mpa@zitadel.com>
2025-08-18 11:21:00 -03:00
Max Peintner
98fb8b4209 fix(login): use /logout/done as success page, accept post_logout_redirect param as post logout uri (#10500)
Closes #10413

This PR changes the logout success page of the V2 login to
`/logout/done` and accepts both `post_logout_redirect` as well as
`post_logout_redirect_uri` as a param for the post logout url.

# Which Problems Are Solved

The new Login V2 aligns with the login V1  now.
Accepts `post_logout_redirect` as well as `post_logout_redirect_uri` as
a param for the post logout url.

# How the Problems Are Solved

Both search params are now accepted.
2025-08-18 07:38:37 +00:00
Iraq
a637ae5aa5 fix(api): fix for ListAppKeys() not returning app keys (#10465)
# Which Problems Are Solved

`ListAppKeys()` does not work properly, in that it does not return any
app keys.


# How the Problems Are Solved

The issue stems from a mistake SQL query not joining the
`projections.authn_keys2` table to `projections.projects4` instead of
joining to `projections.apps7`

# Additional Changes

`ListAppKeys()` returns the app key IDs in order of their creation

- Closes https://github.com/zitadel/zitadel/issues/10420
- backport to v4.x

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
2025-08-15 12:51:43 +00:00
Jonas Badstübner
a718267191 fix(loginV2): hide sign-in-with-idp if none are configured (#10402)
<!--
Please inform yourself about the contribution guidelines on submitting a
PR here:
https://github.com/zitadel/zitadel/blob/main/CONTRIBUTING.md#submit-a-pull-request-pr.
Take note of how PR/commit titles should be written and replace the
template texts in the sections below. Don't remove any of the sections.
It is important that the commit history clearly shows what is changed
and why.
Important: By submitting a contribution you agree to the terms from our
Licensing Policy as described here:
https://github.com/zitadel/zitadel/blob/main/LICENSING.md#community-contributions.
-->

# Which Problems Are Solved

Don't show the external IdP section, if none are configured.

# How the Problems Are Solved

- Checks if the length of `identityProviders` is non-empty.

# Additional Changes

- Added 2 additional null-checks for `identityProviders`

# Additional Context

- Closes #10401

Co-authored-by: Max Peintner <max@caos.ch>
Co-authored-by: Livio Spring <livio.a@gmail.com>
2025-08-15 12:00:16 +00:00
Gayathri Vijayan
0929c4d235 fix: create project with the right permission (#10485)
# Which Problems Are Solved

When a user with an `ORG_PROJECT_CREATOR` role tries to create a
project, the request fails with `No matching permissions found
(AUTH-AWfge)` error. This is because `project.write` was set as the
required permission instead of `project.create` during project creation.

# How the Problems Are Solved
By setting the right required permission (`project.create`) while
creating new projects.

# Additional Changes
N/A

# Additional Context
- Closes #10399
2025-08-15 11:35:43 +02:00
Max Peintner
0318edcd3b fix(login): user discovery - ignore case for loginname, email (#10475)
# Which Problems Are Solved

The new login UI user case sensitive matching for usernames and email
addresses. This is different from the v1 login and not expected by
customers, leading to not found user errors.

# How the Problems Are Solved

The user search is changed to case insensitive matching.

# Additional Changes

None

# Additional Context

- reported by a customer
- requires backport to 4.x

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
2025-08-15 08:30:46 +00:00
Federico Coppede
ea71da0d3f docs (legal): Update urgent support phone number specified in support-services.mdx (#10486)
Updated urgent support phone number to **+41 71 560 28 06**

Co-authored-by: Maximilian <mpa@zitadel.com>
2025-08-14 17:32:30 +00:00
Elio Bischof
86db6f1375 docs: remove knative refs (#10487)
# Which Problems Are Solved

Broken links to the removed Knative docs are removed.

# How the Problems Are Solved

I searched for case insensitive knative occurrences in the whole project
and handled them.

# Additional Context

[Reported
internallly](https://zitadel.slack.com/archives/C087ADF8LRX/p1755182839818719?thread_ts=1755170846.959129&cid=C087ADF8LRX)
2025-08-14 15:17:20 +00:00
Max Peintner
a48cacfb02 fix(login): idp redirect (#10482)
This PR fixes an issue where a user was not redirected to an IDP
correctly if the user has entered the loginname and has an IDP as single
auth method
2025-08-14 13:42:33 +00:00
Zach Hirschtritt
532932ef94 fix: drop default otel scope info from metrics (#10306)
# Which Problems Are Solved

Currently, the prometheus endpoint metrics contain otel specific labels
that increase the overall metric size to the point that the exemplar
implementation in the underlying prom exporter library throws an error,
see https://github.com/zitadel/zitadel/issues/10047. The MaxRuneSize for
metric refs in exemplars is 128 and many of metrics cross this because
of `otel_scope_name`.

# How the Problems Are Solved

This change drops those otel specific labels on the prometheus exporter:
`otel_scope_name` and `otel_scope_version`

Current metrics example: 
```
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.53.0",le="0"} 0
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.53.0",le="5"} 100
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",otel_scope_name="go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp",otel_scope_version="0.53.0",le="10"} 100
...
grpc_server_grpc_status_code_total{grpc_method="/zitadel.admin.v1.AdminService/ListIAMMemberRoles",otel_scope_name="",otel_scope_version="",return_code="200"} 3
grpc_server_grpc_status_code_total{grpc_method="/zitadel.admin.v1.AdminService/ListIAMMembers",otel_scope_name="",otel_scope_version="",return_code="200"} 3
grpc_server_grpc_status_code_total{grpc_method="/zitadel.admin.v1.AdminService/ListMilestones",otel_scope_name="",otel_scope_version="",return_code="200"} 1
```

New example: 
```
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",le="10"} 8
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",le="25"} 8
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",le="50"} 9
http_server_duration_milliseconds_bucket{http_method="GET",http_status_code="200",le="75"} 9
...
grpc_server_grpc_status_code_total{grpc_method="/zitadel.admin.v1.AdminService/GetSupportedLanguages",return_code="200"} 1
grpc_server_grpc_status_code_total{grpc_method="/zitadel.admin.v1.AdminService/ListMilestones",return_code="200"} 1
grpc_server_grpc_status_code_total{grpc_method="/zitadel.auth.v1.AuthService/GetMyLabelPolicy",return_code="200"} 3
```

# Additional Changes

None

# Additional Context

From my understanding, this change is fully spec compliant with
Prometheus and Otel:
*
https://opentelemetry.io/docs/specs/otel/compatibility/prometheus_and_openmetrics/#instrumentation-scope

However, these tags were originally added as optional labels to
disambiguate metrics. But I'm not sure we need to care about that right
now? My gut feeling is that exemplar support (the ability for traces to
reference metrics) would be a preferable tradeoff to this label
standard.

Co-authored-by: Silvan <27845747+adlerhurst@users.noreply.github.com>
2025-08-14 12:44:37 +00:00
Elio Bischof
0dffb27fcf chore: fix make console_dependencies (#10452)
# Which Problems Are Solved

The PR ensures that the `console_dependencies` Make recipe installs all
dependencies needed to build the console. This makes for example `make
compile` work again.

# How the Problems Are Solved

- For the current pnpm version 10, dependency overrides must be moved
from the package.json to the pnpm-workspace.yaml.
- The syntax for selecting a pnpm package and its workspace dependencies
is fixed.

# Additional Context

- Closes https://github.com/zitadel/zitadel/issues/10435

---------

Co-authored-by: Marco A. <marco@zitadel.com>
2025-08-13 21:09:12 +02:00
kkrime
10bd747105 fix(projections): added check to make sure there cannot be 2 projections for the same table (#10439)
# Which Problems Are Solved

It should not be possible to start 2 projections with the same name.

If this happens, it can cause issues with the event store such as events
being skipped/unprocessed and can be very hard/time-consuming to
diagnose.

# How the Problems Are Solved

A check was added to make sure no 2 projections have the same table


Closes https://github.com/zitadel/zitadel/issues/10453

---------

Co-authored-by: Silvan <27845747+adlerhurst@users.noreply.github.com>
2025-08-13 13:51:30 +00:00
Rajat Singh
93c030d8fb docs: get rid of empty custom scopes placeholder (#10423)
<!--
Please inform yourself about the contribution guidelines on submitting a
PR here:
https://github.com/zitadel/zitadel/blob/main/CONTRIBUTING.md#submit-a-pull-request-pr.
Take note of how PR/commit titles should be written and replace the
template texts in the sections below. Don't remove any of the sections.
It is important that the commit history clearly shows what is changed
and why.
Important: By submitting a contribution you agree to the terms from our
Licensing Policy as described here:
https://github.com/zitadel/zitadel/blob/main/LICENSING.md#community-contributions.
-->

# Which Problems Are Solved

<img width="1402" height="807" alt="image"
src="https://github.com/user-attachments/assets/9c931889-600f-475c-8a8e-eff592d9acae"
/>

# How the Problems Are Solved

Removing the Custom Scopes Placeholder.

Co-authored-by: Rajat Singh <rajat@zitadel.com>
Co-authored-by: Livio Spring <livio.a@gmail.com>
2025-08-13 13:57:44 +02:00
Max Peintner
5cb0f675cd chore: update lockfile to reflect 1.3.1 for packages (#10471)
this updates the lockfile to represent the latest package version for
latest
2025-08-13 11:53:57 +02:00
Elio Bischof
c5080463aa chore: retry login integration tests (#10422)
# Which Problems Are Solved

The login integration action page load in the idp test times out
sometimes.
Also, the debug steps fail, which cause confusion about why the pipeline
check failed.

# How the Problems Are Solved

- We retry failed tests twice, which should alleviate flakiness because
of eventual consistency. This is fine for now, because typically, a user
doesn't send input as fast as the tests do.
- The compose file path is fixed.
- ~~As suggested in the cypress error logs, we increase the
pageLoadTimeout.~~ The increased pageLoadTimeout didn't help.

# Additional Context

- Example of a failing check:
https://github.com/zitadel/zitadel/actions/runs/16829948857/attempts/1

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Max Peintner <max@caos.ch>
2025-08-13 08:44:57 +00:00
Elio Bischof
b02a68f7cf chore: update login lock file (#10466)
# Which Problems Are Solved

Updates the pnpm lockfile for the login repo.

# How the Problems Are Solved

Used the login dev container and ran `pnpm i`

# Additional Context

From this branch, `make login_push
LOGIN_REMOTE_BRANCH=mirror-zitadel-repo` was executed to sync the login
code with https://github.com/zitadel/typescript/pull/573

Co-authored-by: Max Peintner <max@caos.ch>
2025-08-13 08:23:50 +00:00
Livio Spring
4630b53313 fix(idp): make external id check case insensitive (#10460)
# Which Problems Are Solved

When searching for an existing external userID from an IdP response, the
comparison is case sensitive. This can lead to issues esp. when using
SAML, since the `NameID`'s value case could change. The existing user
would not be found and the login would try to create a new one, but fail
since the uniqueness check of IdP ID and external userID is not case
insensitive.

# How the Problems Are Solved

Search case insensitive for external useriDs.

# Additional Changes

None

# Additional Context

- closes #10457, #10387
- backport to v3.x
2025-08-13 07:44:39 +00:00
Gayathri Vijayan
45cc6e9bb1 fix: use correct the userID column name in permissions v2 check (#10467)
# Which Problems Are Solved

When `Permission Check V2` is enabled, calls to the `ListPasskeys` and
`ListAuthenticationFactors` APIs fail with the following error:
```
ERROR:  missing FROM-clause entry for table "users14"
```

# How the Problems Are Solved
By using the right UserID column
(`projections.user_auth_methods5.user_id`) in the permission clause in
the `userAuthMethod` query

# Additional Changes
N/A

# Additional Context
- Closes #10386
2025-08-12 17:17:39 +02:00
Silvan
427cbe06f3 fix: query organization directly from event store (#10463)
Querying an organization by id allowed to trigger the org projection.
This could lead to performance impacts if the projection gets triggered
too often.

Instead of executing the trigger the organization by id query is now
always executed on the eventstore and reduces all event types required
of the organization requested.

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
2025-08-12 09:37:08 +00:00
Silvan
7fff529777 fix(actionsV1): disable projection trigger when querying org metadata in the action (#10462)
Disables the trigger of the org metadata projection when using `api.v1.getOrgMetadata()`.
2025-08-12 10:53:36 +02:00
Stefan Benz
1579bbc8db fix: add user info to context for set metadata in actions (#10426)
# Which Problems Are Solved

User information in the context is necessary through the addition of the
resource based API endpoints for user metadata, for the permission
check.

# How the Problems Are Solved

Add user information to the action execution to add metadata to users.

# Additional Changes

None

# Additional Context

Needs to be added to v4 releases, to provide the functionality to add
metadata through actions v1 and actions v2 functions.

Co-authored-by: Marco A. <marco@zitadel.com>
2025-08-11 16:43:52 +02:00
Silvan
f13529b31f fix(load-tests): accept any 2xx status as success (#10450)
Adjust status checks across various functions to accept any 2xx HTTP
response instead of only 200, improving the robustness of the API
response validation.

fixes #10436
2025-08-11 11:36:40 +03:00
David Skewis
9ed0daaf8c fix: add form-data override (#10419)
# Which Problems Are Solved

- form-data Math.random() vulnerability

# How the Problems Are Solved

- Overrides the form-data usage in pnpm to a patched version

# Additional Context

CVE ID: https://github.com/advisories/GHSA-fjxv-7rqg-78g4
GHSA ID: https://github.com/advisories/GHSA-fjxv-7rqg-78g4
2025-08-08 16:10:12 +00:00
Livio Spring
67efddcbc6 fix: allow disabling projections for specific instances (#10421)
# Which Problems Are Solved

The current handling of event subscriptions for actions is bad, esp. on
instances with a lot of events
(https://github.com/zitadel/zitadel/issues/9832#issuecomment-2866236414).
This led to severe problems on zitadel.cloud for such instances.

# How the Problems Are Solved

As a workaround until the handling can be improved, we introduce an
option for projections to be disabled completely for specific instances:
`SkipInstanceIDs`

# Additional Changes

None

# Additional Context

- relates to https://github.com/zitadel/zitadel/issues/9832
2025-08-08 16:42:14 +03:00
Stefan Benz
57a0abdcc7 docs: correct api v2 docs for zitadel v4 (#10249)
# Which Problems Are Solved

As documentation is published from the main branch and the releases get
created from another branch, they are not always correctly equal.

# How the Problems Are Solved

Add previously removed docs again to the documentation.
Add deprecation notes on all replaced endpoints related to
administrators, authentications and projects.

## Deprecated endpoints

- Management service
  - to Organization service v2
    - GetOrgByDomainGlobal
  - to User service v2
    - AddMachineUser
    - UpdateMachine
    - GenerateMachineSecret
    - RemoveMachineSecret
    - GetMachineKeyByIDs
    - ListMachineKeys
    - AddMachineKey
    - RemoveMachineKey
    - UpdateUserName
    - SetUserMetadata
    - BulkSetUserMetadata
    - ListUserMetadata
    - GetUserMetadata
    - RemoveUserMetadata
    - BulkRemoveUserMetadata
    - UpdateHumanPhone
    - GetPersonalAccessTokenByIDs
    - ListPersonalAccessTokens
    - AddPersonalAccessToken
    - RemovePersonalAccessToken
  - to Application service v2beta
    - ListAppKeys
  - to Project service v2beta
    - GetProjectByID
    - GetGrantedProjectByID
    - ListProjects
    - ListGrantedProjects
    - ListGrantedProjectRoles
    - AddProject
    - UpdateProject
    - DeactivateProject
    - ReactivateProject
    - RemoveProject
    - ListProjectRoles
    - AddProjectRole
    - BulkAddProjectRoles
    - UpdateProjectRole
    - RemoveProjectRole
    - GetProjectGrantByID
    - ListProjectGrants
    - ListAllProjectGrants
    - AddProjectGrant
    - UpdateProjectGrant
    - DeactivateProjectGrant
    - ReactivateProjectGrant
    - RemoveProjectGrant
  - to Internal Permission service v2beta
    - ListUserMemberships
    - ListOrgMembers
    - AddOrgMember
    - UpdateOrgMember
    - RemoveOrgMember
    - ListProjectMembers
    - AddProjectMember
    - UpdateProjectMember
    - RemoveProjectMember
    - ListProjectGrantMembers
    - AddProjectGrantMember
    - UpdateProjectGrantMember
    - RemoveProjectGrantMember
- Admin service
  - to Instance service v2
    - GetMyInstance
    - ListInstanceDomains
    - ListInstanceTrustedDomains
    - AddInstanceTrustedDomain
    - RemoveInstanceTrustedDomain
  - to Organization service v2
    - GetOrgByID
    - IsOrgUnique
    - GetDefaultOrg
  - to Internal Permission service v2beta
    - ListIAMMembers
    - AddIAMMember
    - UpdateIAMMember
    - RemoveIAMMember

# Additional Changes

None

# Additional Context

Related to #10112

---------

Co-authored-by: Gayathri Vijayan <66356931+grvijayan@users.noreply.github.com>
Co-authored-by: Gayathri Vijayan <gayathri+github@zitadel.com>
Co-authored-by: Marco A. <marco@zitadel.com>
2025-08-08 14:51:58 +02:00
Elio Bischof
4930870504 docs(login v2): update proxy examples (#10358)
# Which Problems Are Solved

- The proxy examples are updated so a self-hosted login container is
deployed.
- The proxies are configured to direct traffic at /ui/v2/login to it.

# How the Problems Are Solved

The base compose file is extended by correctly configured login
containers for all three scenarios
- TLS disabled
- External TLS
- TLS Enabled

The proxy always connects to the login via HTTP.

# Additional Changes

- All proxies have the TLS disabled mode outcommented, because the login
container has state problems, maybe because it needs secure cookies. The
need for this is unclear, so we avoid creating a follow-up issue.
- The httpd external mode is incommented, as gRPC connections work with
this configuration.
- *ZITADEL* is replaced by *Zitadel*

# Additional Context

- Partially Closes #10016

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
2025-08-07 16:58:18 +00:00
Elio Bischof
5f7851768b docs(self-hosting): remove Knative example (#10342)
# Which Problems Are Solved

The Knative docs are removed, as they are not relevant enough.

# How the Problems Are Solved

- The docs page is removed
- The sidebar item is removed

# Additional Context

- Partially Closes #10016
2025-08-07 18:27:24 +02:00
Stefan Benz
cc2ef939c5 fix: remove fields entry with instance domain remove (#10406)
# Which Problems Are Solved

Fields table entry is not removed when removing instance domain.

# How the Problems Are Solved

Remove the fields entry, instead of setting it.

# Additional Changes

None

# Additional Context

Needs to be backported to v3.x
2025-08-07 14:16:02 +00:00
Stefan Benz
6e8aa9a7d1 chore: fix flakiness in gofakeit usage with additional random string (#10385)
# Which Problems Are Solved

Flakiness in integration tests regarding gofakeit functions, which
provided the same names on 2 different occasions.

# How the Problems Are Solved

Attach a random string to the provided names, so that they are not
dependent on the gofakeit code.

# Additional Changes

None

# Additional Context

None

---------

Co-authored-by: Marco A. <marco@zitadel.com>
2025-08-07 13:27:01 +00:00
Gayathri Vijayan
a96f4708cb fix(sessions): add an expiration date filter to list sessions api (#10384)
# Which Problems Are Solved

The deletion of expired sessions does not go through even though a
success response is returned to the user. These expired and supposedly
deleted (to the user) sessions are then returned when the `ListSessions`
API is called.

This PR fixes this issue by:
1. Allowing deletion of expired sessions
2. Providing an `expiration_date` filter in `ListSession` API to filter
sessions by expiration date

# How the Problems Are Solved

1. Remove expired session check during deletion
2. Add an `expiration_date` filter to the  `ListSession` API

# Additional Changes
N/A

# Additional Context
- Closes #10045

---------

Co-authored-by: Marco A. <marco@zitadel.com>
2025-08-07 14:58:59 +02:00
Elio Bischof
7e184727b0 docs: simplify compose example (#10407)
# Which Problems Are Solved

Using the compose configuration with for existing installation doesn't
work.
It is not appreciated in the whole community, that we use Traefik for
the deployment example.

# How the Problems Are Solved

- The config we used before v4 is reused and extended in a compatible
way.
- Traefik is removed, Zitadel is accessible again at localhost:8080 and
the login at localhost:3000. Deploying with Traefik is described already
here http://localhost:3000/docs/self-hosting/manage/reverseproxy/traefik
- A page is added that describes how to create a login client and switch
from login v1 to v2. The page is linked in a hint in the compose
example.

# Additional Changes

- The config also sets up a machine user and documents it inline. This
allows us to avoid using the cumbersome separate docker-compose-sa.yaml

# Additional Context

- Closes #10379 
- Internal discussion
https://zitadel.slack.com/archives/C08TL9AURL7/p1754471184222879
- Discord about upgrading to v2 login:
-
https://discord.com/channels/927474939156643850/927866013545025566/threads/1401950163940933804
-
https://discord.com/channels/927474939156643850/927866013545025566/1401312126030708756
- Discord about not found errors:
-
https://discord.com/channels/927474939156643850/927866013545025566/threads/1401173877941473291
-
https://discord.com/channels/927474939156643850/927866013545025566/1401045717849604227
-
https://discord.com/channels/927474939156643850/927866013545025566/1401173877941473291
-
https://discord.com/channels/927474939156643850/927866013545025566/1401301168998584361
2025-08-06 20:48:54 +00:00
Hidde Wieringa
b6ebabb962 docs: Typos in Actions documentation (#10199)
*safe* is a typo. I also made the sentence a bit more objective.
2025-08-06 09:34:21 +00:00
Saurabh Thapliyal
5747109f14 fix(console): fix shrinking hover background on clear flow button (#10269)
## Problem
The mat-icon-button in the actions flow-type section had a shrinking
hover background. The hover effect was not displaying properly and
appeared constrained.

## Root Cause
The margin rules were being applied to all `span` elements, including
the Material button's internal elements (like `.mat-mdc-button-label`),
which interfered with the button's hover background positioning.

## Solution
- Changed the span selector from `span` to `> span` to target only
direct children
- Added specific margin reset for the button (`margin-right: 0`)
- Added margin reset for the icon inside the button
- This allows the Material button to use its default hover behavior

## Testing
- [x] No visual regressions in text spacing or layout
- [x] Button hover background now displays as a proper circle
- [x] Other buttons on the page remain unaffected
- [x] Matches the behavior of working buttons in trigger sections

## Type of Change
- [x] Bug fix (non-breaking change which fixes an UI issue)


Before :
<img width="427" height="411" alt="Screenshot 2025-07-15 at 6 08 35 PM"
src="https://github.com/user-attachments/assets/f728e1fa-6711-4e8b-ba24-2a84329f50d7"
/>

After fix :
<img width="406" height="404" alt="Screenshot 2025-07-15 at 6 09 36 PM"
src="https://github.com/user-attachments/assets/27d7b08d-684d-4094-8334-844a4e459025"
/>

Fixes hover background issue in actions flow-type section.

---------

Co-authored-by: Saurabh Thapliyal <saurabh@southguild.tech>
Co-authored-by: Marco A. <marco@zitadel.com>
2025-08-05 20:47:55 +02:00
Elio Bischof
e210d0a16a chore: fix login integration (#10318)
# Which Problems Are Solved

Login integration tests are not executed in the pipeline

# How the Problems Are Solved

The login integration tests are fixed and added as a pipeline workflow.
It  tests against the built login docker image.
On pipeline failures, developers are guided on how to fix them using a
dev container configured for this purpose.

# Additional Changes

- email domains are replaced by example.com. In case the tests were
accidentally run against a cloud instance, it wouldn't cause bounces.
- pnpm is upgraded, because the --filter argument doesn't work for the
install command on the old version.
- The login Dockerfile is optimized for docker image builds

# Additional Changes From Review for
https://github.com/zitadel/zitadel/pull/10305

These changes were requested from @peintnermax 

- The base dev container starts without any services besides the
database and the dev container itself
- CONTRIBUTING.md is restructured
- To reproduce pipeline checks, only the devcontainer CLI and Docker are
needed. This is described in the CONTRIBUTING.md
- The convenience npm script "generate" is added

# Additional Context

- Follow-up for PR https://github.com/zitadel/zitadel/pull/10305
- Base for https://github.com/zitadel/zitadel/issues/10277
2025-08-05 15:59:30 +00:00
Niko
30175041c1 docs: Typo in environment variable reference for OIDC:DeviceAuth:UserCode:CharAmount config (#10287)
# Which Problems Are Solved

Typo in environment variable reference for
OIDC:DeviceAuth:UserCode:CharAmount config
`ZITADEL_OIDC_DEVICEAUTH_USERCODE_CHARARMOUNT` - _CHARA_**~~R~~**_MOUNT_

# How the Problems Are Solved

Fixed the typo  `ZITADEL_OIDC_DEVICEAUTH_USERCODE_CHARAMOUNT`

Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
2025-08-05 15:12:07 +00:00
Zach Hirschtritt
d4222d6fd6 fix: don't trigger session projection on notification handling (#10298)
# Which Problems Are Solved

There is an outstanding bug wherein a session projection can fail to
complete and an session OTP challenge is blocked because the projection
doesn't exist. Not sure why the session projection can fail to persist -
I can't find any error logs or failed events to crosscheck. However, I
can clearly see the session events persisted with user/password checks
and the OTP challenged added on the session - but no session projection
on sessions8 table.

This only seems to come up under somewhat higher loads - about 5
logins/s and only for about 1% of cases. (where a "login" is:
authRequest, createSession, getAuthCodeWithSession, tokenExchange, and
finally, otpSmsChallenge...💥).

# How the Problems Are Solved

This is only half a fix, but an important one as it can block login for
affected users. Instead of triggering and checking the session
projection on notification enqueuing, build a write model directly from
the ES.

# Additional Changes

# Additional Context

This doesn't touch the "legacy" notification handler as to limit the
blast radius of this change. But might be worth adding there too.

The test is difficult to update correctly so is somewhat incomplete. Any
suggestions for refactoring or test helpers I'm missing would be
welcome.

Co-authored-by: Silvan <27845747+adlerhurst@users.noreply.github.com>
2025-08-04 13:33:01 +00:00
Mahdi JafariRaviz
b93b6a8a1c fix: disable client id in oidc configuration (#10177)
# Which Problems Are Solved

This pr disables the client id in oidc configuration in console, as
mentioned in #10149.

# How the Problems Are Solved

I re-disabled the field from inside the form.

# Additional Context

- Closes #10149.
- Closes #8530
2025-08-04 12:16:18 +00:00
Markus Heinemann
1728297d3c docs(oidc-playground): update scopes and default instance domain (#9995)
# Which Problems Are Solved

This PR resolves #4845 by enhancing the OIDC Playground:
* set default instance domain to `http://localhost:8080`
* openid checkbox is now disabled
* add explanation texts for custom zitadel scopes

# How the Problems Are Solved

* The checkbox for the `openid` scope is set to `disabled`
* The default value for the instance domain is update by using
`setInstance`
* A new map with explanation texts for the custom scopes is introduced.
During the rendering process of the scope checkboxes the value from this
map is displayed, if the scope exists as key.

# Additional Changes

During the local setup of the documentation webapp I got some react
errors on the authrequest page. This issue has ben solved by refactoring
the usage of an `useEffect` block.

# Additional Context

- Closes #4845

PS. 
I did not found any scripts for linting/formatting (e.g. eslint,
prettier) for the docs project. This is a bit annoying because when I
use my local configurations of eslint/prettier the whole file get's
refactored with unnecessary changes (change of import order, indention
etc.). It would be great to add some custom configurations to to make
the development process easier and enforce a consistent coding style :)

Co-authored-by: Markus Heinemann <markus@trustify.ch>
Co-authored-by: Tim Möhlmann <tim+github@zitadel.com>
2025-08-04 11:24:54 +00:00
Maximilian
f73b2fefd6 docs(inconsistent naming): Organization ID (#10370)
# Which Problems Are Solved

partially #9342

# How the Problems Are Solved

Suggested changes.
"Resource Owner" will remain in a couple of places, since these are
terms that are used in console / APIs.

# Additional Changes


# Additional Context

---------

Co-authored-by: Stefan Benz <46600784+stebenz@users.noreply.github.com>
2025-08-01 11:09:47 +00:00
Marco A.
c6392e175f docs: update roadmap (#10369)
# Which Problems Are Solved

The roadmap page is not up to date with the latest changes that have
been released with Zitadel v4.

# How the Problems Are Solved

Update the doc according to #10309

# Dependencies

- https://github.com/zitadel/zitadel/pull/10249 -> Update the API docs
with deprecated endpoints
- https://github.com/zitadel/zitadel/pull/10364 -> Actions v2 beta to v2

# Additional Context

- Closes #10309
2025-08-01 10:27:26 +00:00
Gayathri Vijayan
00b0af4368 fix(saml): use transient mapping attribute when nameID is missing in saml response (#10353)
# Which Problems Are Solved

In the SAML responses from some IDPs (e.g. ADFS and Shibboleth), the
`<NameID>` part could be missing in `<Subject>`, and in some cases, the
`<Subject>` part might be missing as well. This causes Zitadel to fail
the SAML login with the following error message:

```
ID=SAML-EFG32 Message=Errors.Intent.ResponseInvalid
```

# How the Problems Are Solved

This is solved by adding a workaround to accept a transient mapping
attribute when the `NameID` or the `Subject` is missing in the SAML
response. This requires setting the custom transient mapping attribute
in the SAML IDP config in Zitadel, and it should be present in the SAML
response as well.

<img width="639" height="173" alt="image"
src="https://github.com/user-attachments/assets/cbb792f1-aa6c-4b16-ad31-bd126d164eae"
/>


# Additional Changes
N/A

# Additional Context
- Closes #10251
2025-07-31 15:12:26 +00:00
Stefan Benz
4046dd31b4 feat: actions v2 api GA (#10364)
# Which Problems Are Solved

The Actions v2beta API is not yet promoted to GA.

# How the Problems Are Solved

Promote Actions v2Beta API to Actions v2 API.

# Additional Changes

None

# Additional Context

None
2025-07-31 13:09:09 +00:00
Livio Spring
28d70db6ae docs: document service ping configuration and data sent (#10167)
# Which Problems Are Solved

With the introduction of the service ping, we'll send data from all
systems back to a central endpoint for analytics and getting insights
about usage. To make it visible what data is sent and provide the users
an easy way to opt-out, we need a small documentation to tell them what
and how.

# How the Problems Are Solved

Document the service ping including what data is sent and how to opt-out
or configure most important settings.

# Additional Changes

None

# Additional Context

relates to #9869
2025-07-31 10:23:19 +00:00
Elio Bischof
b06e4e2f9c docs(self-hosting): simplify lb example and replace compose example (#9844)
# Which Problems Are Solved

The load balancing compose example uses a dedicated service
`use-new-login` that gives the set up machine user the login role and
requires the v2 login using an instance feature. This is cumbersome and
unnecessary.

# How the Problems Are Solved

- A login client machine user is set up and the token is passed to the
login by using the environment variable ZITADEL_SERVICE_USER_TOKEN_FILE.
- The unnecessary service is removed

# Additional Changes

- Uses the static `MasterkeyNeedsToHave32Characters` master key.
- The load balancing example replaces the previous Docker Compose
example.
- The login uses `network_mode: service:zitadel` so it can access the
zitadel service in the docker network via localhost.
- Uses the docker provider for Traefik.

# Additional Context

- Complements https://github.com/zitadel/zitadel/pull/9496
- Partially closes https://github.com/zitadel/zitadel/issues/10016
- When we release, we should update the image tags to latest, for
example with [this PR](https://github.com/zitadel/zitadel/pull/10249).

---------

Co-authored-by: Tim Möhlmann <tim+github@zitadel.com>
2025-07-31 12:51:38 +03:00
Gayathri Vijayan
6a93950b64 docs: fix the example docs related to set execution api (actions) (#10359)
# Which Problems Are Solved

Fix docs related to Actions V2 SetExecution API
[endpoint](https://zitadel.com/docs/apis/resources/action_service_v2/action-service-set-execution)

# How the Problems Are Solved

The examples are updated

# Additional Changes
N/A

# Additional Context
- Closes #10320
2025-07-31 10:50:17 +02:00
Elio Bischof
dcdea5a4fe fix: fix login image (#10355)
# Which Problems Are Solved

The broken login image is fixed.

# How the Problems Are Solved

The most important learnings from
https://github.com/zitadel/zitadel/pull/10318 are applied:
- Path in entrypoint is fixed: `exec node /runtime/apps/login/server.js`
- .dockerignore is updated so CSS styles are built into the image
- `source: .` is passed to the docker-bake action. Without this,
docker-bake builds from a remote context, which seems to be slow and not
updated on new PR commits. Looks like the bake action uploads an
artifact that [conflicts with the compile
workflow](https://github.com/zitadel/zitadel/actions/runs/16620417216/job/47023478437).
Therefore, a pattern is added to the compile workflow so only relevant
artifacts are selected.
2025-07-31 07:51:26 +00:00
Elio Bischof
3c78abca93 chore: exclude npm packages from go linting (#10345)
# Which Problems Are Solved

Not all NPM packages are excluded from go linting.

# How the Problems Are Solved

Missing exclusions are added.

# Additional Context

Follows-up on #10331

Co-authored-by: Silvan <27845747+adlerhurst@users.noreply.github.com>
2025-07-30 22:47:40 +00:00
elinashoko
82e4466928 docs: deprecate organization v2beta endpoints + remove scim preview notice (#10350)
# Which Problems Are Solved

The documentation API regarding organization v2 beta is not up to date.

The documentation regarding SCIM v2 is not up to date.

# How the Problems Are Solved

- Deprecate the existing v2beta endpoints `CreateOrganization` and
`ListOrganizations` in favour of the v2 counterparst
  - Remove the preview warning from SCIM v2 pages

# Additional Context

- Closes #10311 and #10310

---------

Co-authored-by: Marco Ardizzone <marco@zitadel.com>
2025-07-30 11:41:25 +00:00