fix(): remove originHeader decorator (#12245)

Fix
https://github.com/twentyhq/core-team-issues/issues/858#issuecomment-2891213392
Fix #11966 
Fix #12175
This commit is contained in:
Antoine Moreaux
2025-05-23 18:01:36 +02:00
committed by GitHub
parent 54edcc0ea7
commit 8de85eea61
20 changed files with 98 additions and 62 deletions

View File

@ -1235,6 +1235,7 @@ export type MutationGenerateApiKeyTokenArgs = {
export type MutationGetAuthTokensFromLoginTokenArgs = {
loginToken: Scalars['String']['input'];
origin: Scalars['String']['input'];
};
@ -1246,6 +1247,7 @@ export type MutationGetAuthorizationUrlForSsoArgs = {
export type MutationGetLoginTokenFromCredentialsArgs = {
captchaToken?: InputMaybe<Scalars['String']['input']>;
email: Scalars['String']['input'];
origin: Scalars['String']['input'];
password: Scalars['String']['input'];
};
@ -1253,6 +1255,7 @@ export type MutationGetLoginTokenFromCredentialsArgs = {
export type MutationGetLoginTokenFromEmailVerificationTokenArgs = {
captchaToken?: InputMaybe<Scalars['String']['input']>;
emailVerificationToken: Scalars['String']['input'];
origin: Scalars['String']['input'];
};
@ -1274,6 +1277,7 @@ export type MutationRenewTokenArgs = {
export type MutationResendEmailVerificationTokenArgs = {
email: Scalars['String']['input'];
origin: Scalars['String']['input'];
};
@ -1761,6 +1765,11 @@ export type QueryGetIndicatorHealthStatusArgs = {
};
export type QueryGetPublicWorkspaceDataByDomainArgs = {
origin: Scalars['String']['input'];
};
export type QueryGetQueueMetricsArgs = {
queueName: Scalars['String']['input'];
timeRange?: InputMaybe<QueueMetricsTimeRange>;

View File

@ -1110,6 +1110,7 @@ export type MutationGenerateApiKeyTokenArgs = {
export type MutationGetAuthTokensFromLoginTokenArgs = {
loginToken: Scalars['String'];
origin: Scalars['String'];
};
@ -1121,6 +1122,7 @@ export type MutationGetAuthorizationUrlForSsoArgs = {
export type MutationGetLoginTokenFromCredentialsArgs = {
captchaToken?: InputMaybe<Scalars['String']>;
email: Scalars['String'];
origin: Scalars['String'];
password: Scalars['String'];
};
@ -1128,6 +1130,7 @@ export type MutationGetLoginTokenFromCredentialsArgs = {
export type MutationGetLoginTokenFromEmailVerificationTokenArgs = {
captchaToken?: InputMaybe<Scalars['String']>;
emailVerificationToken: Scalars['String'];
origin: Scalars['String'];
};
@ -1149,6 +1152,7 @@ export type MutationRenewTokenArgs = {
export type MutationResendEmailVerificationTokenArgs = {
email: Scalars['String'];
origin: Scalars['String'];
};
@ -1586,6 +1590,11 @@ export type QueryGetIndicatorHealthStatusArgs = {
};
export type QueryGetPublicWorkspaceDataByDomainArgs = {
origin: Scalars['String'];
};
export type QueryGetQueueMetricsArgs = {
queueName: Scalars['String'];
timeRange?: InputMaybe<QueueMetricsTimeRange>;
@ -2592,6 +2601,7 @@ export type GenerateTransientTokenMutation = { __typename?: 'Mutation', generate
export type GetAuthTokensFromLoginTokenMutationVariables = Exact<{
loginToken: Scalars['String'];
origin: Scalars['String'];
}>;
@ -2608,6 +2618,7 @@ export type GetLoginTokenFromCredentialsMutationVariables = Exact<{
email: Scalars['String'];
password: Scalars['String'];
captchaToken?: InputMaybe<Scalars['String']>;
origin: Scalars['String'];
}>;
@ -2616,6 +2627,7 @@ export type GetLoginTokenFromCredentialsMutation = { __typename?: 'Mutation', ge
export type GetLoginTokenFromEmailVerificationTokenMutationVariables = Exact<{
emailVerificationToken: Scalars['String'];
captchaToken?: InputMaybe<Scalars['String']>;
origin: Scalars['String'];
}>;
@ -2638,6 +2650,7 @@ export type RenewTokenMutation = { __typename?: 'Mutation', renewToken: { __type
export type ResendEmailVerificationTokenMutationVariables = Exact<{
email: Scalars['String'];
origin: Scalars['String'];
}>;
@ -2677,7 +2690,9 @@ export type CheckUserExistsQueryVariables = Exact<{
export type CheckUserExistsQuery = { __typename?: 'Query', checkUserExists: { __typename: 'UserExists', exists: boolean, isEmailVerified: boolean, availableWorkspaces: Array<{ __typename?: 'AvailableWorkspaceOutput', id: string, displayName?: string | null, logo?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, sso: Array<{ __typename?: 'SSOConnection', type: IdentityProviderType, id: string, issuer: string, name: string, status: SsoIdentityProviderStatus }> }> } | { __typename: 'UserNotExists', exists: boolean } };
export type GetPublicWorkspaceDataByDomainQueryVariables = Exact<{ [key: string]: never; }>;
export type GetPublicWorkspaceDataByDomainQueryVariables = Exact<{
origin: Scalars['String'];
}>;
export type GetPublicWorkspaceDataByDomainQuery = { __typename?: 'Query', getPublicWorkspaceDataByDomain: { __typename?: 'PublicWorkspaceDataOutput', id: string, logo?: string | null, displayName?: string | null, workspaceUrls: { __typename?: 'WorkspaceUrls', subdomainUrl: string, customUrl?: string | null }, authProviders: { __typename?: 'AuthProviders', google: boolean, magicLink: boolean, password: boolean, microsoft: boolean, sso: Array<{ __typename?: 'SSOIdentityProvider', id: string, name: string, type: IdentityProviderType, status: SsoIdentityProviderStatus, issuer: string }> } } };
@ -3756,8 +3771,8 @@ export type GenerateTransientTokenMutationHookResult = ReturnType<typeof useGene
export type GenerateTransientTokenMutationResult = Apollo.MutationResult<GenerateTransientTokenMutation>;
export type GenerateTransientTokenMutationOptions = Apollo.BaseMutationOptions<GenerateTransientTokenMutation, GenerateTransientTokenMutationVariables>;
export const GetAuthTokensFromLoginTokenDocument = gql`
mutation GetAuthTokensFromLoginToken($loginToken: String!) {
getAuthTokensFromLoginToken(loginToken: $loginToken) {
mutation GetAuthTokensFromLoginToken($loginToken: String!, $origin: String!) {
getAuthTokensFromLoginToken(loginToken: $loginToken, origin: $origin) {
tokens {
...AuthTokensFragment
}
@ -3780,6 +3795,7 @@ export type GetAuthTokensFromLoginTokenMutationFn = Apollo.MutationFunction<GetA
* const [getAuthTokensFromLoginTokenMutation, { data, loading, error }] = useGetAuthTokensFromLoginTokenMutation({
* variables: {
* loginToken: // value for 'loginToken'
* origin: // value for 'origin'
* },
* });
*/
@ -3826,11 +3842,12 @@ export type GetAuthorizationUrlForSsoMutationHookResult = ReturnType<typeof useG
export type GetAuthorizationUrlForSsoMutationResult = Apollo.MutationResult<GetAuthorizationUrlForSsoMutation>;
export type GetAuthorizationUrlForSsoMutationOptions = Apollo.BaseMutationOptions<GetAuthorizationUrlForSsoMutation, GetAuthorizationUrlForSsoMutationVariables>;
export const GetLoginTokenFromCredentialsDocument = gql`
mutation GetLoginTokenFromCredentials($email: String!, $password: String!, $captchaToken: String) {
mutation GetLoginTokenFromCredentials($email: String!, $password: String!, $captchaToken: String, $origin: String!) {
getLoginTokenFromCredentials(
email: $email
password: $password
captchaToken: $captchaToken
origin: $origin
) {
loginToken {
...AuthTokenFragment
@ -3856,6 +3873,7 @@ export type GetLoginTokenFromCredentialsMutationFn = Apollo.MutationFunction<Get
* email: // value for 'email'
* password: // value for 'password'
* captchaToken: // value for 'captchaToken'
* origin: // value for 'origin'
* },
* });
*/
@ -3867,10 +3885,11 @@ export type GetLoginTokenFromCredentialsMutationHookResult = ReturnType<typeof u
export type GetLoginTokenFromCredentialsMutationResult = Apollo.MutationResult<GetLoginTokenFromCredentialsMutation>;
export type GetLoginTokenFromCredentialsMutationOptions = Apollo.BaseMutationOptions<GetLoginTokenFromCredentialsMutation, GetLoginTokenFromCredentialsMutationVariables>;
export const GetLoginTokenFromEmailVerificationTokenDocument = gql`
mutation GetLoginTokenFromEmailVerificationToken($emailVerificationToken: String!, $captchaToken: String) {
mutation GetLoginTokenFromEmailVerificationToken($emailVerificationToken: String!, $captchaToken: String, $origin: String!) {
getLoginTokenFromEmailVerificationToken(
emailVerificationToken: $emailVerificationToken
captchaToken: $captchaToken
origin: $origin
) {
loginToken {
...AuthTokenFragment
@ -3899,6 +3918,7 @@ export type GetLoginTokenFromEmailVerificationTokenMutationFn = Apollo.MutationF
* variables: {
* emailVerificationToken: // value for 'emailVerificationToken'
* captchaToken: // value for 'captchaToken'
* origin: // value for 'origin'
* },
* });
*/
@ -3988,8 +4008,8 @@ export type RenewTokenMutationHookResult = ReturnType<typeof useRenewTokenMutati
export type RenewTokenMutationResult = Apollo.MutationResult<RenewTokenMutation>;
export type RenewTokenMutationOptions = Apollo.BaseMutationOptions<RenewTokenMutation, RenewTokenMutationVariables>;
export const ResendEmailVerificationTokenDocument = gql`
mutation ResendEmailVerificationToken($email: String!) {
resendEmailVerificationToken(email: $email) {
mutation ResendEmailVerificationToken($email: String!, $origin: String!) {
resendEmailVerificationToken(email: $email, origin: $origin) {
success
}
}
@ -4010,6 +4030,7 @@ export type ResendEmailVerificationTokenMutationFn = Apollo.MutationFunction<Res
* const [resendEmailVerificationTokenMutation, { data, loading, error }] = useResendEmailVerificationTokenMutation({
* variables: {
* email: // value for 'email'
* origin: // value for 'origin'
* },
* });
*/
@ -4214,8 +4235,8 @@ export type CheckUserExistsQueryHookResult = ReturnType<typeof useCheckUserExist
export type CheckUserExistsLazyQueryHookResult = ReturnType<typeof useCheckUserExistsLazyQuery>;
export type CheckUserExistsQueryResult = Apollo.QueryResult<CheckUserExistsQuery, CheckUserExistsQueryVariables>;
export const GetPublicWorkspaceDataByDomainDocument = gql`
query GetPublicWorkspaceDataByDomain {
getPublicWorkspaceDataByDomain {
query GetPublicWorkspaceDataByDomain($origin: String!) {
getPublicWorkspaceDataByDomain(origin: $origin) {
id
logo
displayName
@ -4252,10 +4273,11 @@ export const GetPublicWorkspaceDataByDomainDocument = gql`
* @example
* const { data, loading, error } = useGetPublicWorkspaceDataByDomainQuery({
* variables: {
* origin: // value for 'origin'
* },
* });
*/
export function useGetPublicWorkspaceDataByDomainQuery(baseOptions?: Apollo.QueryHookOptions<GetPublicWorkspaceDataByDomainQuery, GetPublicWorkspaceDataByDomainQueryVariables>) {
export function useGetPublicWorkspaceDataByDomainQuery(baseOptions: Apollo.QueryHookOptions<GetPublicWorkspaceDataByDomainQuery, GetPublicWorkspaceDataByDomainQueryVariables>) {
const options = {...defaultOptions, ...baseOptions}
return Apollo.useQuery<GetPublicWorkspaceDataByDomainQuery, GetPublicWorkspaceDataByDomainQueryVariables>(GetPublicWorkspaceDataByDomainDocument, options);
}

View File

@ -1,8 +1,8 @@
import { gql } from '@apollo/client';
export const GET_AUTH_TOKENS_FROM_LOGIN_TOKEN = gql`
mutation GetAuthTokensFromLoginToken($loginToken: String!) {
getAuthTokensFromLoginToken(loginToken: $loginToken) {
mutation GetAuthTokensFromLoginToken($loginToken: String!, $origin: String!) {
getAuthTokensFromLoginToken(loginToken: $loginToken, origin: $origin) {
tokens {
...AuthTokensFragment
}

View File

@ -5,11 +5,13 @@ export const GET_LOGIN_TOKEN_FROM_CREDENTIALS = gql`
$email: String!
$password: String!
$captchaToken: String
$origin: String!
) {
getLoginTokenFromCredentials(
email: $email
password: $password
captchaToken: $captchaToken
origin: $origin
) {
loginToken {
...AuthTokenFragment

View File

@ -4,10 +4,12 @@ export const GET_LOGIN_TOKEN_FROM_EMAIL_VERIFICATION_TOKEN = gql`
mutation GetLoginTokenFromEmailVerificationToken(
$emailVerificationToken: String!
$captchaToken: String
$origin: String!
) {
getLoginTokenFromEmailVerificationToken(
emailVerificationToken: $emailVerificationToken
captchaToken: $captchaToken
origin: $origin
) {
loginToken {
...AuthTokenFragment

View File

@ -1,8 +1,8 @@
import { gql } from '@apollo/client';
export const RESEND_EMAIL_VERIFICATION_TOKEN = gql`
mutation ResendEmailVerificationToken($email: String!) {
resendEmailVerificationToken(email: $email) {
mutation ResendEmailVerificationToken($email: String!, $origin: String!) {
resendEmailVerificationToken(email: $email, origin: $origin) {
success
}
}

View File

@ -1,8 +1,8 @@
import { gql } from '@apollo/client';
export const GET_PUBLIC_WORKSPACE_DATA_BY_DOMAIN = gql`
query GetPublicWorkspaceDataByDomain {
getPublicWorkspaceDataByDomain {
query GetPublicWorkspaceDataByDomain($origin: String!) {
getPublicWorkspaceDataByDomain(origin: $origin) {
id
logo
displayName

View File

@ -14,6 +14,7 @@ export const queries = {
export const email = 'test@test.com';
export const password = 'testing';
export const origin = 'http://localhost';
export const token =
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
@ -21,8 +22,9 @@ export const variables = {
getLoginTokenFromCredentials: {
email,
password,
origin,
},
getAuthTokensFromLoginToken: { loginToken: token },
getAuthTokensFromLoginToken: { loginToken: token, origin },
signup: {
email,
password,

View File

@ -53,6 +53,7 @@ import { isEmailVerificationRequiredState } from '@/client-config/states/isEmail
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
import { useIsCurrentLocationOnAWorkspace } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspace';
import { useLastAuthenticatedWorkspaceDomain } from '@/domain-manager/hooks/useLastAuthenticatedWorkspaceDomain';
import { useOrigin } from '@/domain-manager/hooks/useOrigin';
import { useRedirect } from '@/domain-manager/hooks/useRedirect';
import { useRedirectToWorkspaceDomain } from '@/domain-manager/hooks/useRedirectToWorkspaceDomain';
import { domainConfigurationState } from '@/domain-manager/states/domainConfigurationState';
@ -74,6 +75,7 @@ export const useAuth = () => {
currentWorkspaceMemberState,
);
const setCurrentUserWorkspace = useSetRecoilState(currentUserWorkspaceState);
const { origin } = useOrigin();
const setCurrentWorkspaceMembers = useSetRecoilState(
currentWorkspaceMembersState,
@ -179,6 +181,7 @@ export const useAuth = () => {
email,
password,
captchaToken,
origin,
},
});
if (isDefined(getLoginTokenResult.errors)) {
@ -203,7 +206,7 @@ export const useAuth = () => {
throw error;
}
},
[getLoginTokenFromCredentials, setSearchParams, setSignInUpStep],
[getLoginTokenFromCredentials, setSearchParams, setSignInUpStep, origin],
);
const handleGetLoginTokenFromEmailVerificationToken = useCallback(
@ -212,6 +215,7 @@ export const useAuth = () => {
variables: {
emailVerificationToken,
captchaToken,
origin,
},
});
@ -225,7 +229,7 @@ export const useAuth = () => {
return loginTokenResult.data.getLoginTokenFromEmailVerificationToken;
},
[getLoginTokenFromEmailVerificationToken],
[getLoginTokenFromEmailVerificationToken, origin],
);
const loadCurrentUser = useCallback(async () => {
@ -335,7 +339,10 @@ export const useAuth = () => {
const handleGetAuthTokensFromLoginToken = useCallback(
async (loginToken: string) => {
const getAuthTokensResult = await getAuthTokensFromLoginToken({
variables: { loginToken },
variables: {
loginToken,
origin,
},
});
if (isDefined(getAuthTokensResult.errors)) {
@ -364,6 +371,7 @@ export const useAuth = () => {
setTokenPair,
refreshObjectMetadataItems,
loadCurrentUser,
origin,
],
);

View File

@ -1,5 +1,6 @@
import { useCallback } from 'react';
import { useOrigin } from '@/domain-manager/hooks/useOrigin';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
import { t } from '@lingui/core/macro';
@ -9,6 +10,7 @@ export const useHandleResendEmailVerificationToken = () => {
const { enqueueSnackBar } = useSnackBar();
const [resendEmailVerificationToken, { loading }] =
useResendEmailVerificationTokenMutation();
const { origin } = useOrigin();
const handleResendEmailVerificationToken = useCallback(
(email: string | null) => {
@ -22,7 +24,10 @@ export const useHandleResendEmailVerificationToken = () => {
try {
const { data } = await resendEmailVerificationToken({
variables: { email },
variables: {
email,
origin,
},
});
if (data?.resendEmailVerificationToken?.success === true) {
@ -41,7 +46,7 @@ export const useHandleResendEmailVerificationToken = () => {
}
};
},
[enqueueSnackBar, resendEmailVerificationToken],
[enqueueSnackBar, resendEmailVerificationToken, origin],
);
return { handleResendEmailVerificationToken, loading };

View File

@ -1,6 +1,7 @@
import { workspacePublicDataState } from '@/auth/states/workspacePublicDataState';
import { isMultiWorkspaceEnabledState } from '@/client-config/states/isMultiWorkspaceEnabledState';
import { useIsCurrentLocationOnDefaultDomain } from '@/domain-manager/hooks/useIsCurrentLocationOnDefaultDomain';
import { useOrigin } from '@/domain-manager/hooks/useOrigin';
import { useRedirectToDefaultDomain } from '@/domain-manager/hooks/useRedirectToDefaultDomain';
import { workspaceAuthProvidersState } from '@/workspace/states/workspaceAuthProvidersState';
import { useRecoilValue, useSetRecoilState } from 'recoil';
@ -10,6 +11,7 @@ import { isDefined } from 'twenty-shared/utils';
export const useGetPublicWorkspaceDataByDomain = () => {
const { isDefaultDomain } = useIsCurrentLocationOnDefaultDomain();
const isMultiWorkspaceEnabled = useRecoilValue(isMultiWorkspaceEnabledState);
const { origin } = useOrigin();
const setWorkspaceAuthProviders = useSetRecoilState(
workspaceAuthProvidersState,
);
@ -20,6 +22,9 @@ export const useGetPublicWorkspaceDataByDomain = () => {
);
const { loading, data, error } = useGetPublicWorkspaceDataByDomainQuery({
variables: {
origin,
},
skip:
(isMultiWorkspaceEnabled && isDefaultDomain) ||
isDefined(workspacePublicData),

View File

@ -0,0 +1,7 @@
import { useMemo } from 'react';
export const useOrigin = () => {
const origin = useMemo(() => window.location.origin, []);
return { origin };
};