feat: resolve alignment issue and fixed sanitization to top level

This commit is contained in:
=
2025-05-15 00:56:53 +05:30
parent eca2b3ccde
commit fa7020949c
4 changed files with 25 additions and 24 deletions
+1 -1
View File
@@ -145,7 +145,7 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => {
const { isUserCompleted, providerAuthToken } = await server.services.saml.samlLogin({ const { isUserCompleted, providerAuthToken } = await server.services.saml.samlLogin({
externalId: profile.nameID, externalId: profile.nameID,
email, email: email.toLowerCase(),
firstName, firstName,
lastName: lastName as string, lastName: lastName as string,
relayState: (req.body as { RelayState?: string }).RelayState, relayState: (req.body as { RelayState?: string }).RelayState,
@@ -181,7 +181,6 @@ export const oidcConfigServiceFactory = ({
manageGroupMemberships manageGroupMemberships
}: TOidcLoginDTO) => { }: TOidcLoginDTO) => {
const serverCfg = await getServerCfg(); const serverCfg = await getServerCfg();
const sanitizedEmail = email.trim().toLowerCase();
if (serverCfg.enabledLoginMethods && !serverCfg.enabledLoginMethods.includes(LoginMethod.OIDC)) { if (serverCfg.enabledLoginMethods && !serverCfg.enabledLoginMethods.includes(LoginMethod.OIDC)) {
throw new ForbiddenRequestError({ throw new ForbiddenRequestError({
@@ -216,7 +215,7 @@ export const oidcConfigServiceFactory = ({
await orgMembershipDAL.create( await orgMembershipDAL.create(
{ {
userId: userAlias.userId, userId: userAlias.userId,
inviteEmail: sanitizedEmail, inviteEmail: email,
orgId, orgId,
role, role,
roleId, roleId,
@@ -246,7 +245,7 @@ export const oidcConfigServiceFactory = ({
// we prioritize getting the most complete user to create the new alias under // we prioritize getting the most complete user to create the new alias under
newUser = await userDAL.findOne( newUser = await userDAL.findOne(
{ {
email: sanitizedEmail, email,
isEmailVerified: true isEmailVerified: true
}, },
tx tx
@@ -256,7 +255,7 @@ export const oidcConfigServiceFactory = ({
// this fetches user entries created via invites // this fetches user entries created via invites
newUser = await userDAL.findOne( newUser = await userDAL.findOne(
{ {
username: sanitizedEmail username: email
}, },
tx tx
); );
@@ -274,10 +273,10 @@ export const oidcConfigServiceFactory = ({
const uniqueUsername = await normalizeUsername(externalId, userDAL); const uniqueUsername = await normalizeUsername(externalId, userDAL);
newUser = await userDAL.create( newUser = await userDAL.create(
{ {
email: sanitizedEmail, email,
firstName, firstName,
isEmailVerified: serverCfg.trustOidcEmails, isEmailVerified: serverCfg.trustOidcEmails,
username: serverCfg.trustOidcEmails ? sanitizedEmail : uniqueUsername, username: serverCfg.trustOidcEmails ? email : uniqueUsername,
lastName, lastName,
authMethods: [], authMethods: [],
isGhost: false isGhost: false
@@ -291,7 +290,7 @@ export const oidcConfigServiceFactory = ({
userId: newUser.id, userId: newUser.id,
aliasType: UserAliasType.OIDC, aliasType: UserAliasType.OIDC,
externalId, externalId,
emails: sanitizedEmail ? [sanitizedEmail] : [], emails: email ? [email] : [],
orgId orgId
}, },
tx tx
@@ -311,7 +310,7 @@ export const oidcConfigServiceFactory = ({
await orgMembershipDAL.create( await orgMembershipDAL.create(
{ {
userId: newUser.id, userId: newUser.id,
inviteEmail: sanitizedEmail, inviteEmail: email,
orgId, orgId,
role, role,
roleId, roleId,
@@ -716,7 +715,7 @@ export const oidcConfigServiceFactory = ({
} }
oidcLogin({ oidcLogin({
email: claims.email, email: claims.email.toLowerCase(),
externalId: claims.sub, externalId: claims.sub,
firstName: claims.given_name ?? "", firstName: claims.given_name ?? "",
lastName: claims.family_name ?? "", lastName: claims.family_name ?? "",
@@ -266,7 +266,7 @@ export const samlConfigServiceFactory = ({
await orgMembershipDAL.create( await orgMembershipDAL.create(
{ {
userId: userAlias.userId, userId: userAlias.userId,
inviteEmail: email.toLowerCase(), inviteEmail: email,
orgId, orgId,
role, role,
roleId, roleId,
@@ -324,7 +324,7 @@ export const samlConfigServiceFactory = ({
if (serverCfg.trustSamlEmails) { if (serverCfg.trustSamlEmails) {
newUser = await userDAL.findOne( newUser = await userDAL.findOne(
{ {
email: email.toLowerCase(), email,
isEmailVerified: true isEmailVerified: true
}, },
tx tx
@@ -335,8 +335,8 @@ export const samlConfigServiceFactory = ({
const uniqueUsername = await normalizeUsername(`${firstName ?? ""}-${lastName ?? ""}`, userDAL); const uniqueUsername = await normalizeUsername(`${firstName ?? ""}-${lastName ?? ""}`, userDAL);
newUser = await userDAL.create( newUser = await userDAL.create(
{ {
username: serverCfg.trustSamlEmails ? email.toLowerCase() : uniqueUsername, username: serverCfg.trustSamlEmails ? email : uniqueUsername,
email: email.toLowerCase(), email,
isEmailVerified: serverCfg.trustSamlEmails, isEmailVerified: serverCfg.trustSamlEmails,
firstName, firstName,
lastName, lastName,
@@ -352,7 +352,7 @@ export const samlConfigServiceFactory = ({
userId: newUser.id, userId: newUser.id,
aliasType: UserAliasType.SAML, aliasType: UserAliasType.SAML,
externalId, externalId,
emails: email ? [email.toLowerCase()] : [], emails: email ? [email] : [],
orgId orgId
}, },
tx tx
@@ -372,7 +372,7 @@ export const samlConfigServiceFactory = ({
await orgMembershipDAL.create( await orgMembershipDAL.create(
{ {
userId: newUser.id, userId: newUser.id,
inviteEmail: email.toLowerCase(), inviteEmail: email,
orgId, orgId,
role, role,
roleId, roleId,
@@ -82,9 +82,11 @@ export const SelectOrganizationPage = () => {
<b>{duplicateAccounts?.data?.myAccount?.username}</b>. <b>{duplicateAccounts?.data?.myAccount?.username}</b>.
</p> </p>
<Alert variant="warning" hideTitle> <Alert variant="warning" hideTitle>
We&apos;ve detected multiple accounts using variations of the same email address. <div>
Please confirm that this account, {duplicateAccounts?.data?.myAccount?.username}, is We&apos;ve detected multiple accounts using variations of the same email address.
the account you wish to retain. Confirm to retain this account <b>{duplicateAccounts?.data?.myAccount?.username}</b>
. Upon confirmation other accounts will be <b>removed</b>.
</div>
</Alert> </Alert>
</div> </div>
<div className="thin-scrollbar flex h-full max-h-60 w-full flex-col items-stretch gap-2 overflow-auto rounded-md"> <div className="thin-scrollbar flex h-full max-h-60 w-full flex-col items-stretch gap-2 overflow-auto rounded-md">
@@ -121,13 +123,13 @@ export const SelectOrganizationPage = () => {
<div className="mt-4 flex w-full flex-col"> <div className="mt-4 flex w-full flex-col">
<div className="flex gap-6"> <div className="flex gap-6">
<Button <Button
className="flex-grow" className="flex-1 flex-grow"
isLoading={removeDuplicateEmails.isPending} isLoading={removeDuplicateEmails.isPending}
onClick={() => onClick={() =>
removeDuplicateEmails.mutate(undefined, { removeDuplicateEmails.mutate(undefined, {
onSuccess: () => { onSuccess: () => {
createNotification({ createNotification({
type: "info", type: "success",
text: "Removed duplicate accounts" text: "Removed duplicate accounts"
}); });
setRemoveDuplicateLater(true); setRemoveDuplicateLater(true);
@@ -140,9 +142,9 @@ export const SelectOrganizationPage = () => {
<Button <Button
variant="outline_bg" variant="outline_bg"
onClick={() => setRemoveDuplicateLater(true)} onClick={() => setRemoveDuplicateLater(true)}
className="flex-grow" className="flex-1 flex-grow"
> >
Do This Later Ask Again Later?
</Button> </Button>
</div> </div>
<Button <Button
@@ -152,7 +154,7 @@ export const SelectOrganizationPage = () => {
className="mt-4" className="mt-4"
onClick={handleLogout} onClick={handleLogout}
> >
Change account Change Account
</Button> </Button>
</div> </div>
</form> </form>