Commit Graph
4158 Commits
Author SHA1 Message Date
Livio SpringandGitHub 4e6f68c511 feat(relational): implement session repository (#11109)
# Which Problems Are Solved

As part of going to a relation storage model, we need to implement the
repository for handling sessions and their events.

# How the Problems Are Solved

- Adds a migration step to create the necessary tables and types in the
database.
- Adds the repository implementation for sessions.
- Implements a projection handler for session events to handle the
events written by the old command handlers.
- Updates the `Session` type and `SessionRepository` interface:
  - added `CreatorID`
  - Adjusted `Delete` method to return amount of affected columns
  - Removed sub-repository clumns from the main interface
- Added `CreatorIDCondition`, `ExpirationCondition`, `ExistsFactor` and
`ExistsMetadata`
  - Removed `SetUserAgent`
- Methods of `SessionFactor` and `SessionChallenge` have been made
public
- fixed enumer on `SessionFactorType`
- Adds a `JSON` type to the repository package to easy can JSON columns,
resp. jsonb object inside a property of a `JSONArray` object.
- Adds a `NoChange` interface, which can be implemented to signal that a
`Change` interface implementation is not writing any changes to the
statement builder, e.g. `CTEChange`

# Additional Changes

- Fixes the operators enums. `TextOperations` had wrong comments and
`NumberOperations` additionally also had from comparisons.
- Fixes downgrade of migration step 008.

# Additional Context

- closes https://github.com/zitadel/zitadel/issues/10212
2026-01-06 08:08:11 +01:00
5f34d1af8f chore: forward port organization v2 API changes (#11207)
# Which Problems Are Solved

Recent changes to the v2beta and v2 API of the organization service were
directly merged to the `next` branch and release on v4.x, since the
ongoing move to the relation table, blocked it from being merged into
main.

# How the Problems Are Solved

This PR ports the following changes into main:
- fix(api): correct permission check in organization v2beta service:
https://github.com/zitadel/zitadel/commit/8dcfff97ed52a8b9fc77ecb1f972744f42cff3ed
- fix(actions v1): return org metadata again
(https://github.com/zitadel/zitadel/pull/11040)
- feat(api): move organization api
(https://github.com/zitadel/zitadel/pull/11045)

# Additional Changes

None

# Additional Context

relates to #10772

---------

Co-authored-by: Gayathri Vijayan <[email protected]>
2026-01-05 14:14:01 +00:00
Livio SpringandGitHub 4c8a668585 fix(action): execute without features set (#11271)
# Which Problems Are Solved

A customer noted that one some of their environments actions were never
executed at all.
During the investigation it was discovered, that these systems did not
have any features set.

# How the Problems Are Solved

Fix the `scanAuthzInstance` function to handle queries without features
returned correctly.

# Additional Changes

None

# Additional Context

- reported through support
- requires backport to v4.x and v3.x
2026-01-05 13:50:22 +00:00
9f1119823b fix(login): cleanup server logs (#11195)
Closes #11184

# Which Problems Are Solved

- loginName: This information is already retrievable from the URL
parameters during the authentication flow, so logging it presented no
additional exposure.
- idpIntent: This was being logged to the server console (server-side
logs), so it was never exposed to the client/browser.
These changes simply clean up the server logs to prevent unnecessary
data noise.

# How the Problems Are Solved

- Removed idpIntent logging from 
`apps/login/src/lib/server/idp-intent.ts`
- Removed loginName logging from 
`apps/login/src/lib/server/password.ts`

---------

Co-authored-by: Livio Spring <[email protected]>
2026-01-05 13:46:09 +00:00
Max PeintnerandGitHub 072755f85a fix(login): delete custom request headers when their value is empty (#11263)
# Which Problems Are Solved

The application automatically appends the x-zitadel-public-host header
when a public host is configured. In some deployment scenarios where the
host is determined by default or via other means, sending this header
allows for improper routing or is simply redundant. The existing
CUSTOM_REQUEST_HEADERS configuration only supported adding or
overwriting headers, offering no way to remove headers that were set by
default logic.

# How the Problems Are Solved

Extended the `CUSTOM_REQUEST_HEADERS` handling in `src/lib/zitadel.ts`.
The logic now checks for empty header values. If a header is defined in
`CUSTOM_REQUEST_HEADERS` with an empty value (e.g.,
x-zitadel-public-host:), the interceptor will delete that header from
the request instead of setting it to an empty string. This allows users
to opt-out of default headers via configuration.
2026-01-05 13:44:19 +01:00
Matías RacedoandGitHub ce85d8e8ed docs(guide): Using Prometheus to scrape Zitadel metrics (#11255)
Resolves #6062
2026-01-02 12:58:18 -03:00
Matías RacedoandGitHub 9a29eebd72 docs(guide): OneLogin SAML IdP integration guide (#11257)
Resolves #7280
2026-01-02 09:25:01 -03:00
Matías RacedoandGitHub ee6d66d429 docs(Guides): Add PingFederate SAML IdP guide (#11244)
This solves issue #10545
2025-12-30 17:05:52 -03:00
Max PeintnerandGitHub 7963cdd713 fix(login): enable explicit IDP linking using existing session id (#11225)
Closes #11191 

# Which Problems Are Solved

This PR fixes the IDP linking for accounts with no authentication
method.
We strictly validate session ownership and generate a hash of the
sessionId + the user's fingerprintId cookie. This hash is passed to the
IDP as linkFingerprint.

This PR addtionally addresses TypeScript errors regarding unknown types
in catch blocks within the IDP intent processing logic. It ensures that
errors occurring during IDP linking are safely handled, and that
meaningful error messages are propagated to the client-side redirect
URLs.

# How the Problems Are Solved

- Safely handle unknown errors: Updated catch blocks in
`processIDPCallback` to check if the caught object is an instance of
Error before accessing error.message.
- Fix "IDP Taken" check: Implemented a safe check for the gRPC error
code 6 (Already Exists) by casting the error, resolving the Property
'code' does not exist on type 'unknown' build error.
- Error Propagation: The specific error message is now passed to the
linking-failed page params, allowing for better user feedback instead of
generic errors.
2025-12-30 14:32:37 +00:00
Gayathri VijayanandGitHub d9ecaec6bb fix: typo in setting LoginPolicy.IgnoreUnknownUsernames config (#11243)
# Which Problems Are Solved
The config `DefaultInstance.LoginPolicy.IgnoreUnknownUsernames` is
ignored during application start.

# How the Problems Are Solved
Fix the typo in the field name `IgnoreUnknownUsernames` associated with
the config used while unmarshaling.
Previously: `IgnoreUnknownUsername` 

# Additional Changes
N/A

# Additional Context
- Closes https://github.com/zitadel/zitadel/issues/11007
2025-12-30 11:33:41 +01:00
RamonandGitHub 02f24b2e98 fix: inconsistent user creation v2 radio buttons #11092 (#11208)
# Which Problems Are Solved
Radio buttons in the User V2 creation form were unresponsive when
clicking directly on the radio button itself, only clicking on the label
text worked.

# How the Problems Are Solved
The app-auth-method-radio-theme mixin had a global input[type='radio']
selector that hid all radio inputs application-wide, breaking Angular
Material's mat-radio-button components. The selector is now scoped to
.auth-method-radio-button-wrapper so it only affects the intended
component.

# Additional Context
- Closes #11092
2025-12-30 11:03:15 +01:00
4489ffb82e fix(console): accept localhost redirect URIs without path nor port (#11001)
<!--
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

Some native OIDC applications use localhost without a path as redirect
URI. Currently, setting http://localhost as a redirect URI leads to a
compliance warning (Redirect URIs must begin with your own protocol,
http://127.0.0.1, http://[::1] or http://localhost.), while
http://localhost/some/path and http://localhost:some-port are accepted).

# How the Problems Are Solved

This PR parses the redirect URI instead of using prefix check to test if
hostname part is localhost, 127.0.0.1 or [::1] (IPv6 addresses are
canonicalized during parsing).

# Additional Context

This PR is a follow-up of https://github.com/zitadel/zitadel/pull/10836.

Signed-off-by: Yann Soubeyrand <[email protected]>
Co-authored-by: Ramon <[email protected]>
2025-12-30 10:53:04 +01:00
740669a4bd docs: remove out-dated / incorrect beta labels (#11211)
# Which Problems Are Solved

Some features moved from Beta to GA in V4, are still labeled as beta in
the docs and APIs refer to the now deprecated beta endpoints.

# How the Problems Are Solved

- remove the beta labels from webkeys, login v2, actions v2
- change example calls and API reference to v2 (instead of v2beta)

# Additional Changes

fixed typo in the web keys title (Oauth2 -> OAuth2)

# Additional Context

- Organization service v2(beta) is solved in
https://github.com/zitadel/zitadel/pull/11207
- relates to #10772

---------

Co-authored-by: Gayathri Vijayan <[email protected]>
Co-authored-by: Copilot <[email protected]>
2025-12-29 16:46:02 +00:00
Federico CoppedeandGitHub 8a0580b358 docs: fix deprecated label for actions v2 (#11242)
Removed deprecated label for Action V2 endpoints and removed Beta label
also. Fixed actions V2 domain endpoint (v2 instead of v2beta)
2025-12-29 17:26:49 +01:00
Federico CoppedeandGitHub 941c446443 docs: remove typos (#11240)
removed typos from the doc pages
Fixes: #11234
2025-12-29 13:51:03 +00:00
791d0587aa feat(action v2): add JWT and JWE payload type options (#11196)
# Which Problems Are Solved

The payload in actions V2 is currently sent as JSON to the target
endpoint. It might get exposed to intermediary infrastructure or logging
systems.
For these scenarios there needs to be an application-layer encryption,
where the provider of the endpoint can define an key to be used for the
encryption.

# How the Problems Are Solved

- Added an additional option to the target to specify the payload type:
`JSON` (current and default), `JWT`, `JWE` (api and console)
- added endpoints to upload and manage public keys (to be used for
encryption) for a target
- updated all action v2 executions (interceptors, oidc, saml, ...) to
provide the `GetActiveSigningWebKey` from queries
- implemented jwt and jwe in the exections incl. refactoring of code and
tests
- changes to the authn_keys table:
  - added a `fingerprint` column
  - dropped not null constraint on expiration
- moved the `GetSignerOnce` into its own package to prevent circular
dependencies

# Additional Changes

None

# Additional Context

closes #11061

---------

Co-authored-by: Marco A. <[email protected]>
Co-authored-by: conblem <[email protected]>
Co-authored-by: Silvan <[email protected]>
2025-12-29 13:35:53 +00:00
Livio SpringandGitHub 72c8f0192c test: fix SAML integration tests (#11241)
# Which Problems Are Solved

Some SAML integration tests used a hardcoded certificate, which expired
on the 25th December 2025.

# How the Problems Are Solved

Added helper functions to the integration package to create and store a
private key and certificate for SAML, which can be used in SAML SP/IDP
integration tests.

# Additional Changes

none

# Additional Context

- noted on #11196
- requires backport to at least v4.x
2025-12-29 13:08:37 +00:00
Federico CoppedeandGitHub 03916cd0f2 docs: create guide for generic OIDC IDP (#11233)
Fixes #7191
2025-12-26 15:40:21 -03:00
Federico CoppedeandGitHub 15e89078da docs: update private key jwt for token instrospection (#11227)
The current document for private key JWT is misleading, as it currently
looks like a mechanism to secure an API, and it's not, this section only
shows how to use private key JWT to call the introspect endpoint
2025-12-24 20:41:48 +00:00
Federico CoppedeandGitHub e93ff33167 docs: update JWT IDP doc (#11230)
This PR provides additional clarification to the steps needed to
configure a JWT IDP in Zitadel
Fixes #7646
2025-12-24 20:38:15 +00:00
0bbc95dd1d docs: update PublicKeyCacheMaxAge and DefaultBackChannelLogoutLifetime description (#11229)
<!--
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

Update the description for `PublicKeyCacheMaxAge` and
`DefaultBackChannelLogoutLifetime`

Fixes https://github.com/zitadel/zitadel/issues/10739

Co-authored-by: Rajat Singh <[email protected]>
2025-12-24 16:04:26 -03:00
Gayathri VijayanandGitHub d14d1df529 docs: update MockSAML IDP documentation (#11226)
# Which Problems Are Solved

The current documentation on setting up a MockSAML IDP is
unclear/incomplete, and doesn't work with Login V2.

# How the Problems Are Solved

- Add a new section that explains mapping of MockSAML attributes to
Zitadel user fields (using Actions V2) in case of Login V2
- Update the Actions V1 script used to prefill user data in case of
Login V1

# Additional Changes

N/A

# Additional Context
- Related to https://github.com/zitadel/zitadel/issues/11078
2025-12-24 09:38:17 +01:00
Federico CoppedeandGitHub 3a2eb96e82 docs: update account linking misleading doc (#11223)
According to this
[doc](https://zitadel.com/docs/concepts/features/account-linking), I
should be able to select if I want to authenticate with the local or
external account.

<img width="720" height="119" alt="image"
src="https://github.com/user-attachments/assets/163d44e0-39a0-462c-8beb-fd3de8b543d5"
/>

This is not accurate.

Fixes #10161
2025-12-23 15:32:40 +00:00
Federico CoppedeandGitHub faefeaa53c docs: update actions V2 landing page (#11220)
Updated wording on the Actions V2 landing page and added a reference to
the sample scripts repository we have to deploy Actions for various use
cases to Cloudflare Workers.

Fixes #11028
2025-12-23 12:28:54 +00:00
Federico CoppedeandGitHub 3106dcfc67 docs: update database configuration page (#11219) 2025-12-22 17:08:12 +01:00
c9b89b97ab feat(login): Add Dutch (nl) locale (#11139)
# Which Problems Are Solved

* Missing Dutch (nl) translations in the login UI v2.

# How the Problems Are Solved

* Adds nl.json with Dutch translations.
* The same data is added to v2-default.json, because otherwise English
was overriding nl.json content.
* Adds Dutch to the language dropdown in somewhat alphabetical order.

# Additional Changes

None.

# Additional Context

None.

---------

Co-authored-by: thomas-swennenhuis <[email protected]>
2025-12-22 12:38:02 +00:00
Gayathri VijayanandGitHub af8deb1145 fix(authorizations): flaky integration tests (#11215)
# Which Problems Are Solved

Flaky integration tests related to authorizations RT.

# How the Problems Are Solved

By setting the `created_at` and `updated_at` timestamps based on event
timestamps while creating an authorization.

# Additional Changes
N/A
# Additional Context

https://cloud.nx.app/runs/ICj84SxEf0/task/%40zitadel%2Fapi%3Atest-integration
2025-12-22 09:41:01 +01:00
Gayathri VijayanandGitHub 7c01deb8ed fix(authorizations): comment out timestamp assertions (#11214)
# Which Problems Are Solved

Comment out timestamp assertions to temporarily unblock CI pipeline

# How the Problems Are Solved

Comment out timestamp assertions to temporarily unblock CI pipeline

# Additional Changes

N/A

# Additional Context
2025-12-19 15:37:44 +01:00
f7aa9810ee fix(i18n): fix typos in MustBeMemoryOfOrg strings (#11085)
# Which Problems Are Solved

Strings previously were:
- The user must **be member** of the {{.OrgName}} organization.

Fixed the grammar mistake / typo and it's now:
- The user must **be a member** of the {{.OrgName}} organization.

Co-authored-by: Wim Van Laer <[email protected]>
2025-12-19 13:42:23 +00:00
8472c7683d feat(rt): authorizations (#11066)
# Which Problems Are Solved

This PR implements relational table and repository interface for the
authorizations feature as described in
https://github.com/zitadel/zitadel/issues/10767

# How the Problems Are Solved

By
* adding new `zitadel.authorizations` and `zitadel.authorization_roles`
tables
* implementing the `AuthorizationRepository` interface to create,
update, query, and delete user authorizations and roles
* implementing `authorization_relational.go` projection to update
`zitadel.authorizations` and `zitadel.authorization_roles` tables based
on events

# Additional Changes
N/A

# Additional Context
- Closes #10767

---------

Co-authored-by: Livio Spring <[email protected]>
2025-12-19 07:03:27 +01:00
Federico CoppedeandGitHub 11cf2c252a chore(ux): Fix wording for application ID token settings (#11210)
When this checkbox is enabled, the user profile information (not the
roles assigned) will be returned as claims in the ID token. The current
wording is not accurate.
2025-12-18 18:13:18 +00:00
c9835afd39 chore(api): fix Zitadel typo (#11128)
# Which Problems Are Solved

ZITADEL is wrongly spelled like "ZITADLE" in the description of the GRPC
`zitadel.admin.v1.AdminService/Healthz` endpoint.

# How the Problems Are Solved

Fixed the spelling error.

# Additional Changes

None.

# Additional Context

None.

Co-authored-by: elinashoko <[email protected]>
2025-12-18 10:21:49 +00:00
80c4325799 docs(proxy_guide_tls_mode): sentence spacing (#11074)
# Which Problems Are Solved

add missing period and space before new sentence.

# How the Problems Are Solved

- add missing period and space before new sentence.

# Additional Changes

- no other changes

# Additional Context

- no related issues

Co-authored-by: Wim Van Laer <[email protected]>
2025-12-18 11:18:48 +01:00
Wim Van LaerandGitHub 1ce8bcbd78 fix: id token had no lifetime for client credentials (#11204)
# Which Problems Are Solved

- ID-token had no lifetime when a token was requested using the
`client_credentials` grant

# How the Problems Are Solved

- Take use the lifetime provided by the server.

# Additional Context

- Closes #11060
2025-12-17 13:39:55 +01:00
b339a3e696 feat: instance domain APIs with relational tables (#11051)
# Which Problems Are Solved

This PR implements the endpoints listed in
https://github.com/zitadel/zitadel/issues/10444 .

# How the Problems Are Solved

The implementation follows the same pattern as the Instance one. The
`Add` and `Remove` are implementing the `Commander` interface, while
`List` Domains endpoints are implementing the `Querier` interace.

The PR adds also some forgotten calls to the relational logic for the
Instance API. The commits are identifiable by the label `instance:`
prepended to them. This is the complete list: bafce01b0 , 6fe7257ab ,
e27bc9c34 , 8133ede73 , fde667953 , a3e1135ed , ee1a6f9c1

# Additional Context

- Closes #10444

---------

Co-authored-by: Elio Bischof <[email protected]>
Co-authored-by: Lebogang Phoshoko <[email protected]>
Co-authored-by: Wim Van Laer <[email protected]>
Co-authored-by: Max Peintner <[email protected]>
Co-authored-by: Gayathri Vijayan <[email protected]>
2025-12-17 12:01:09 +01:00
Livio SpringandGitHub d79bfe6eba fix(login v1): update password verification handling (#11202)
# Which Problems Are Solved

Failed password attempts in login V1 potentially created new session
entries.

# How the Problems Are Solved

Correct handling to only update existing sessions.

# Additional Changes

None

# Additional Context

- reported through support
- requires backport to v4.x
2025-12-17 09:23:54 +01:00
5a7136fe67 docs: Disable emoji rendering (#10994)
# Which Problems Are Solved

We had to wrap reserved scopes like
`urn:zitadel:iam:org:id:178204173316174381` in a code block, because
Docusaurus was rendering 🆔 as emoji.

# How the Problems Are Solved

Update Docusaurus to 3.9.2. and disable the emoji rendering in markdown
files.

# Additional Changes


# Additional Context

Co-authored-by: Florian Forster <[email protected]>
2025-12-16 18:55:26 +00:00
82c774dab3 feat(languages): add French localization (#11050)
# Which Problems Are Solved

Previous login app had french localization and the new app doesn't have
it anymore. It simply re-add this missing locale.

# How the Problems Are Solved

Simply add french localization.

# Additional Changes

None

# Additional Context

I don't know how to add it by default in backend, i will happily make
the changes for adding by default this langage.

Co-authored-by: Marco A. <[email protected]>
Co-authored-by: Wim Van Laer <[email protected]>
2025-12-16 16:35:14 +01:00
Max PeintnerandGitHub 9bbf0096b6 fix: update pnpm, react, react-dom (#11197)
Closes #11192 

# Which Problems Are Solved

Update pnpm, react and react-dom to the latest version

# How the Problems Are Solved

the version references are updated as part of the package.json files
2025-12-16 15:04:31 +00:00
ef593e2e05 docs: update broken reference links (#10888)
# Which Problems Are Solved

- Broken links that the NextJs frontend quickstart guide uses to refer
to the files in the example application.

# How the Problems Are Solved

- Links are updated
- The mentioned file paths are adapted to match the existing file
structure

# Additional Changes


# Additional Context

- [NextJs Frontend Quickstart
Guide](https://zitadel.com/docs/examples/login/nextjs)
- [Example Application](https://github.com/zitadel/zitadel-nextjs)

Co-authored-by: Wim Van Laer <[email protected]>
2025-12-16 14:53:28 +01:00
Mohamed TammamandGitHub 7faeb3ba03 Fix formatting of Back-End API Communication section (#11008)
Removed unnecessary space before 'Back-End API Communication' heading
for consistency.
2025-12-16 09:06:19 +00:00
2221b5ef74 fix(login): CVE-2025-55184 and CVE-2025-55183, update next (#11179)
# Which Problems Are Solved

Updates `next` to version `15.5.9` to address the following security
vulnerabilities:

- **CVE-2025-55184**
- **CVE-2025-55183**

# How the Problems Are Solved

- Bump `next` from `15.5.7` to `15.5.9` in `apps/login/package.json`

---------

Co-authored-by: PhenixH <[email protected]>
2025-12-12 13:01:05 +01:00
aafc15b8c3 fix: [CVE-2025-55182] [CVE-2025-66478] Quick update react and Nextjs for #11140 (#11143)
# Which Problems Are Solved

Temporary update of nextjs and react to fix major CVE (described #11140)

Build passing and force dependency for old deps, but we will need to
update packages (I update qrcode-react, minimal impact, not feasible for
react-hook-form which needs more work).

# How the Problems Are Solved

Upgrade dependencies to patched version of the same major and minor,
remove experimental flag dynamicIO and added flag useCache (used in
code)

# Additional Changes



# Additional Context

- https://nextjs.org/blog/CVE-2025-66478 
-
https://react.dev/blog/2025/12/03/critical-security-vulnerability-in-react-server-components

Co-authored-by: Max Peintner <[email protected]>
2025-12-12 10:30:49 +00:00
SilvanandGitHub 1b54a9eb05 fix(setup): member role synchronization execution check (#11180)
The change was introduced in
https://github.com/zitadel/zitadel/pull/11178.
The fix is to prevent wiping the memberships because the projection did
not init yet.

### Changes
- Introduces a check to determine if the member role synchronization
should be executed based on the existence of a specific database table
(`projections.instance_members4`).
- Ensures that the synchronization process only runs if the required
table is present in the database.
2025-12-12 10:09:03 +00:00
58612a6ef7 fix(fields): sync membership roles from projections (#11178)
# Which Problems Are Solved

Zitadel v4.7.2 fixed a security issue by switching to the permission v2
framework for user APIs. It appears that systems that are running since
before v2.68 that were affected by a precision bug in the eventstore,
which was fixed in that version. The precision bug results in certain
events being "skipped" while being projected into the fields table, used
by the new permission system. This caused certain membership roles to be
missing, resulting in empty user lists when executed by the affected
member. The permission system basically finds no matching memberships
and therefore returns no users at all.


# How the Problems Are Solved

After research we concluded that the legacy membership projections are
projected correctly. This PR synchronizes the projected state into the
fields table. As the membership roles are not marked unique, all rows
are first deleted and then the correct membership roles are then
inserted. The operation happens in a single transaction, during which
the fields table will remain locked for modifications. This to prevent
possible concurrent modifications to membership states.

# Additional Changes

- none

# Additional Context

- Introduced in
https://github.com/zitadel/zitadel/commit/0e17d0005a98ccbf92139961ef702ef03208ffd3
- Released in
[v4.7.2](https://github.com/zitadel/zitadel/releases/tag/v4.7.2)
- Related: https://github.com/zitadel/zitadel/issues/8863

---------

Co-authored-by: Silvan <[email protected]>
2025-12-12 09:09:09 +01:00
Tim MöhlmannandGitHub d2d85bd30e fix(email): accept SMTPUTF8 addresses (#11115)
# Which Problems Are Solved

Zitadel only accepted ASCII email addresses, while some users need to
enter internationalized addresses. For example `mö[email protected]`

# How the Problems Are Solved

- Use `net/mail` to validate email addresses, instead of a custom regex.
`net/mail` correctly accepts UTF-8 characters.
- In the management/v1 API email address validation is removed (only
string limits are applied)

# Additional Changes

- none

# Additional Context

Closes https://github.com/zitadel/zitadel/issues/9821
2025-12-11 22:59:13 +00:00
41cdc7805f feat(i18n): add Ukrainian language support (#10696)
## Summary
  - Add comprehensive Ukrainian language support to ZITADEL
  - Complete translation of all user-facing interfaces
  - Integration with existing language configuration system

  ## Changes Made
- ✅ **Console translations**: Complete Ukrainian translation for admin
console (2,861 translated strings)
- ✅ **Login interface**: Ukrainian translations for authentication flows
(535 strings)
- ✅ **Email notifications**: Ukrainian translations for system emails
(68 strings)
- ✅ **Common texts**: Ukrainian translations for success/error messages
(1,417 strings)
- ✅ **Language configuration**: Added Ukrainian to supported languages
and Angular locale registration
- ✅ **UI integration**: Added Ukrainian option to language selection
forms

  ## Translation Quality
  - Professional translations using established Ukrainian IT terminology
  - Formal language appropriate for business software
- Consistent terminology across all components (Users→Користувачі,
Organization→Організація, etc.)
  - Preserved all technical placeholders, HTML tags, and formatting

  ## Contributing Guidelines Compliance
  - ✅ Followed semantic commit message format
  - ✅ Added Ukrainian to all required configuration files
  - ✅ Maintained consistent file structure with existing languages
  - ✅ Used formal Ukrainian appropriate for business software

The Ukrainian translation is now ready for review by the ZITADEL team! 🚀

---------

Co-authored-by: Marco A. <[email protected]>
2025-12-11 15:37:31 +01:00
3903355d18 feat(settings): add secret generator type to settings RT implementation (#11152)
# Which Problems Are Solved

The `SecretGenerators` setting is missing among the instance settings in
the new relational model.

# How the Problems Are Solved

This PR adds:
* `SettingTypeSecretGenerator` type to the settings model
* `SecretGeneratorSettingsRepository` and
`secretGeneratorSettingsJSONChanges` interfaces to set, retrieve, and
delete `secret_generator` settings, and corresponding unit tests.
* projection reducers to reduce the following events:
  * `SecretGeneratorAddedEvent`
  * `SecretGeneratorChangedEvent`
  * `SecretGeneratorRemovedEvent`
* integration tests to test that the events get reduced correctly 

# Additional Changes
N/A

# Additional Context
- Part of https://github.com/zitadel/zitadel/issues/10207

---------

Co-authored-by: Copilot <[email protected]>
Co-authored-by: Marco A. <[email protected]>
2025-12-11 12:33:19 +01:00
826039c620 Merge commit from fork
* Force v2 permission checks on user listing

* Remove duplicated tests

* cleanup and fix tests

---------

Co-authored-by: Livio Spring <[email protected]>
2025-12-10 13:13:56 +01:00
Livio SpringandGitHub dfe064f902 fix(login): fix back button on 2fa screen to allow username change (#11125)
# Which Problems Are Solved

As reported to support, the back button on the various 2FA pages in
login V1 opened the default redirect URI, which likely started a new
auth request (e.g. from Console).

# How the Problems Are Solved

Change the back buttons to navigate to the login screen again, where a
user can change the username.
Additionally, the back button has been added to the U2F verification
screen.

# Additional Changes

None

# Additional Context

- from support
- backport to v4
2025-12-09 12:37:26 +00:00