mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-04 08:26:10 +00:00
feat: resolve alignment issue and fixed sanitization to top level
This commit is contained in:
@@ -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've detected multiple accounts using variations of the same email address.
|
<div>
|
||||||
Please confirm that this account, {duplicateAccounts?.data?.myAccount?.username}, is
|
We'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>
|
||||||
|
|||||||
Reference in New Issue
Block a user