feat: SMTP xoauth2 in console (#11545)

# Which Problems Are Solved
This adds the newly added xoauth2 option to the console allowing SMTP
Providers to be setup that use xoauth2 instead of plain auth.

# How the Problems Are Solved
Added the xoauth2 option to the SMTP Provider Settings


# Additional Changes
Heavily refactored the SMTP Provider page to allow more dynamic
configuration and use Tanstack Query for Data Fetching.

# Additional Context
- Closes #11451
- Backend changes #11239
This commit is contained in:
Ramon
2026-02-11 17:12:41 +00:00
committed by GitHub
parent cc7a6145f1
commit ceffb9c536
13 changed files with 975 additions and 869 deletions
@@ -36,19 +36,19 @@ describe('instance notifications', () => {
cy.get<SMTPProvider>('@provider').then((provider) => {
cy.visit(smtpPath);
cy.get(`a:contains('Mailgun')`).click();
cy.get('[formcontrolname="description"]').should('be.enabled').clear().type(provider.description);
cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587');
cy.get('[formcontrolname="user"]').should('be.enabled').clear().type('[email protected]');
cy.get('[formcontrolname="password"]').should('be.enabled').clear().type('password');
cy.get('input[name="description"]').should('be.enabled').clear().type(provider.description);
cy.get('input[name="hostAndPort"]').should('have.value', 'smtp.mailgun.org:465');
cy.get('input[name="smtp-user"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="smtp-password"]').should('be.enabled').clear().type('password');
cy.get('[data-e2e="continue-to-2nd-form"]').should('be.enabled').click();
cy.get('[formcontrolname="senderAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('[formcontrolname="senderName"]').should('be.enabled').clear().type('Test1');
cy.get('[formcontrolname="replyToAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="senderAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="senderName"]').should('be.enabled').clear().type('Test1');
cy.get('input[name="senderReplyToAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('[data-e2e="continue-button"]').should('be.enabled').click();
cy.get('[data-e2e="create-button"]').should('be.enabled').click();
cy.shouldConfirmSuccess();
cy.get('[data-e2e="close-button"]').should('be.enabled').click();
cy.get(provider.rowSelector).contains('smtp.mailgun.org:587');
cy.get(provider.rowSelector).contains('smtp.mailgun.org:465');
cy.get(provider.rowSelector).contains('[email protected]');
});
});
@@ -57,14 +57,14 @@ describe('instance notifications', () => {
cy.get<SMTPProvider>('@provider').then((provider) => {
cy.visit(smtpPath);
cy.get(`a:contains('Mailgun')`).click();
cy.get('[formcontrolname="description"]').should('be.enabled').clear().type(provider.description);
cy.get('[formcontrolname="hostAndPort"]').should('have.value', 'smtp.mailgun.org:587');
cy.get('[formcontrolname="user"]').should('be.enabled').clear().type('[email protected]');
cy.get('[formcontrolname="password"]').should('be.enabled').clear().type('password');
cy.get('input[name="description"]').should('be.enabled').clear().type(provider.description);
cy.get('input[name="hostAndPort"]').should('have.value', 'smtp.mailgun.org:465');
cy.get('input[name="smtp-user"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="smtp-password"]').should('be.enabled').clear().type('password');
cy.get('[data-e2e="continue-to-2nd-form"]').should('be.enabled').click();
cy.get('[formcontrolname="senderAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('[formcontrolname="senderName"]').should('be.enabled').clear().type('Test1');
cy.get('[formcontrolname="replyToAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="senderAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="senderName"]').should('be.enabled').clear().type('Test1');
cy.get('input[name="senderReplyToAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('[data-e2e="continue-button"]').should('be.enabled').click();
cy.get('[data-e2e="create-button"]').click();
cy.shouldConfirmSuccess();
@@ -72,7 +72,7 @@ describe('instance notifications', () => {
cy.shouldConfirmSuccess();
cy.get('[data-e2e="close-button"]').click();
cy.get(provider.rowSelector).find('[data-e2e="active-provider"]');
cy.get(provider.rowSelector).contains('smtp.mailgun.org:587');
cy.get(provider.rowSelector).contains('smtp.mailgun.org:465');
cy.get(provider.rowSelector).contains('[email protected]');
});
});
@@ -91,8 +91,8 @@ describe('instance notifications', () => {
cy.get<SMTPProvider>('@provider').then(({ rowSelector }) => {
cy.get(rowSelector).click();
cy.get('[data-e2e="continue-to-2nd-form"]').click();
cy.get('[formcontrolname="senderAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('[formcontrolname="senderName"]').clear().type('Change1');
cy.get('input[name="senderAddress"]').should('be.enabled').clear().type('[email protected]');
cy.get('input[name="senderName"]').clear().type('Change1');
cy.get('[data-e2e="continue-button"]').click();
cy.get('[data-e2e="create-button"]').click();
cy.shouldConfirmSuccess();
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"implicitDependencies": ["@zitadel/api"],
"implicitDependencies": ["@zitadel/api", "@zitadel/console"],
"targets": {
"run-db": {
"continuous": true,