fix(email-validation): validation email cross workspace (#11261)

- Finish removing captcha guard from validation  email
- Fix an issue where domain validation wasn't working on a multi-domain
setup
This commit is contained in:
Antoine Moreaux
2025-04-02 10:06:34 +02:00
committed by GitHub
parent 44d4e4efaf
commit 44bf393b06
16 changed files with 102 additions and 82 deletions

View File

@ -52,6 +52,7 @@ import { UserAuthGuard } from 'src/engine/guards/user-auth.guard';
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
import { SettingPermissionType } from 'src/engine/metadata-modules/permissions/constants/setting-permission-type.constants';
import { PermissionsGraphqlApiExceptionFilter } from 'src/engine/metadata-modules/permissions/utils/permissions-graphql-api-exception.filter';
import { GetLoginTokenFromEmailVerificationTokenOutput } from 'src/engine/core-modules/auth/dto/get-login-token-from-email-verification-token.output';
import { GetAuthTokensFromLoginTokenInput } from './dto/get-auth-tokens-from-login-token.input';
import { GetLoginTokenFromCredentialsInput } from './dto/get-login-token-from-credentials.input';
@ -155,7 +156,7 @@ export class AuthResolver {
return { loginToken };
}
@Mutation(() => LoginToken)
@Mutation(() => GetLoginTokenFromEmailVerificationTokenOutput)
async getLoginTokenFromEmailVerificationToken(
@Args()
getLoginTokenFromEmailVerificationTokenInput: GetLoginTokenFromEmailVerificationTokenInput,
@ -179,7 +180,9 @@ export class AuthResolver {
workspace.id,
);
return { loginToken };
const workspaceUrls = this.domainManagerService.getWorkspaceUrls(workspace);
return { loginToken, workspaceUrls };
}
@UseGuards(CaptchaGuard)

View File

@ -7,7 +7,7 @@ import {
IdentityProviderType,
SSOIdentityProviderStatus,
} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity';
import { workspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
import { WorkspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
@ObjectType()
class SSOConnection {
@ -35,8 +35,8 @@ export class AvailableWorkspaceOutput {
@Field(() => String, { nullable: true })
displayName?: string;
@Field(() => workspaceUrls)
workspaceUrls: workspaceUrls;
@Field(() => WorkspaceUrls)
workspaceUrls: WorkspaceUrls;
@Field(() => String, { nullable: true })
logo?: string;

View File

@ -0,0 +1,14 @@
import { Field, ObjectType } from '@nestjs/graphql';
import { WorkspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
import { AuthToken } from './token.entity';
@ObjectType()
export class GetLoginTokenFromEmailVerificationTokenOutput {
@Field(() => AuthToken)
loginToken: AuthToken;
@Field(() => WorkspaceUrls)
workspaceUrls: WorkspaceUrls;
}

View File

@ -5,7 +5,7 @@ import {
IdentityProviderType,
SSOIdentityProviderStatus,
} from 'src/engine/core-modules/sso/workspace-sso-identity-provider.entity';
import { workspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
import { WorkspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
@ObjectType()
export class SSOIdentityProvider {
@ -57,6 +57,6 @@ export class PublicWorkspaceDataOutput {
@Field(() => String, { nullable: true })
displayName: Workspace['displayName'];
@Field(() => workspaceUrls)
workspaceUrls: workspaceUrls;
@Field(() => WorkspaceUrls)
workspaceUrls: WorkspaceUrls;
}

View File

@ -1,11 +1,11 @@
import { Field, ObjectType } from '@nestjs/graphql';
import { workspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
import { WorkspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
@ObjectType()
export class WorkspaceUrlsAndId {
@Field(() => workspaceUrls)
workspaceUrls: workspaceUrls;
@Field(() => WorkspaceUrls)
workspaceUrls: WorkspaceUrls;
@Field()
id: string;

View File

@ -1,7 +1,7 @@
import { ObjectType, Field } from '@nestjs/graphql';
@ObjectType()
export class workspaceUrls {
export class WorkspaceUrls {
@Field(() => String, { nullable: true })
customUrl?: string;

View File

@ -35,7 +35,7 @@ import {
PublicWorkspaceDataOutput,
} from 'src/engine/core-modules/workspace/dtos/public-workspace-data-output';
import { UpdateWorkspaceInput } from 'src/engine/core-modules/workspace/dtos/update-workspace-input';
import { workspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
import { WorkspaceUrls } from 'src/engine/core-modules/workspace/dtos/workspace-urls.dto';
import { getAuthProvidersByWorkspace } from 'src/engine/core-modules/workspace/utils/get-auth-providers-by-workspace.util';
import { workspaceGraphqlApiExceptionHandler } from 'src/engine/core-modules/workspace/utils/workspace-graphql-api-exception-handler.util';
import { workspaceValidator } from 'src/engine/core-modules/workspace/workspace.validate';
@ -251,7 +251,7 @@ export class WorkspaceResolver {
return isDefined(this.environmentService.get('ENTERPRISE_KEY'));
}
@ResolveField(() => workspaceUrls)
@ResolveField(() => WorkspaceUrls)
workspaceUrls(@Parent() workspace: Workspace) {
return this.domainManagerService.getWorkspaceUrls(workspace);
}