From 54fcc23a6c82abe465ab0d0f04a1a52760691781 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Fri, 19 Apr 2024 16:16:16 -0700 Subject: [PATCH 01/46] Begin groups phase 2b --- .../20240419200953_email-confirmation.ts | 15 ++ backend/src/db/schemas/users.ts | 3 +- .../services/license/__mocks__/licence-fns.ts | 4 +- .../src/ee/services/license/licence-fns.ts | 4 +- .../src/ee/services/license/license-types.ts | 4 +- backend/src/ee/services/scim/scim-service.ts | 24 ++- backend/src/server/routes/index.ts | 2 +- backend/src/server/routes/v2/user-router.ts | 63 +++++++- .../services/auth-token/auth-token-service.ts | 6 + .../services/auth-token/auth-token-types.ts | 1 + .../src/services/auth/auth-signup-service.ts | 2 +- backend/src/services/smtp/smtp-service.ts | 1 + .../templates/emailVerification.handlebars | 16 +- .../signupEmailVerification.handlebars | 17 ++ backend/src/services/user/user-service.ts | 73 ++++++++- frontend/src/hooks/api/auth/index.tsx | 5 +- frontend/src/hooks/api/auth/queries.tsx | 2 +- frontend/src/hooks/api/users/index.tsx | 7 +- frontend/src/hooks/api/users/mutation.tsx | 20 +++ frontend/src/pages/signup/index.tsx | 4 +- frontend/src/views/Signup/SignupSSO.tsx | 4 +- .../EmailConfirmationStep.tsx | 149 ++++++++++++++++++ .../EmailConfirmationStep/index.tsx | 1 + .../src/views/Signup/components/index.tsx | 1 + 24 files changed, 394 insertions(+), 34 deletions(-) create mode 100644 backend/src/db/migrations/20240419200953_email-confirmation.ts create mode 100644 backend/src/services/smtp/templates/signupEmailVerification.handlebars create mode 100644 frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx create mode 100644 frontend/src/views/Signup/components/EmailConfirmationStep/index.tsx diff --git a/backend/src/db/migrations/20240419200953_email-confirmation.ts b/backend/src/db/migrations/20240419200953_email-confirmation.ts new file mode 100644 index 000000000..59d7b3d41 --- /dev/null +++ b/backend/src/db/migrations/20240419200953_email-confirmation.ts @@ -0,0 +1,15 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; + +export async function up(knex: Knex): Promise { + await knex.schema.alterTable(TableName.Users, (t) => { + t.boolean("isEmailVerified"); + }); +} + +export async function down(knex: Knex): Promise { + await knex.schema.alterTable(TableName.Users, (t) => { + t.dropColumn("isEmailVerified"); + }); +} diff --git a/backend/src/db/schemas/users.ts b/backend/src/db/schemas/users.ts index 86ee2fb74..3eee2683f 100644 --- a/backend/src/db/schemas/users.ts +++ b/backend/src/db/schemas/users.ts @@ -21,7 +21,8 @@ export const UsersSchema = z.object({ createdAt: z.date(), updatedAt: z.date(), isGhost: z.boolean().default(false), - username: z.string() + username: z.string(), + isEmailVerified: z.boolean().nullable().optional() }); export type TUsers = z.infer; diff --git a/backend/src/ee/services/license/__mocks__/licence-fns.ts b/backend/src/ee/services/license/__mocks__/licence-fns.ts index b5cbf103e..20186718d 100644 --- a/backend/src/ee/services/license/__mocks__/licence-fns.ts +++ b/backend/src/ee/services/license/__mocks__/licence-fns.ts @@ -17,8 +17,8 @@ export const getDefaultOnPremFeatures = () => { customAlerts: false, auditLogs: false, auditLogsRetentionDays: 0, - samlSSO: false, - scim: false, + samlSSO: true, + scim: true, ldap: false, groups: false, status: null, diff --git a/backend/src/ee/services/license/licence-fns.ts b/backend/src/ee/services/license/licence-fns.ts index 8a4de57f1..9179fde32 100644 --- a/backend/src/ee/services/license/licence-fns.ts +++ b/backend/src/ee/services/license/licence-fns.ts @@ -24,8 +24,8 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ customAlerts: false, auditLogs: false, auditLogsRetentionDays: 0, - samlSSO: false, - scim: false, + samlSSO: true, + scim: true, ldap: false, groups: false, status: null, diff --git a/backend/src/ee/services/license/license-types.ts b/backend/src/ee/services/license/license-types.ts index 1cea39a83..2cc321373 100644 --- a/backend/src/ee/services/license/license-types.ts +++ b/backend/src/ee/services/license/license-types.ts @@ -40,8 +40,8 @@ export type TFeatureSet = { customAlerts: false; auditLogs: false; auditLogsRetentionDays: 0; - samlSSO: false; - scim: false; + samlSSO: true; + scim: true; ldap: false; groups: false; status: null; diff --git a/backend/src/ee/services/scim/scim-service.ts b/backend/src/ee/services/scim/scim-service.ts index 15ca67a10..120b41bd1 100644 --- a/backend/src/ee/services/scim/scim-service.ts +++ b/backend/src/ee/services/scim/scim-service.ts @@ -57,6 +57,8 @@ type TScimServiceFactoryDep = { export type TScimServiceFactory = ReturnType; +// TODO: finish updating all userId refs to orgMembershipId + export const scimServiceFactory = ({ licenseService, scimDAL, @@ -145,6 +147,7 @@ export const scimServiceFactory = ({ // SCIM server endpoints const listScimUsers = async ({ offset, limit, filter, orgId }: TListScimUsersDTO): Promise => { + console.log("listScimUsers"); // done const org = await orgDAL.findById(orgId); if (!org.scimEnabled) @@ -178,9 +181,11 @@ export const scimServiceFactory = ({ findOpts ); - const scimUsers = users.map(({ userId, username, firstName, lastName, email }) => + console.log("orgDAL.findMembership users: ", users); + + const scimUsers = users.map(({ id, username, firstName, lastName, email }) => buildScimUser({ - userId: userId ?? "", + userId: id ?? "", username, firstName: firstName ?? "", lastName: lastName ?? "", @@ -197,6 +202,7 @@ export const scimServiceFactory = ({ }; const getScimUser = async ({ userId, orgId }: TGetScimUserDTO) => { + console.log("getScimUser"); // done const [membership] = await orgDAL .findMembership({ userId, @@ -221,8 +227,10 @@ export const scimServiceFactory = ({ status: 403 }); + console.log("getScimUser membership: ", membership); + return buildScimUser({ - userId: membership.userId as string, + userId: membership.id, username: membership.username, email: membership.email ?? "", firstName: membership.firstName as string, @@ -232,6 +240,7 @@ export const scimServiceFactory = ({ }; const createScimUser = async ({ username, email, firstName, lastName, orgId }: TCreateScimUserDTO) => { + console.log("createScimUser"); // TODO: update implementation to always create a new user and be based on orgMembershipId const org = await orgDAL.findById(orgId); if (!org) @@ -331,6 +340,7 @@ export const scimServiceFactory = ({ }; const updateScimUser = async ({ userId, orgId, operations }: TUpdateScimUserDTO) => { + console.log("updateScimUser"); // done const [membership] = await orgDAL .findMembership({ userId, @@ -380,7 +390,7 @@ export const scimServiceFactory = ({ } return buildScimUser({ - userId: membership.userId as string, + userId: membership.id, username: membership.username, email: membership.email, firstName: membership.firstName as string, @@ -390,6 +400,7 @@ export const scimServiceFactory = ({ }; const replaceScimUser = async ({ userId, active, orgId }: TReplaceScimUserDTO) => { + console.log("replaceScimUser"); // done const [membership] = await orgDAL .findMembership({ userId, @@ -426,7 +437,7 @@ export const scimServiceFactory = ({ } return buildScimUser({ - userId: membership.userId as string, + userId: membership.id, username: membership.username, email: membership.email, firstName: membership.firstName as string, @@ -436,6 +447,7 @@ export const scimServiceFactory = ({ }; const deleteScimUser = async ({ userId, orgId }: TDeleteScimUserDTO) => { + console.log("deleteScimUser"); // done const [membership] = await orgDAL .findMembership({ userId, @@ -489,7 +501,7 @@ export const scimServiceFactory = ({ buildScimGroup({ groupId: group.id, name: group.name, - members: [] + members: [] // does this need to be populated? }) ); diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 5d77c340b..893f36770 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -315,7 +315,7 @@ export const registerRoutes = async ( }); const tokenService = tokenServiceFactory({ tokenDAL: authTokenDAL, userDAL }); - const userService = userServiceFactory({ userDAL }); + const userService = userServiceFactory({ userDAL, tokenService, smtpService }); const loginService = authLoginServiceFactory({ userDAL, smtpService, tokenService, orgDAL, tokenDAL: authTokenDAL }); const passwordService = authPaswordServiceFactory({ tokenService, diff --git a/backend/src/server/routes/v2/user-router.ts b/backend/src/server/routes/v2/user-router.ts index d1e80702f..dd49f6d5e 100644 --- a/backend/src/server/routes/v2/user-router.ts +++ b/backend/src/server/routes/v2/user-router.ts @@ -2,11 +2,72 @@ import { z } from "zod"; import { AuthTokenSessionsSchema, OrganizationsSchema, UserEncryptionKeysSchema, UsersSchema } from "@app/db/schemas"; import { ApiKeysSchema } from "@app/db/schemas/api-keys"; -import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; +import { authRateLimit, readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMethod, AuthMode } from "@app/services/auth/auth-type"; export const registerUserRouter = async (server: FastifyZodProvider) => { + server.route({ + method: "POST", + url: "/me/emails/code", + config: { + rateLimit: authRateLimit + }, + schema: { + response: { + 200: z.object({}) + } + }, + preHandler: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + await server.services.user.sendEmailVerificationCode(req.permission.id); + return {}; + } + }); + + server.route({ + method: "POST", + url: "/me/emails/verify", + config: { + rateLimit: authRateLimit + }, + schema: { + body: z.object({ + code: z.string().trim() + }), + response: { + 200: z.object({}) + } + }, + preHandler: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + await server.services.user.verifyEmailVerificationCode(req.permission.id, req.body.code); + return {}; + } + }); + + server.route({ + method: "GET", + url: "/me/users/same-email", + config: { + rateLimit: readLimit + }, + schema: { + response: { + 200: z.object({ + users: UsersSchema.array() + }) + } + }, + preHandler: verifyAuth([AuthMode.JWT]), + handler: async (req) => { + const users = await server.services.user.listUsersWithSameEmail(req.permission.id); + return { + users + }; + } + }); + server.route({ method: "PATCH", url: "/me/mfa", diff --git a/backend/src/services/auth-token/auth-token-service.ts b/backend/src/services/auth-token/auth-token-service.ts index 59f336e5a..bd35f3ae1 100644 --- a/backend/src/services/auth-token/auth-token-service.ts +++ b/backend/src/services/auth-token/auth-token-service.ts @@ -27,6 +27,12 @@ export const getTokenConfig = (tokenType: TokenType) => { const expiresAt = new Date(new Date().getTime() + 86400000); return { token, expiresAt }; } + case TokenType.TOKEN_EMAIL_VERIFICATION: { + // generate random 6-digit code + const token = String(crypto.randomInt(10 ** 5, 10 ** 6 - 1)); + const expiresAt = new Date(new Date().getTime() + 86400000); + return { token, expiresAt }; + } case TokenType.TOKEN_EMAIL_MFA: { // generate random 6-digit code const token = String(crypto.randomInt(10 ** 5, 10 ** 6 - 1)); diff --git a/backend/src/services/auth-token/auth-token-types.ts b/backend/src/services/auth-token/auth-token-types.ts index 74787f4ac..630e36310 100644 --- a/backend/src/services/auth-token/auth-token-types.ts +++ b/backend/src/services/auth-token/auth-token-types.ts @@ -1,5 +1,6 @@ export enum TokenType { TOKEN_EMAIL_CONFIRMATION = "emailConfirmation", + TOKEN_EMAIL_VERIFICATION = "emailVerification", // unverified -> verified TOKEN_EMAIL_MFA = "emailMfa", TOKEN_EMAIL_ORG_INVITATION = "organizationInvitation", TOKEN_EMAIL_PASSWORD_RESET = "passwordReset" diff --git a/backend/src/services/auth/auth-signup-service.ts b/backend/src/services/auth/auth-signup-service.ts index 3db935769..b997e2293 100644 --- a/backend/src/services/auth/auth-signup-service.ts +++ b/backend/src/services/auth/auth-signup-service.ts @@ -60,7 +60,7 @@ export const authSignupServiceFactory = ({ }); await smtpService.sendMail({ - template: SmtpTemplates.EmailVerification, + template: SmtpTemplates.SignupEmailVerification, subjectLine: "Infisical confirmation code", recipients: [email], substitutions: { diff --git a/backend/src/services/smtp/smtp-service.ts b/backend/src/services/smtp/smtp-service.ts index 7ebeaa227..0b43ffb90 100644 --- a/backend/src/services/smtp/smtp-service.ts +++ b/backend/src/services/smtp/smtp-service.ts @@ -17,6 +17,7 @@ export type TSmtpSendMail = { export type TSmtpService = ReturnType; export enum SmtpTemplates { + SignupEmailVerification = "signupEmailVerification.handlebars", EmailVerification = "emailVerification.handlebars", SecretReminder = "secretReminder.handlebars", EmailMfa = "emailMfa.handlebars", diff --git a/backend/src/services/smtp/templates/emailVerification.handlebars b/backend/src/services/smtp/templates/emailVerification.handlebars index fc738d202..ad9694d5c 100644 --- a/backend/src/services/smtp/templates/emailVerification.handlebars +++ b/backend/src/services/smtp/templates/emailVerification.handlebars @@ -1,17 +1,15 @@ - - - - + + + Code - + - +

Confirm your email address

-

Your confirmation code is below — enter it in the browser window where you've started signing up for Infisical.

+

Your confirmation code is below — enter it in the browser window where you've started confirming your email.

{{code}}

-

Questions about setting up Infisical? Email us at support@infisical.com

- + \ No newline at end of file diff --git a/backend/src/services/smtp/templates/signupEmailVerification.handlebars b/backend/src/services/smtp/templates/signupEmailVerification.handlebars new file mode 100644 index 000000000..fc738d202 --- /dev/null +++ b/backend/src/services/smtp/templates/signupEmailVerification.handlebars @@ -0,0 +1,17 @@ + + + + + + + Code + + + +

Confirm your email address

+

Your confirmation code is below — enter it in the browser window where you've started signing up for Infisical.

+

{{code}}

+

Questions about setting up Infisical? Email us at support@infisical.com

+ + + \ No newline at end of file diff --git a/backend/src/services/user/user-service.ts b/backend/src/services/user/user-service.ts index c85e40eb3..453848bf7 100644 --- a/backend/src/services/user/user-service.ts +++ b/backend/src/services/user/user-service.ts @@ -1,15 +1,83 @@ import { BadRequestError } from "@app/lib/errors"; +import { TAuthTokenServiceFactory } from "@app/services/auth-token/auth-token-service"; +import { TokenType } from "@app/services/auth-token/auth-token-types"; +import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; import { AuthMethod } from "../auth/auth-type"; import { TUserDALFactory } from "./user-dal"; type TUserServiceFactoryDep = { userDAL: TUserDALFactory; + tokenService: TAuthTokenServiceFactory; + smtpService: TSmtpService; }; export type TUserServiceFactory = ReturnType; -export const userServiceFactory = ({ userDAL }: TUserServiceFactoryDep) => { +export const userServiceFactory = ({ userDAL, tokenService, smtpService }: TUserServiceFactoryDep) => { + const sendEmailVerificationCode = async (userId: string) => { + console.log("sendEmailVerificationCode userId: ", userId); + const user = await userDAL.findById(userId); + if (!user) throw new BadRequestError({ name: "Failed to find user" }); + if (!user.email) + throw new BadRequestError({ name: "Failed to send email verification code due to no email on user" }); + if (user.isEmailVerified) + throw new BadRequestError({ name: "Failed to send email verification code due to email already verified" }); + + console.log("sendEmailVerificationCode user: ", user); + const token = await tokenService.createTokenForUser({ + type: TokenType.TOKEN_EMAIL_VERIFICATION, + userId: user.id + }); + + console.log("sendEmailVerificationCode 2"); + await smtpService.sendMail({ + template: SmtpTemplates.EmailVerification, + subjectLine: "Infisical confirmation code", + recipients: [user.email], + substitutions: { + code: token + } + }); + }; + + const verifyEmailVerificationCode = async (userId: string, code: string) => { + console.log("verifyEmailVerificationCode args: ", { + userId, + code + }); + + const user = await userDAL.findById(userId); + if (!user) throw new BadRequestError({ name: "Failed to find user" }); + if (user.isEmailVerified) + throw new BadRequestError({ name: "Failed to verify email verification code due to email already verified" }); + + await tokenService.validateTokenForUser({ + type: TokenType.TOKEN_EMAIL_VERIFICATION, + userId: user.id, + code + }); + + await userDAL.updateById(userId, { isEmailVerified: true }); + }; + + // lists users with same verified email only + const listUsersWithSameEmail = async (userId: string) => { + const user = await userDAL.findById(userId); + if (!user) throw new BadRequestError({ name: "Failed to find user" }); + if (!user.email) + throw new BadRequestError({ name: "Failed to list users with same email due to no email on user" }); + if (!user.isEmailVerified) + throw new BadRequestError({ name: "Failed to list users with same email due to email not verified" }); + + const users = await userDAL.find({ + email: user.email, + isEmailVerified: true + }); + + return users; + }; + const toggleUserMfa = async (userId: string, isMfaEnabled: boolean) => { const user = await userDAL.findById(userId); @@ -72,6 +140,9 @@ export const userServiceFactory = ({ userDAL }: TUserServiceFactoryDep) => { }; return { + sendEmailVerificationCode, + verifyEmailVerificationCode, + listUsersWithSameEmail, toggleUserMfa, updateUserName, updateAuthMethods, diff --git a/frontend/src/hooks/api/auth/index.tsx b/frontend/src/hooks/api/auth/index.tsx index 8b918c7ab..505f7b05f 100644 --- a/frontend/src/hooks/api/auth/index.tsx +++ b/frontend/src/hooks/api/auth/index.tsx @@ -5,7 +5,6 @@ export { useSendMfaToken, useSendPasswordResetEmail, useSendVerificationEmail, - useVerifyEmailVerificationCode, useVerifyMfaToken, - useVerifyPasswordResetCode -} from "./queries"; + useVerifyPasswordResetCode, + useVerifySignupEmailVerificationCode} from "./queries"; diff --git a/frontend/src/hooks/api/auth/queries.tsx b/frontend/src/hooks/api/auth/queries.tsx index 4d05fb963..20209df71 100644 --- a/frontend/src/hooks/api/auth/queries.tsx +++ b/frontend/src/hooks/api/auth/queries.tsx @@ -164,7 +164,7 @@ export const useSendVerificationEmail = () => { }); }; -export const useVerifyEmailVerificationCode = () => { +export const useVerifySignupEmailVerificationCode = () => { return useMutation({ mutationFn: async ({ email, code }: { email: string; code: string }) => { const { data } = await apiRequest.post("/api/v3/signup/email/verify", { diff --git a/frontend/src/hooks/api/users/index.tsx b/frontend/src/hooks/api/users/index.tsx index 9c51948f2..a8ad89f4c 100644 --- a/frontend/src/hooks/api/users/index.tsx +++ b/frontend/src/hooks/api/users/index.tsx @@ -1,4 +1,9 @@ -export { useAddUserToWsE2EE, useAddUserToWsNonE2EE } from "./mutation"; +export { + useAddUserToWsE2EE, + useAddUserToWsNonE2EE, + useSendEmailVerificationCode, + useVerifyEmailVerificationCode +} from "./mutation"; export { fetchOrgUsers, useAddUserToOrg, diff --git a/frontend/src/hooks/api/users/mutation.tsx b/frontend/src/hooks/api/users/mutation.tsx index a5c77b15f..e1e939105 100644 --- a/frontend/src/hooks/api/users/mutation.tsx +++ b/frontend/src/hooks/api/users/mutation.tsx @@ -61,3 +61,23 @@ export const useAddUserToWsNonE2EE = () => { } }); }; + +export const useSendEmailVerificationCode = () => { + return useMutation({ + mutationFn: async () => { + await apiRequest.post("/api/v2/users/me/emails/code"); + return {}; + } + }); +}; + +export const useVerifyEmailVerificationCode = () => { + return useMutation({ + mutationFn: async ({ code }: { code: string }) => { + await apiRequest.post("/api/v2/users/me/emails/verify", { + code + }); + return {}; + } + }); +}; diff --git a/frontend/src/pages/signup/index.tsx b/frontend/src/pages/signup/index.tsx index 17316e1e6..0719111d6 100644 --- a/frontend/src/pages/signup/index.tsx +++ b/frontend/src/pages/signup/index.tsx @@ -13,7 +13,7 @@ import TeamInviteStep from "@app/components/signup/TeamInviteStep"; import UserInfoStep from "@app/components/signup/UserInfoStep"; import SecurityClient from "@app/components/utilities/SecurityClient"; import { useServerConfig } from "@app/context"; -import { useVerifyEmailVerificationCode } from "@app/hooks/api"; +import { useVerifySignupEmailVerificationCode } from "@app/hooks/api"; import { fetchOrganizations } from "@app/hooks/api/organization/queries"; import { useFetchServerStatus } from "@app/hooks/api/serverDetails"; @@ -34,7 +34,7 @@ export default function SignUp() { const [isSignupWithEmail, setIsSignupWithEmail] = useState(false); const [isCodeInputCheckLoading, setIsCodeInputCheckLoading] = useState(false); const { t } = useTranslation(); - const { mutateAsync } = useVerifyEmailVerificationCode(); + const { mutateAsync } = useVerifySignupEmailVerificationCode(); const { config } = useServerConfig(); useEffect(() => { diff --git a/frontend/src/views/Signup/SignupSSO.tsx b/frontend/src/views/Signup/SignupSSO.tsx index 141865026..d74da3639 100644 --- a/frontend/src/views/Signup/SignupSSO.tsx +++ b/frontend/src/views/Signup/SignupSSO.tsx @@ -1,7 +1,7 @@ import { useState } from "react"; import jwt_decode from "jwt-decode"; -import { BackupPDFStep, UserInfoSSOStep } from "./components"; +import { BackupPDFStep, EmailConfirmationStep,UserInfoSSOStep } from "./components"; type Props = { providerAuthToken: string; @@ -28,6 +28,8 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { /> ); case 1: + return ; + case 2: return ( ); diff --git a/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx b/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx new file mode 100644 index 000000000..e9b0a6e84 --- /dev/null +++ b/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx @@ -0,0 +1,149 @@ +// confirm email +// if same email exists, then trigger fn to merge automatically +import { useState } from "react"; +import ReactCodeInput from "react-code-input"; + +// import Error from "@app/components/basic/Error"; +import { createNotification } from "@app/components/notifications"; +import { Button } from "@app/components/v2"; +import { useUser } from "@app/context"; +import { useSendEmailVerificationCode, useVerifyEmailVerificationCode } from "@app/hooks/api"; + +// The style for the verification code input +const props = { + inputStyle: { + fontFamily: "monospace", + margin: "4px", + MozAppearance: "textfield", + width: "55px", + borderRadius: "5px", + fontSize: "24px", + height: "55px", + paddingLeft: "7", + backgroundColor: "#0d1117", + color: "white", + border: "1px solid #2d2f33", + textAlign: "center", + outlineColor: "#8ca542", + borderColor: "#2d2f33" + } +} as const; +const propsPhone = { + inputStyle: { + fontFamily: "monospace", + margin: "4px", + MozAppearance: "textfield", + width: "40px", + borderRadius: "5px", + fontSize: "24px", + height: "40px", + paddingLeft: "7", + backgroundColor: "#0d1117", + color: "white", + border: "1px solid #2d2f33", + textAlign: "center", + outlineColor: "#8ca542", + borderColor: "#2d2f33" + } +} as const; + +export const EmailConfirmationStep = () => { + const { user } = useUser(); + const [code, setCode] = useState(""); + // const [codeError, setCodeError] = useState(false); + const [isResendingVerificationEmail] = useState(false); + const [isLoading] = useState(false); + + const { mutateAsync: sendEmailVerificationCode } = useSendEmailVerificationCode(); + const { mutateAsync: verifyEmailVerificationCode } = useVerifyEmailVerificationCode(); + + const checkCode = async () => { + try { + console.log("checkCode code: ", code); + await verifyEmailVerificationCode({ code }); + console.log("checkCode 2"); + } catch (err) { + createNotification({ + text: "Failed to verify code", + type: "error" + }); + } + }; + + const resendCode = async () => { + try { + console.log("resendCode"); + await sendEmailVerificationCode(); + console.log("resendCode"); + } catch (err) { + createNotification({ + text: "Failed to resend code", + type: "error" + }); + } + }; + + return ( +
+

+ We've sent a verification code to +

+

+ {user?.email} +

+
+ +
+
+ +
+ {/* {codeError && } */} +
+
+ +
+
+
+
+ Don't see the code? +
+ +
+
+

Make sure to check your spam inbox.

+
+
+ ); +}; diff --git a/frontend/src/views/Signup/components/EmailConfirmationStep/index.tsx b/frontend/src/views/Signup/components/EmailConfirmationStep/index.tsx new file mode 100644 index 000000000..32f3a636e --- /dev/null +++ b/frontend/src/views/Signup/components/EmailConfirmationStep/index.tsx @@ -0,0 +1 @@ +export { EmailConfirmationStep } from "./EmailConfirmationStep"; diff --git a/frontend/src/views/Signup/components/index.tsx b/frontend/src/views/Signup/components/index.tsx index a4628de35..7ab3d853c 100644 --- a/frontend/src/views/Signup/components/index.tsx +++ b/frontend/src/views/Signup/components/index.tsx @@ -1,2 +1,3 @@ export { BackupPDFStep } from "./BackupPDFStep"; +export { EmailConfirmationStep } from "./EmailConfirmationStep"; export { UserInfoSSOStep } from "./UserInfoSSOStep"; From 8ff407927cfd94896ef089536d8a727df55db478 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Thu, 25 Apr 2024 17:02:55 -0700 Subject: [PATCH 02/46] Continue merge user --- .../src/ee/services/license/licence-fns.ts | 4 +- .../saml-config/saml-config-service.ts | 4 + backend/src/server/routes/index.ts | 11 +- backend/src/server/routes/v2/user-router.ts | 33 ++++++ .../services/auth-token/auth-token-service.ts | 5 +- .../org-membership/org-membership-dal.ts | 13 +++ backend/src/services/user/user-service.ts | 79 +++++++++++++- frontend/src/hooks/api/users/index.tsx | 9 +- frontend/src/hooks/api/users/mutation.tsx | 18 +++- frontend/src/hooks/api/users/queries.tsx | 20 +++- frontend/src/views/Signup/SignupSSO.tsx | 15 ++- .../EmailConfirmationStep.tsx | 38 +++++-- .../MergeUsersStep/MergeUsersStep.tsx | 102 ++++++++++++++++++ .../components/MergeUsersStep/index.tsx | 1 + .../UserInfoSSOStep/UserInfoSSOStep.tsx | 10 +- .../src/views/Signup/components/index.tsx | 1 + 16 files changed, 337 insertions(+), 26 deletions(-) create mode 100644 backend/src/services/org-membership/org-membership-dal.ts create mode 100644 frontend/src/views/Signup/components/MergeUsersStep/MergeUsersStep.tsx create mode 100644 frontend/src/views/Signup/components/MergeUsersStep/index.tsx diff --git a/backend/src/ee/services/license/licence-fns.ts b/backend/src/ee/services/license/licence-fns.ts index 9179fde32..5046ad125 100644 --- a/backend/src/ee/services/license/licence-fns.ts +++ b/backend/src/ee/services/license/licence-fns.ts @@ -26,8 +26,8 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ auditLogsRetentionDays: 0, samlSSO: true, scim: true, - ldap: false, - groups: false, + ldap: true, + groups: true, status: null, trial_end: null, has_used_trial: true, diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index f88182e61..c1d270ee1 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -23,6 +23,7 @@ import { AuthMethod, AuthTokenType } from "@app/services/auth/auth-type"; import { TOrgBotDALFactory } from "@app/services/org/org-bot-dal"; import { TOrgDALFactory } from "@app/services/org/org-dal"; import { TUserDALFactory } from "@app/services/user/user-dal"; +import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; import { TLicenseServiceFactory } from "../license/license-service"; import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-permission"; @@ -33,6 +34,7 @@ import { TCreateSamlCfgDTO, TGetSamlCfgDTO, TSamlLoginDTO, TUpdateSamlCfgDTO } f type TSamlConfigServiceFactoryDep = { samlConfigDAL: TSamlConfigDALFactory; userDAL: Pick; + userAliasDAL: Pick; orgDAL: Pick< TOrgDALFactory, "createMembership" | "updateMembershipById" | "findMembership" | "findOrgById" | "findOne" | "updateById" @@ -360,6 +362,7 @@ export const samlConfigServiceFactory = ({ { username, email, + isEmailVerified: false, firstName, lastName, authMethods: [AuthMethod.EMAIL], @@ -382,6 +385,7 @@ export const samlConfigServiceFactory = ({ authTokenType: AuthTokenType.PROVIDER_TOKEN, userId: user.id, username: user.username, + ...(user.email && { email: user.email }), firstName, lastName, organizationName: organization.name, diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 31a13aaeb..70ba31ac8 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -86,6 +86,7 @@ import { orgDALFactory } from "@app/services/org/org-dal"; import { orgRoleDALFactory } from "@app/services/org/org-role-dal"; import { orgRoleServiceFactory } from "@app/services/org/org-role-service"; import { orgServiceFactory } from "@app/services/org/org-service"; +import { orgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; import { projectDALFactory } from "@app/services/project/project-dal"; import { projectQueueFactory } from "@app/services/project/project-queue"; import { projectServiceFactory } from "@app/services/project/project-service"; @@ -153,6 +154,7 @@ export const registerRoutes = async ( const authDAL = authDALFactory(db); const authTokenDAL = tokenDALFactory(db); const orgDAL = orgDALFactory(db); + const orgMembershipDAL = orgMembershipDALFactory(db); const orgBotDAL = orgBotDALFactory(db); const incidentContactDAL = incidentContactDALFactory(db); const orgRoleDAL = orgRoleDALFactory(db); @@ -328,7 +330,14 @@ export const registerRoutes = async ( }); const tokenService = tokenServiceFactory({ tokenDAL: authTokenDAL, userDAL }); - const userService = userServiceFactory({ userDAL, tokenService, smtpService }); + const userService = userServiceFactory({ + userDAL, + userAliasDAL, + orgDAL, + orgMembershipDAL, + tokenService, + smtpService + }); const loginService = authLoginServiceFactory({ userDAL, smtpService, tokenService, orgDAL, tokenDAL: authTokenDAL }); const passwordService = authPaswordServiceFactory({ tokenService, diff --git a/backend/src/server/routes/v2/user-router.ts b/backend/src/server/routes/v2/user-router.ts index dd49f6d5e..5760fb593 100644 --- a/backend/src/server/routes/v2/user-router.ts +++ b/backend/src/server/routes/v2/user-router.ts @@ -2,6 +2,7 @@ import { z } from "zod"; import { AuthTokenSessionsSchema, OrganizationsSchema, UserEncryptionKeysSchema, UsersSchema } from "@app/db/schemas"; import { ApiKeysSchema } from "@app/db/schemas/api-keys"; +import { getConfig } from "@app/lib/config/env"; import { authRateLimit, readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; import { AuthMethod, AuthMode } from "@app/services/auth/auth-type"; @@ -68,6 +69,38 @@ export const registerUserRouter = async (server: FastifyZodProvider) => { } }); + server.route({ + method: "POST", + url: "/me/users/merge-user", + config: { + rateLimit: writeLimit + }, + schema: { + body: z.object({ + username: z.string().trim() + }), + response: { + 200: z.object({ + user: UsersSchema + }) + } + }, + preHandler: verifyAuth([AuthMode.JWT]), + handler: async (req, res) => { + const appCfg = getConfig(); + const user = await server.services.user.mergeUsers(req.permission.id, req.body.username); + void res.cookie("jid", "", { + httpOnly: true, + path: "/", + sameSite: "strict", + secure: appCfg.HTTPS_ENABLED + }); + return { + user + }; + } + }); + server.route({ method: "PATCH", url: "/me/mfa", diff --git a/backend/src/services/auth-token/auth-token-service.ts b/backend/src/services/auth-token/auth-token-service.ts index bd35f3ae1..5d68a4e94 100644 --- a/backend/src/services/auth-token/auth-token-service.ts +++ b/backend/src/services/auth-token/auth-token-service.ts @@ -30,13 +30,14 @@ export const getTokenConfig = (tokenType: TokenType) => { case TokenType.TOKEN_EMAIL_VERIFICATION: { // generate random 6-digit code const token = String(crypto.randomInt(10 ** 5, 10 ** 6 - 1)); + const triesLeft = 3; const expiresAt = new Date(new Date().getTime() + 86400000); - return { token, expiresAt }; + return { token, triesLeft, expiresAt }; } case TokenType.TOKEN_EMAIL_MFA: { // generate random 6-digit code const token = String(crypto.randomInt(10 ** 5, 10 ** 6 - 1)); - const triesLeft = 5; + const triesLeft = 3; const expiresAt = new Date(new Date().getTime() + 300000); return { token, triesLeft, expiresAt }; } diff --git a/backend/src/services/org-membership/org-membership-dal.ts b/backend/src/services/org-membership/org-membership-dal.ts new file mode 100644 index 000000000..9990d9c3d --- /dev/null +++ b/backend/src/services/org-membership/org-membership-dal.ts @@ -0,0 +1,13 @@ +import { TDbClient } from "@app/db"; +import { TableName } from "@app/db/schemas"; +import { ormify } from "@app/lib/knex"; + +export type TOrgMembershipDALFactory = ReturnType; + +export const orgMembershipDALFactory = (db: TDbClient) => { + const orgMembershipOrm = ormify(db, TableName.OrgMembership); + + return { + ...orgMembershipOrm + }; +}; diff --git a/backend/src/services/user/user-service.ts b/backend/src/services/user/user-service.ts index 453848bf7..552ddff11 100644 --- a/backend/src/services/user/user-service.ts +++ b/backend/src/services/user/user-service.ts @@ -1,20 +1,34 @@ import { BadRequestError } from "@app/lib/errors"; import { TAuthTokenServiceFactory } from "@app/services/auth-token/auth-token-service"; import { TokenType } from "@app/services/auth-token/auth-token-types"; +import { TOrgDALFactory } from "@app/services/org/org-dal"; +import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; +import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; import { AuthMethod } from "../auth/auth-type"; import { TUserDALFactory } from "./user-dal"; +// TODO: Pick all of these type TUserServiceFactoryDep = { userDAL: TUserDALFactory; + userAliasDAL: TUserAliasDALFactory; + orgDAL: TOrgDALFactory; + orgMembershipDAL: TOrgMembershipDALFactory; tokenService: TAuthTokenServiceFactory; smtpService: TSmtpService; }; export type TUserServiceFactory = ReturnType; -export const userServiceFactory = ({ userDAL, tokenService, smtpService }: TUserServiceFactoryDep) => { +export const userServiceFactory = ({ + userDAL, + userAliasDAL, + // orgDAL, + orgMembershipDAL, + tokenService, + smtpService +}: TUserServiceFactoryDep) => { const sendEmailVerificationCode = async (userId: string) => { console.log("sendEmailVerificationCode userId: ", userId); const user = await userDAL.findById(userId); @@ -78,6 +92,68 @@ export const userServiceFactory = ({ userDAL, tokenService, smtpService }: TUser return users; }; + /** + * Merges two users with the same email. Specifically: + * - Deletes the current user with id [userId] and transfers any resources to the user with username [username] + * @param userId + * @param username + */ + const mergeUsers = async (userId: string, username: string) => { + const targetUser = await userDAL.transaction(async (tx) => { + const myUser = await userDAL.findById(userId, tx); + if (!myUser || !myUser.isEmailVerified) throw new BadRequestError({}); + + const mergeUser = await userDAL.findOne( + { + username + }, + tx + ); + if (!mergeUser || !mergeUser.isEmailVerified) throw new BadRequestError({}); + + if (myUser.email !== mergeUser.email) throw new BadRequestError({}); + + const mergeUserOrgMembershipSet = new Set( + (await orgMembershipDAL.find({ userId: mergeUser.id }, { tx })).map((m) => m.orgId) + ); + const myOrgMemberships = (await orgMembershipDAL.find({ userId: myUser.id }, { tx })).filter( + (m) => !mergeUserOrgMembershipSet.has(m.orgId) + ); + + const userAliases = await userAliasDAL.find( + { + userId: myUser.id + }, + { tx } + ); + await userDAL.deleteById(myUser.id, tx); + + if (myOrgMemberships.length) { + await orgMembershipDAL.insertMany( + myOrgMemberships.map((orgMembership) => ({ + ...orgMembership, + userId: mergeUser.id + })), + tx + ); + } + + if (userAliases.length) { + await userAliasDAL.insertMany( + userAliases.map((userAlias) => ({ + ...userAlias, + userId: mergeUser.id + })), + tx + ); + } + + return mergeUser; + }); + + return targetUser; + }; + const toggleUserMfa = async (userId: string, isMfaEnabled: boolean) => { const user = await userDAL.findById(userId); @@ -143,6 +219,7 @@ export const userServiceFactory = ({ userDAL, tokenService, smtpService }: TUser sendEmailVerificationCode, verifyEmailVerificationCode, listUsersWithSameEmail, + mergeUsers, toggleUserMfa, updateUserName, updateAuthMethods, diff --git a/frontend/src/hooks/api/users/index.tsx b/frontend/src/hooks/api/users/index.tsx index a8ad89f4c..27f4d30e4 100644 --- a/frontend/src/hooks/api/users/index.tsx +++ b/frontend/src/hooks/api/users/index.tsx @@ -1,11 +1,12 @@ export { useAddUserToWsE2EE, useAddUserToWsNonE2EE, + useMergeUsers, useSendEmailVerificationCode, - useVerifyEmailVerificationCode -} from "./mutation"; + useVerifyEmailVerificationCode} from "./mutation"; export { fetchOrgUsers, + fetchUsersWithMyEmail, useAddUserToOrg, useCreateAPIKey, useDeleteAPIKey, @@ -19,10 +20,10 @@ export { useGetOrgUsers, useGetUser, useGetUserAction, + useListUsersWithMyEmail, useLogoutUser, useRegisterUserAction, useRevokeMySessions, useUpdateMfaEnabled, useUpdateOrgUserRole, - useUpdateUserAuthMethods -} from "./queries"; + useUpdateUserAuthMethods} from "./queries"; diff --git a/frontend/src/hooks/api/users/mutation.tsx b/frontend/src/hooks/api/users/mutation.tsx index e1e939105..9bebd84cd 100644 --- a/frontend/src/hooks/api/users/mutation.tsx +++ b/frontend/src/hooks/api/users/mutation.tsx @@ -7,7 +7,8 @@ import { import { apiRequest } from "@app/config/request"; import { workspaceKeys } from "../workspace/queries"; -import { AddUserToWsDTOE2EE, AddUserToWsDTONonE2EE } from "./types"; +import { userKeys } from "./queries"; +import { AddUserToWsDTOE2EE, AddUserToWsDTONonE2EE, User } from "./types"; export const useAddUserToWsE2EE = () => { const queryClient = useQueryClient(); @@ -72,12 +73,27 @@ export const useSendEmailVerificationCode = () => { }; export const useVerifyEmailVerificationCode = () => { + const queryClient = useQueryClient(); return useMutation({ mutationFn: async ({ code }: { code: string }) => { await apiRequest.post("/api/v2/users/me/emails/verify", { code }); return {}; + }, + onSuccess: () => { + queryClient.invalidateQueries(userKeys.usersWithMyEmail); + } + }); +}; + +export const useMergeUsers = () => { + return useMutation({ + mutationFn: async ({ username }: { username: string }) => { + const { data } = await apiRequest.post<{ user: User }>("/api/v2/users/me/users/merge-user", { + username + }); + return data; } }); }; diff --git a/frontend/src/hooks/api/users/queries.tsx b/frontend/src/hooks/api/users/queries.tsx index a443c6750..9bec3f19e 100644 --- a/frontend/src/hooks/api/users/queries.tsx +++ b/frontend/src/hooks/api/users/queries.tsx @@ -26,7 +26,8 @@ export const userKeys = { myAPIKeys: ["api-keys"] as const, myAPIKeysV2: ["api-keys-v2"] as const, mySessions: ["sessions"] as const, - myOrganizationProjects: (orgId: string) => [{ orgId }, "organization-projects"] as const + myOrganizationProjects: (orgId: string) => [{ orgId }, "organization-projects"] as const, + usersWithMyEmail: ["users-with-my-email"] as const }; export const fetchUserDetails = async () => { @@ -351,3 +352,20 @@ export const useGetMyOrganizationProjects = (orgId: string) => { enabled: true }); }; + +export const fetchUsersWithMyEmail = async () => { + const { + data: { users } + } = await apiRequest.get<{ users: User[] }>("/api/v2/users/me/users/same-email"); + return users; +}; + +export const useListUsersWithMyEmail = () => { + return useQuery({ + queryKey: userKeys.usersWithMyEmail, + queryFn: async () => { + return fetchUsersWithMyEmail(); + }, + enabled: true + }); +}; diff --git a/frontend/src/views/Signup/SignupSSO.tsx b/frontend/src/views/Signup/SignupSSO.tsx index d74da3639..d56a26347 100644 --- a/frontend/src/views/Signup/SignupSSO.tsx +++ b/frontend/src/views/Signup/SignupSSO.tsx @@ -1,7 +1,11 @@ import { useState } from "react"; import jwt_decode from "jwt-decode"; -import { BackupPDFStep, EmailConfirmationStep,UserInfoSSOStep } from "./components"; +import { + BackupPDFStep, + EmailConfirmationStep, + MergeUsersStep, + UserInfoSSOStep} from "./components"; type Props = { providerAuthToken: string; @@ -11,7 +15,9 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { const [step, setStep] = useState(0); const [password, setPassword] = useState(""); - const { username, organizationName, firstName, lastName } = jwt_decode(providerAuthToken) as any; + const { username, email, organizationName, firstName, lastName } = jwt_decode( + providerAuthToken + ) as any; const renderView = () => { switch (step) { @@ -19,6 +25,7 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { return ( { /> ); case 1: - return ; + return ; case 2: + return ; + case 3: return ( ); diff --git a/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx b/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx index e9b0a6e84..c22db1ee0 100644 --- a/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx +++ b/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx @@ -3,11 +3,19 @@ import { useState } from "react"; import ReactCodeInput from "react-code-input"; -// import Error from "@app/components/basic/Error"; +import Error from "@app/components/basic/Error"; import { createNotification } from "@app/components/notifications"; import { Button } from "@app/components/v2"; import { useUser } from "@app/context"; -import { useSendEmailVerificationCode, useVerifyEmailVerificationCode } from "@app/hooks/api"; +import { + fetchUsersWithMyEmail, + useSendEmailVerificationCode, + useVerifyEmailVerificationCode} from "@app/hooks/api"; + +type Props = { + email: string; + setStep: (step: number) => void; +}; // The style for the verification code input const props = { @@ -47,10 +55,10 @@ const propsPhone = { } } as const; -export const EmailConfirmationStep = () => { +export const EmailConfirmationStep = ({ email, setStep }: Props) => { const { user } = useUser(); const [code, setCode] = useState(""); - // const [codeError, setCodeError] = useState(false); + const [codeError, setCodeError] = useState(false); const [isResendingVerificationEmail] = useState(false); const [isLoading] = useState(false); @@ -59,22 +67,32 @@ export const EmailConfirmationStep = () => { const checkCode = async () => { try { - console.log("checkCode code: ", code); await verifyEmailVerificationCode({ code }); - console.log("checkCode 2"); + setCodeError(false); + + const usersWithSameEmail = await fetchUsersWithMyEmail(); + + if (usersWithSameEmail.length > 1) { + setStep(2); + } + + createNotification({ + text: "Successfully verified code", + type: "success" + }); } catch (err) { createNotification({ text: "Failed to verify code", type: "error" }); } + + setCode(""); }; const resendCode = async () => { try { - console.log("resendCode"); await sendEmailVerificationCode(); - console.log("resendCode"); } catch (err) { createNotification({ text: "Failed to resend code", @@ -86,7 +104,7 @@ export const EmailConfirmationStep = () => { return (

- We've sent a verification code to + We've sent a verification code to {email}

{user?.email} @@ -113,7 +131,7 @@ export const EmailConfirmationStep = () => { className="mt-2 mb-2" />

- {/* {codeError && } */} + {codeError && }
@@ -122,7 +122,7 @@ export const LDAPStep = ({ setStep }: Props) => {
)} diff --git a/frontend/src/views/Signup/SignupSSO.tsx b/frontend/src/views/Signup/SignupSSO.tsx index d56a26347..09c707629 100644 --- a/frontend/src/views/Signup/SignupSSO.tsx +++ b/frontend/src/views/Signup/SignupSSO.tsx @@ -5,7 +5,8 @@ import { BackupPDFStep, EmailConfirmationStep, MergeUsersStep, - UserInfoSSOStep} from "./components"; + UserInfoSSOStep +} from "./components"; type Props = { providerAuthToken: string; @@ -15,9 +16,8 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { const [step, setStep] = useState(0); const [password, setPassword] = useState(""); - const { username, email, organizationName, firstName, lastName } = jwt_decode( - providerAuthToken - ) as any; + const { username, email, organizationName, organizationSlug, firstName, lastName, authType } = + jwt_decode(providerAuthToken) as any; const renderView = () => { switch (step) { @@ -37,7 +37,13 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { case 1: return ; case 2: - return ; + return ( + + ); case 3: return ( diff --git a/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx b/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx index c22db1ee0..f3a36c8dc 100644 --- a/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx +++ b/frontend/src/views/Signup/components/EmailConfirmationStep/EmailConfirmationStep.tsx @@ -6,11 +6,11 @@ import ReactCodeInput from "react-code-input"; import Error from "@app/components/basic/Error"; import { createNotification } from "@app/components/notifications"; import { Button } from "@app/components/v2"; -import { useUser } from "@app/context"; import { fetchUsersWithMyEmail, useSendEmailVerificationCode, - useVerifyEmailVerificationCode} from "@app/hooks/api"; + useVerifyEmailVerificationCode +} from "@app/hooks/api"; type Props = { email: string; @@ -56,7 +56,6 @@ const propsPhone = { } as const; export const EmailConfirmationStep = ({ email, setStep }: Props) => { - const { user } = useUser(); const [code, setCode] = useState(""); const [codeError, setCodeError] = useState(false); const [isResendingVerificationEmail] = useState(false); @@ -106,9 +105,6 @@ export const EmailConfirmationStep = ({ email, setStep }: Props) => {

We've sent a verification code to {email}

-

- {user?.email} -

{ +export const MergeUsersStep = ({ username, authType, organizationSlug }: Props) => { const router = useRouter(); + const [isOpen, setIsOpen] = useState(false); + const [targetUsername, setTargetUsername] = useState(""); const { data: users, isLoading: isLoadingUsers } = useListUsersWithMyEmail(); const { mutateAsync: mergeUser, isLoading: isLoadingMerge } = useMergeUsers(); - const handleMergeUser = async (targetUsername: string) => { + const handleMergeUser = async (mergeWithUsername: string) => { try { - console.log("merge A"); - await mergeUser({ username: targetUsername }); - // TODO: logout, make user re-login - console.log("merge B"); + if (!mergeWithUsername) return; + await mergeUser({ username: mergeWithUsername }); createNotification({ text: "Successfully merged user", type: "success" }); - router.push("/login"); + setIsOpen(false); + + switch (authType) { + case UserAliasType.SAML: { + window.open(`/api/v1/sso/redirect/saml2/organizations/${organizationSlug}`); + window.close(); + break; + } + case UserAliasType.LDAP: { + router.push(`/login/ldap?organizationSlug=${organizationSlug}`); + break; + } + default: { + router.push("/login"); + break; + } + } + + setTargetUsername(""); } catch (err) { console.error(err); createNotification({ @@ -72,14 +96,16 @@ export const MergeUsersStep = ({ username }: Props) => { return ( {`${user.firstName ?? ""} ${user.lastName ?? ""}`} - {username} + {user.username} @@ -97,6 +123,35 @@ export const MergeUsersStep = ({ username }: Props) => { + + +

+ The merge operation will transfer / consolidate your existing organization membership to + the target user you're merging with. +

+

+ If the target user is not yet part of the same organization, then they will be added to + it under your current organization membership. Conversely, if the target user is already + part of the organization, then their existing organization membership will remain. +

+

+ Once the merge operation is complete, you'll be prompted to re-login. +

+
+ + +
+
+
); }; diff --git a/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx b/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx index d15e57f47..6255ae386 100644 --- a/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx +++ b/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx @@ -17,6 +17,7 @@ import SecurityClient from "@app/components/utilities/SecurityClient"; import { Button, Input } from "@app/components/v2"; import { completeAccountSignup, useSelectOrganization } from "@app/hooks/api/auth/queries"; import { fetchOrganizations } from "@app/hooks/api/organization/queries"; +import { sendEmailVerificationCode } from "@app/hooks/api/users/mutation"; import ProjectService from "@app/services/ProjectService"; // eslint-disable-next-line new-cap @@ -205,10 +206,11 @@ export const UserInfoSSOStep = ({ if (email) { // move to verify email + await sendEmailVerificationCode(); setStep(1); } else { // move to backup PDF step - setStep(2); + setStep(3); } } catch (error) { setIsLoading(false); From 80da2a19aae84202ede1b8ffe32d3f38395a7ec6 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Fri, 26 Apr 2024 22:30:07 -0700 Subject: [PATCH 05/46] Add TRUST_SAML_EMAILS and TRUST_LDAP_EMAILS opts --- .../ldap-config/ldap-config-service.ts | 4 +- .../saml-config/saml-config-service.ts | 4 +- backend/src/lib/config/env.ts | 3 + .../src/services/auth/auth-login-service.ts | 3 + .../src/services/auth/auth-signup-service.ts | 5 - docs/self-hosting/configuration/envars.mdx | 316 ++++++++++-------- .../OrgMembersSection/OrgMembersTable.tsx | 2 - frontend/src/views/Signup/SignupSSO.tsx | 14 +- .../UserInfoSSOStep/UserInfoSSOStep.tsx | 12 +- 9 files changed, 204 insertions(+), 159 deletions(-) diff --git a/backend/src/ee/services/ldap-config/ldap-config-service.ts b/backend/src/ee/services/ldap-config/ldap-config-service.ts index d6fa72c27..ce7414747 100644 --- a/backend/src/ee/services/ldap-config/ldap-config-service.ts +++ b/backend/src/ee/services/ldap-config/ldap-config-service.ts @@ -437,7 +437,7 @@ export const ldapConfigServiceFactory = ({ { username: uniqueUsername, email: emails[0], - isEmailVerified: false, + isEmailVerified: appCfg.TRUST_LDAP_EMAILS, firstName, lastName, authMethods: [], @@ -557,7 +557,7 @@ export const ldapConfigServiceFactory = ({ authTokenType: AuthTokenType.PROVIDER_TOKEN, userId: user.id, username: user.username, - ...(user.email && { email: user.email }), + ...(user.email && { email: user.email, isEmailVerified: user.isEmailVerified }), firstName, lastName, organizationName: organization.name, diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index a4785132b..4d824613f 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -374,7 +374,7 @@ export const samlConfigServiceFactory = ({ { username: uniqueUsername, email, - isEmailVerified: false, + isEmailVerified: appCfg.TRUST_SAML_EMAILS, firstName, lastName, authMethods: [], @@ -414,7 +414,7 @@ export const samlConfigServiceFactory = ({ authTokenType: AuthTokenType.PROVIDER_TOKEN, userId: user.id, username: user.username, - ...(user.email && { email: user.email }), + ...(user.email && { email: user.email, isEmailVerified: user.isEmailVerified }), firstName, lastName, organizationName: organization.name, diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 4d3d55ffd..8a365f284 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -98,6 +98,9 @@ const envSchema = z CLIENT_ID_GITLAB: zpStr(z.string().optional()), CLIENT_SECRET_GITLAB: zpStr(z.string().optional()), URL_GITLAB_URL: zpStr(z.string().optional().default(GITLAB_URL)), + // email verification + TRUST_SAML_EMAILS: zodStrBool.default("false"), + TRUST_LDAP_EMAILS: zodStrBool.default("false"), // SECRET-SCANNING SECRET_SCANNING_WEBHOOK_PROXY: zpStr(z.string().optional()), SECRET_SCANNING_WEBHOOK_SECRET: zpStr(z.string().optional()), diff --git a/backend/src/services/auth/auth-login-service.ts b/backend/src/services/auth/auth-login-service.ts index 5d81eaae1..4d2a302c6 100644 --- a/backend/src/services/auth/auth-login-service.ts +++ b/backend/src/services/auth/auth-login-service.ts @@ -361,6 +361,7 @@ export const authLoginServiceFactory = ({ user = await userDAL.create({ username: email, email, + isEmailVerified: true, firstName, lastName, authMethods: [authMethod], @@ -374,6 +375,8 @@ export const authLoginServiceFactory = ({ authTokenType: AuthTokenType.PROVIDER_TOKEN, userId: user.id, username: user.username, + email: user.email, + isEmailVerified: user.isEmailVerified, firstName: user.firstName, lastName: user.lastName, authMethod, diff --git a/backend/src/services/auth/auth-signup-service.ts b/backend/src/services/auth/auth-signup-service.ts index 86693df8d..31ca5552f 100644 --- a/backend/src/services/auth/auth-signup-service.ts +++ b/backend/src/services/auth/auth-signup-service.ts @@ -135,11 +135,6 @@ export const authSignupServiceFactory = ({ userAgent, authorization }: TCompleteAccountSignupDTO) => { - console.log("completeEmailAccountSignup args: ", { - email, - firstName, - lastName - }); const user = await userDAL.findOne({ username: email }); if (!user || (user && user.isAccepted)) { throw new Error("Failed to complete account for complete user"); diff --git a/docs/self-hosting/configuration/envars.mdx b/docs/self-hosting/configuration/envars.mdx index 4c1456d3b..e9f4431a4 100644 --- a/docs/self-hosting/configuration/envars.mdx +++ b/docs/self-hosting/configuration/envars.mdx @@ -3,30 +3,34 @@ title: "Configurations" description: "Read how to configure environment variables for self-hosted Infisical." --- - -Infisical accepts all configurations via environment variables. For a minimal self-hosted instance, at least `ENCRYPTION_KEY`, `AUTH_SECRET`, `DB_CONNECTION_URI` and `REDIS_URL` must be defined. +Infisical accepts all configurations via environment variables. For a minimal self-hosted instance, at least `ENCRYPTION_KEY`, `AUTH_SECRET`, `DB_CONNECTION_URI` and `REDIS_URL` must be defined. However, you can configure additional settings to activate more features as needed. -## General platform +## General platform + Used to configure platform-specific security and operational settings - Must be a random 16 byte hex string. Can be generated with `openssl rand -hex 16` + Must be a random 16 byte hex string. Can be generated with `openssl rand -hex + 16` - Must be a random 32 byte base64 string. Can be generated with `openssl rand -base64 32` + Must be a random 32 byte base64 string. Can be generated with `openssl rand + -base64 32` - Must be an absolute URL including the protocol (e.g. https://app.infisical.com). + Must be an absolute URL including the protocol (e.g. + https://app.infisical.com). -## Data Layer +## Data Layer + The platform utilizes Postgres to persist all of its data and Redis for caching and backgroud tasks - Postgres database connection string. + Postgres database connection string. @@ -39,9 +43,8 @@ The platform utilizes Postgres to persist all of its data and Redis for caching Redis connection string. - - ## Email service + Without email configuration, Infisical's core functions like sign-up/login and secret operations work, but this disables multi-factor authentication, email invites for projects, alerts for suspicious logins, and all other email-dependent features. @@ -49,25 +52,36 @@ Without email configuration, Infisical's core functions like sign-up/login and s Hostname to connect to for establishing SMTP connections - - Credential to connect to host (e.g. team@infisical.com) - +{" "} - - Credential to connect to host - + + Credential to connect to host (e.g. team@infisical.com) + - - Port to connect to for establishing SMTP connections - +{" "} - - If true, use TLS when connecting to host. If false, TLS will be used if STARTTLS is supported - + + Credential to connect to host + - - Email address to be used for sending emails - +{" "} + + + Port to connect to for establishing SMTP connections + + +{" "} + + + If true, use TLS when connecting to host. If false, TLS will be used if + STARTTLS is supported + + +{" "} + + + Email address to be used for sending emails + Name label to be used in From field (e.g. Team) @@ -76,25 +90,25 @@ Without email configuration, Infisical's core functions like sign-up/login and s - 1. Create an account and configure [SendGrid](https://sendgrid.com) to send emails. - 2. Create a SendGrid API Key under Settings > [API Keys](https://app.sendgrid.com/settings/api_keys) - 3. Set a name for your API Key, we recommend using "Infisical," and select the "Restricted Key" option. You will need to enable the "Mail Send" permission as shown below: +1. Create an account and configure [SendGrid](https://sendgrid.com) to send emails. +2. Create a SendGrid API Key under Settings > [API Keys](https://app.sendgrid.com/settings/api_keys) +3. Set a name for your API Key, we recommend using "Infisical," and select the "Restricted Key" option. You will need to enable the "Mail Send" permission as shown below: - ![creating sendgrid api key](../../images/self-hosting/configuration/email/email-sendgrid-create-key.png) +![creating sendgrid api key](../../images/self-hosting/configuration/email/email-sendgrid-create-key.png) - ![setting sendgrid api key restriction](../../images/self-hosting/configuration/email/email-sendgrid-restrictions.png) +![setting sendgrid api key restriction](../../images/self-hosting/configuration/email/email-sendgrid-restrictions.png) - 4. With the API Key, you can now set your SMTP environment variables: +4. With the API Key, you can now set your SMTP environment variables: - ``` - SMTP_HOST=smtp.sendgrid.net - SMTP_USERNAME=apikey - SMTP_PASSWORD=SG.rqFsfjxYPiqE1lqZTgD_lz7x8IVLx # your SendGrid API Key from step above - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails - SMTP_FROM_NAME=Infisical - ``` +``` +SMTP_HOST=smtp.sendgrid.net +SMTP_USERNAME=apikey +SMTP_PASSWORD=SG.rqFsfjxYPiqE1lqZTgD_lz7x8IVLx # your SendGrid API Key from step above +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails +SMTP_FROM_NAME=Infisical +``` Remember that you will need to restart Infisical for this to work properly. @@ -105,19 +119,20 @@ Without email configuration, Infisical's core functions like sign-up/login and s 1. Create an account and configure [Mailgun](https://www.mailgun.com) to send emails. 2. Obtain your Mailgun credentials in Sending > Overview > SMTP - ![obtain mailhog api key estriction](../../images/self-hosting/configuration/email/email-mailhog-credentials.png) +![obtain mailhog api key estriction](../../images/self-hosting/configuration/email/email-mailhog-credentials.png) - 3. With your Mailgun credentials, you can now set up your SMTP environment variables: +3. With your Mailgun credentials, you can now set up your SMTP environment variables: + +``` +SMTP_HOST=smtp.mailgun.org # obtained from credentials page +SMTP_USERNAME=postmaster@example.mailgun.org # obtained from credentials page +SMTP_PASSWORD=password # obtained from credentials page +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails +SMTP_FROM_NAME=Infisical +``` - ``` - SMTP_HOST=smtp.mailgun.org # obtained from credentials page - SMTP_USERNAME=postmaster@example.mailgun.org # obtained from credentials page - SMTP_PASSWORD=password # obtained from credentials page - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails - SMTP_FROM_NAME=Infisical - ``` @@ -149,6 +164,7 @@ Without email configuration, Infisical's core functions like sign-up/login and s SMTP_FROM_NAME=Infisical ``` + @@ -160,30 +176,32 @@ Without email configuration, Infisical's core functions like sign-up/login and s 1. Create an account and configure [SocketLabs](https://www.socketlabs.com/) to send emails. 2. From the dashboard, navigate to SMTP Credentials > SMTP & APIs > SMTP Credentials to obtain your SocketLabs SMTP credentials. - ![opening SocketLabs dashboard](../../images/self-hosting/configuration/email/email-socketlabs-dashboard.png) +![opening SocketLabs dashboard](../../images/self-hosting/configuration/email/email-socketlabs-dashboard.png) - ![obtaining SocketLabs credentials](../../images/self-hosting/configuration/email/email-socketlabs-credentials.png) +![obtaining SocketLabs credentials](../../images/self-hosting/configuration/email/email-socketlabs-credentials.png) - 3. With your SocketLabs SMTP credentials, you can now set up your SMTP environment variables: +3. With your SocketLabs SMTP credentials, you can now set up your SMTP environment variables: - ``` - SMTP_HOST=smtp.socketlabs.com - SMTP_USERNAME=username # obtained from your credentials - SMTP_PASSWORD=password # obtained from your credentials - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails - SMTP_FROM_NAME=Infisical - ``` +``` +SMTP_HOST=smtp.socketlabs.com +SMTP_USERNAME=username # obtained from your credentials +SMTP_PASSWORD=password # obtained from your credentials +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails +SMTP_FROM_NAME=Infisical +``` - - The `SMTP_FROM_ADDRESS` environment variable should be an email for an - authenticated domain under Configuration > Domain Management in SocketLabs. - For example, if you're using SocketLabs in sandbox mode, then you may use an - email like `team@sandbox.socketlabs.dev`. - +{" "} - ![SocketLabs domain management](../../images/self-hosting/configuration/email/email-socketlabs-domains.png) + + The `SMTP_FROM_ADDRESS` environment variable should be an email for an + authenticated domain under Configuration > Domain Management in SocketLabs. + For example, if you're using SocketLabs in sandbox mode, then you may use an + email like `team@sandbox.socketlabs.dev`. + + +![SocketLabs domain management](../../images/self-hosting/configuration/email/email-socketlabs-domains.png) Remember that you will need to restart Infisical for this to work properly. @@ -194,55 +212,57 @@ Without email configuration, Infisical's core functions like sign-up/login and s 1. Create an account on [Resend](https://resend.com). 2. Add a [Domain](https://resend.com/domains). - ![adding resend domain](../../images/self-hosting/configuration/email/email-resend-create-domain.png) +![adding resend domain](../../images/self-hosting/configuration/email/email-resend-create-domain.png) - 3. Create an [API Key](https://resend.com/api-keys). +3. Create an [API Key](https://resend.com/api-keys). - ![creating resend api key](../../images/self-hosting/configuration/email/email-resend-create-key.png) +![creating resend api key](../../images/self-hosting/configuration/email/email-resend-create-key.png) - 4. Go to the [SMTP page](https://resend.com/settings/smtp) and copy the values. +4. Go to the [SMTP page](https://resend.com/settings/smtp) and copy the values. - ![go to resend smtp settings](../../images/self-hosting/configuration/email/email-resend-smtp-settings.png) +![go to resend smtp settings](../../images/self-hosting/configuration/email/email-resend-smtp-settings.png) - 5. With the API Key, you can now set your SMTP environment variables variables: +5. With the API Key, you can now set your SMTP environment variables variables: + +``` +SMTP_HOST=smtp.resend.com +SMTP_USERNAME=resend +SMTP_PASSWORD=YOUR_API_KEY +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails +SMTP_FROM_NAME=Infisical +``` - ``` - SMTP_HOST=smtp.resend.com - SMTP_USERNAME=resend - SMTP_PASSWORD=YOUR_API_KEY - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=hey@example.com # your email address being used to send out emails - SMTP_FROM_NAME=Infisical - ``` Remember that you will need to restart Infisical for this to work properly. + Create an account and enable "less secure app access" in Gmail Account Settings > Security. This will allow applications like Infisical to authenticate with Gmail via your username and password. - ![Gmail secure app access](../../images/self-hosting/configuration/email/email-gmail-app-access.png) +![Gmail secure app access](../../images/self-hosting/configuration/email/email-gmail-app-access.png) - With your Gmail username and password, you can set your SMTP environment variables: +With your Gmail username and password, you can set your SMTP environment variables: - ``` - SMTP_HOST=smtp.gmail.com - SMTP_USERNAME=hey@gmail.com # your email - SMTP_PASSWORD=password # your password - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=hey@gmail.com - SMTP_FROM_NAME=Infisical - ``` +``` +SMTP_HOST=smtp.gmail.com +SMTP_USERNAME=hey@gmail.com # your email +SMTP_PASSWORD=password # your password +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=hey@gmail.com +SMTP_FROM_NAME=Infisical +``` As per the [notice](https://support.google.com/accounts/answer/6010255?hl=en) by Google, you should note that using Gmail credentials for SMTP configuration will only work for Google Workspace or Google Cloud Identity customers as of May 30, 2022. - Put differently, the SMTP configuration is only possible with business (not personal) Gmail credentials. +Put differently, the SMTP configuration is only possible with business (not personal) Gmail credentials. @@ -250,51 +270,51 @@ Without email configuration, Infisical's core functions like sign-up/login and s 1. Create an account and configure [Office365](https://www.office.com/) to send emails. - 2. With your login credentials, you can now set up your SMTP environment variables: +2. With your login credentials, you can now set up your SMTP environment variables: + +``` +SMTP_HOST=smtp.office365.com +SMTP_USERNAME=username@yourdomain.com # your username +SMTP_PASSWORD=password # your password +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=username@yourdomain.com +SMTP_FROM_NAME=Infisical +``` - ``` - SMTP_HOST=smtp.office365.com - SMTP_USERNAME=username@yourdomain.com # your username - SMTP_PASSWORD=password # your password - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=username@yourdomain.com - SMTP_FROM_NAME=Infisical - ``` 1. Create an account and configure [Zoho Mail](https://www.zoho.com/mail/) to send emails. - 2. With your email credentials, you can now set up your SMTP environment variables: +2. With your email credentials, you can now set up your SMTP environment variables: - ``` - SMTP_HOST=smtp.zoho.com - SMTP_USERNAME=username # your email - SMTP_PASSWORD=password # your password - SMTP_PORT=587 - SMTP_SECURE=true - SMTP_FROM_ADDRESS=hey@example.com # your personal Zoho email or domain-based email linked to Zoho Mail - SMTP_FROM_NAME=Infisical - ``` +``` +SMTP_HOST=smtp.zoho.com +SMTP_USERNAME=username # your email +SMTP_PASSWORD=password # your password +SMTP_PORT=587 +SMTP_SECURE=true +SMTP_FROM_ADDRESS=hey@example.com # your personal Zoho email or domain-based email linked to Zoho Mail +SMTP_FROM_NAME=Infisical +``` - - You can use either your personal Zoho email address like `you@zohomail.com` or - a domain-based email address like `you@yourdomain.com`. If using a - domain-based email address, then please make sure that you've configured and - verified it with Zoho Mail. - +{" "} + + + You can use either your personal Zoho email address like `you@zohomail.com` or + a domain-based email address like `you@yourdomain.com`. If using a + domain-based email address, then please make sure that you've configured and + verified it with Zoho Mail. + Remember that you will need to restart Infisical for this to work properly. +## Authentication - - - -## SSO based login By default, users can only login via email/password based login method. To login into Infisical with OAuth providers such as Google, configure the associated variables. @@ -335,33 +355,49 @@ To login into Infisical with OAuth providers such as Google, configure the assoc - Requires enterprise license. Please contact team@infisical.com to get more information. + Requires enterprise license. Please contact team@infisical.com to get more + information. - Requires enterprise license. Please contact team@infisical.com to get more information. + Requires enterprise license. Please contact team@infisical.com to get more + information. - Requires enterprise license. Please contact team@infisical.com to get more information. + Requires enterprise license. Please contact team@infisical.com to get more + information. - - Configure SAML organization slug to automatically redirect all users of your Infisical instance to the identity provider. + + Whether or not to trust emails from external SAML identity providers. If set + to `false` then users will be prompted to verify their email address upon + first login. + + + Whether or not to trust emails from external LDAP servers. If set to `false` + then users will be prompted to verify their email address upon first login. - - - + + Configure SAML organization slug to automatically redirect all users of your + Infisical instance to the identity provider. + ## Native secret integrations + To help you sync secrets from Infisical to services such as Github and Gitlab, Infisical provides native integrations out of the box. OAuth2 client ID for Heroku integration - + OAuth2 client secret for Heroku integration @@ -371,9 +407,11 @@ To help you sync secrets from Infisical to services such as Github and Gitlab, I OAuth2 client ID for Vercel integration - - OAuth2 client secret for Vercel integration - +{" "} + + + OAuth2 client secret for Vercel integration + OAuth2 slug for Vercel integration diff --git a/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx b/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx index 794168729..a14e09a67 100644 --- a/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx +++ b/frontend/src/views/Org/MembersPage/components/OrgMembersTab/components/OrgMembersSection/OrgMembersTable.tsx @@ -149,8 +149,6 @@ export const OrgMembersTable = ({ handlePopUpOpen, setCompleteInviteLink }: Prop [members, searchMemberFilter] ); - console.log("filterdUser: ", filterdUser); - return (
{ const [step, setStep] = useState(0); const [password, setPassword] = useState(""); - const { username, email, organizationName, organizationSlug, firstName, lastName, authType } = - jwt_decode(providerAuthToken) as any; + const { + username, + email, + organizationName, + organizationSlug, + firstName, + lastName, + authType, + isEmailVerified + } = jwt_decode(providerAuthToken) as any; const renderView = () => { switch (step) { @@ -25,7 +33,7 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { return ( void; username: string; - email?: string; + isEmailVerified?: boolean; password: string; setPassword: (value: string) => void; name: string; @@ -60,7 +60,7 @@ type Errors = { */ export const UserInfoSSOStep = ({ username, - email, + isEmailVerified, name, providerOrganizationName, password, @@ -204,13 +204,13 @@ export const UserInfoSSOStep = ({ localStorage.setItem("orgData.id", orgId); localStorage.setItem("projectData.id", project.id); - if (email) { + if (isEmailVerified) { + // move to backup PDF step + setStep(3); + } else { // move to verify email await sendEmailVerificationCode(); setStep(1); - } else { - // move to backup PDF step - setStep(3); } } catch (error) { setIsLoading(false); From a7af3a48d91f2d0f1b1bf8fce6b99d3ff4ef2aea Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Sun, 28 Apr 2024 19:09:12 -0700 Subject: [PATCH 06/46] Continue moving SCIM userId refs to orgMembershipId --- .infisicalignore | 3 +- backend/src/ee/routes/v1/scim-router.ts | 32 ++- .../ldap-config/ldap-config-service.ts | 8 +- .../services/license/__mocks__/licence-fns.ts | 4 +- .../src/ee/services/license/licence-fns.ts | 8 +- .../src/ee/services/license/license-types.ts | 4 +- .../saml-config/saml-config-service.ts | 8 +- backend/src/ee/services/scim/scim-fns.ts | 12 +- backend/src/ee/services/scim/scim-service.ts | 246 +++++++++++------- backend/src/ee/services/scim/scim-types.ts | 8 +- backend/src/server/routes/index.ts | 2 + backend/src/services/org/org-fns.ts | 2 + .../services/user-alias/user-alias-types.ts | 2 +- 13 files changed, 205 insertions(+), 134 deletions(-) diff --git a/.infisicalignore b/.infisicalignore index 348f9e327..d5cc9f15d 100644 --- a/.infisicalignore +++ b/.infisicalignore @@ -2,4 +2,5 @@ frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/IdentityRbacSection.tsx:generic-api-key:206 frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx:generic-api-key:304 frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/MemberRbacSection.tsx:generic-api-key:206 -frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx:generic-api-key:292 \ No newline at end of file +frontend/src/views/Project/MembersPage/components/MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx:generic-api-key:292 +docs/self-hosting/configuration/envars.mdx:generic-api-key:106 diff --git a/backend/src/ee/routes/v1/scim-router.ts b/backend/src/ee/routes/v1/scim-router.ts index dea0e3d70..ed2ce92db 100644 --- a/backend/src/ee/routes/v1/scim-router.ts +++ b/backend/src/ee/routes/v1/scim-router.ts @@ -152,8 +152,9 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log("GET /Users req.query: ", req.query); const users = await req.server.services.scim.listScimUsers({ - offset: req.query.startIndex, + startIndex: req.query.startIndex, limit: req.query.count, filter: req.query.filter, orgId: req.permission.orgId @@ -163,11 +164,11 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }); server.route({ - url: "/Users/:userId", + url: "/Users/:orgMembershipId", method: "GET", schema: { params: z.object({ - userId: z.string().trim() + orgMembershipId: z.string().trim() }), response: { 201: z.object({ @@ -192,8 +193,9 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`GET /Users/${req.params.orgMembershipId}`); const user = await req.server.services.scim.getScimUser({ - userId: req.params.userId, + orgMembershipId: req.params.orgMembershipId, orgId: req.permission.orgId }); return user; @@ -246,6 +248,8 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log("POST /Users req.body: ", req.body); + const primaryEmail = req.body.emails?.find((email) => email.primary)?.value; const user = await req.server.services.scim.createScimUser({ @@ -261,11 +265,11 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }); server.route({ - url: "/Users/:userId", + url: "/Users/:orgMembershipId", method: "DELETE", schema: { params: z.object({ - userId: z.string().trim() + orgMembershipId: z.string().trim() }), response: { 200: z.object({}) @@ -273,8 +277,9 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`DELETE /Users/${req.params.orgMembershipId}`); const user = await req.server.services.scim.deleteScimUser({ - userId: req.params.userId, + orgMembershipId: req.params.orgMembershipId, orgId: req.permission.orgId }); @@ -319,6 +324,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log("POST /Groups req.body: ", req.body); const group = await req.server.services.scim.createScimGroup({ orgId: req.permission.orgId, ...req.body @@ -359,6 +365,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log("GET /Groups req.query: ", req.query); const groups = await req.server.services.scim.listScimGroups({ orgId: req.permission.orgId, offset: req.query.startIndex, @@ -395,6 +402,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`GET /Groups/${req.params.groupId}`); const group = await req.server.services.scim.getScimGroup({ groupId: req.params.groupId, orgId: req.permission.orgId @@ -440,6 +448,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`PUT /Groups/${req.params.groupId} req.body: `, req.body); const group = await req.server.services.scim.updateScimGroupNamePut({ groupId: req.params.groupId, orgId: req.permission.orgId, @@ -501,6 +510,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`PATCH /Groups/${req.params.groupId} req.body: `, req.body); const group = await req.server.services.scim.updateScimGroupNamePatch({ groupId: req.params.groupId, orgId: req.permission.orgId, @@ -524,6 +534,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`DELETE /Groups/${req.params.groupId}`); const group = await req.server.services.scim.deleteScimGroup({ groupId: req.params.groupId, orgId: req.permission.orgId @@ -534,11 +545,11 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }); server.route({ - url: "/Users/:userId", + url: "/Users/:orgMembershipId", method: "PUT", schema: { params: z.object({ - userId: z.string().trim() + orgMembershipId: z.string().trim() }), body: z.object({ schemas: z.array(z.string()), @@ -574,8 +585,9 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { + console.log(`PUT /Users/${req.params.orgMembershipId} req.body: `, req.body); const user = await req.server.services.scim.replaceScimUser({ - userId: req.params.userId, + orgMembershipId: req.params.orgMembershipId, orgId: req.permission.orgId, active: req.body.active }); diff --git a/backend/src/ee/services/ldap-config/ldap-config-service.ts b/backend/src/ee/services/ldap-config/ldap-config-service.ts index ce7414747..f712a6ea4 100644 --- a/backend/src/ee/services/ldap-config/ldap-config-service.ts +++ b/backend/src/ee/services/ldap-config/ldap-config-service.ts @@ -31,7 +31,7 @@ import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal import { TUserDALFactory } from "@app/services/user/user-dal"; import { normalizeUsername } from "@app/services/user/user-fns"; import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; -import { TUserAliasType } from "@app/services/user-alias/user-alias-types"; +import { UserAliasType } from "@app/services/user-alias/user-alias-types"; import { TLicenseServiceFactory } from "../license/license-service"; import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-permission"; @@ -395,7 +395,7 @@ export const ldapConfigServiceFactory = ({ let userAlias = await userAliasDAL.findOne({ externalId, orgId, - aliasType: TUserAliasType.LDAP + aliasType: UserAliasType.LDAP }); const organization = await orgDAL.findOrgById(orgId); @@ -449,7 +449,7 @@ export const ldapConfigServiceFactory = ({ { userId: newUser.id, username, - aliasType: TUserAliasType.LDAP, + aliasType: UserAliasType.LDAP, externalId, emails, orgId @@ -564,7 +564,7 @@ export const ldapConfigServiceFactory = ({ organizationId: organization.id, organizationSlug: organization.slug, authMethod: AuthMethod.LDAP, - authType: TUserAliasType.LDAP, + authType: UserAliasType.LDAP, isUserCompleted, ...(relayState ? { diff --git a/backend/src/ee/services/license/__mocks__/licence-fns.ts b/backend/src/ee/services/license/__mocks__/licence-fns.ts index 20186718d..b5cbf103e 100644 --- a/backend/src/ee/services/license/__mocks__/licence-fns.ts +++ b/backend/src/ee/services/license/__mocks__/licence-fns.ts @@ -17,8 +17,8 @@ export const getDefaultOnPremFeatures = () => { customAlerts: false, auditLogs: false, auditLogsRetentionDays: 0, - samlSSO: true, - scim: true, + samlSSO: false, + scim: false, ldap: false, groups: false, status: null, diff --git a/backend/src/ee/services/license/licence-fns.ts b/backend/src/ee/services/license/licence-fns.ts index 5046ad125..8a4de57f1 100644 --- a/backend/src/ee/services/license/licence-fns.ts +++ b/backend/src/ee/services/license/licence-fns.ts @@ -24,10 +24,10 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ customAlerts: false, auditLogs: false, auditLogsRetentionDays: 0, - samlSSO: true, - scim: true, - ldap: true, - groups: true, + samlSSO: false, + scim: false, + ldap: false, + groups: false, status: null, trial_end: null, has_used_trial: true, diff --git a/backend/src/ee/services/license/license-types.ts b/backend/src/ee/services/license/license-types.ts index 2cc321373..1cea39a83 100644 --- a/backend/src/ee/services/license/license-types.ts +++ b/backend/src/ee/services/license/license-types.ts @@ -40,8 +40,8 @@ export type TFeatureSet = { customAlerts: false; auditLogs: false; auditLogsRetentionDays: 0; - samlSSO: true; - scim: true; + samlSSO: false; + scim: false; ldap: false; groups: false; status: null; diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index 4d824613f..2a7a6a60a 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -27,7 +27,7 @@ import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membe import { TUserDALFactory } from "@app/services/user/user-dal"; import { normalizeUsername } from "@app/services/user/user-fns"; import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; -import { TUserAliasType } from "@app/services/user-alias/user-alias-types"; +import { UserAliasType } from "@app/services/user-alias/user-alias-types"; import { TLicenseServiceFactory } from "../license/license-service"; import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-permission"; @@ -326,7 +326,7 @@ export const samlConfigServiceFactory = ({ const userAlias = await userAliasDAL.findOne({ externalId, orgId, - aliasType: TUserAliasType.SAML + aliasType: UserAliasType.SAML }); const organization = await orgDAL.findOrgById(orgId); @@ -385,7 +385,7 @@ export const samlConfigServiceFactory = ({ await userAliasDAL.create( { userId: newUser.id, - aliasType: TUserAliasType.SAML, + aliasType: UserAliasType.SAML, externalId, emails: email ? [email] : [], orgId @@ -421,7 +421,7 @@ export const samlConfigServiceFactory = ({ organizationId: organization.id, organizationSlug: organization.slug, authMethod: authProvider, - authType: TUserAliasType.SAML, + authType: UserAliasType.SAML, isUserCompleted, ...(relayState ? { diff --git a/backend/src/ee/services/scim/scim-fns.ts b/backend/src/ee/services/scim/scim-fns.ts index e816cffcf..8668ed5e1 100644 --- a/backend/src/ee/services/scim/scim-fns.ts +++ b/backend/src/ee/services/scim/scim-fns.ts @@ -2,31 +2,31 @@ import { TListScimGroups, TListScimUsers, TScimGroup, TScimUser } from "./scim-t export const buildScimUserList = ({ scimUsers, - offset, + startIndex, limit }: { scimUsers: TScimUser[]; - offset: number; + startIndex: number; limit: number; }): TListScimUsers => { return { Resources: scimUsers, itemsPerPage: limit, schemas: ["urn:ietf:params:scim:api:messages:2.0:ListResponse"], - startIndex: offset, + startIndex, totalResults: scimUsers.length }; }; export const buildScimUser = ({ - userId, + orgMembershipId, username, email, firstName, lastName, active }: { - userId: string; + orgMembershipId: string; username: string; email?: string | null; firstName: string; @@ -35,7 +35,7 @@ export const buildScimUser = ({ }): TScimUser => { const scimUser = { schemas: ["urn:ietf:params:scim:schemas:core:2.0:User"], - id: userId, + id: orgMembershipId, userName: username, displayName: `${firstName} ${lastName}`, name: { diff --git a/backend/src/ee/services/scim/scim-service.ts b/backend/src/ee/services/scim/scim-service.ts index 605003e4f..6700e7f05 100644 --- a/backend/src/ee/services/scim/scim-service.ts +++ b/backend/src/ee/services/scim/scim-service.ts @@ -2,7 +2,7 @@ import { ForbiddenError } from "@casl/ability"; import slugify from "@sindresorhus/slugify"; import jwt from "jsonwebtoken"; -import { OrgMembershipRole, OrgMembershipStatus, TableName, TGroups } from "@app/db/schemas"; +import { OrgMembershipRole, OrgMembershipStatus, TableName, TGroups, TOrgMemberships, TUsers } from "@app/db/schemas"; import { TGroupDALFactory } from "@app/ee/services/group/group-dal"; import { addUsersToGroupByUserIds, removeUsersFromGroupByUserIds } from "@app/ee/services/group/group-fns"; import { TUserGroupMembershipDALFactory } from "@app/ee/services/group/user-group-membership-dal"; @@ -11,16 +11,20 @@ import { getConfig } from "@app/lib/config/env"; import { BadRequestError, ScimRequestError, UnauthorizedError } from "@app/lib/errors"; import { alphaNumericNanoId } from "@app/lib/nanoid"; import { TOrgPermission } from "@app/lib/types"; -import { AuthMethod, AuthTokenType } from "@app/services/auth/auth-type"; +import { AuthTokenType } from "@app/services/auth/auth-type"; import { TGroupProjectDALFactory } from "@app/services/group-project/group-project-dal"; import { TOrgDALFactory } from "@app/services/org/org-dal"; import { deleteOrgMembership } from "@app/services/org/org-fns"; +import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TProjectBotDALFactory } from "@app/services/project-bot/project-bot-dal"; import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal"; import { TProjectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal"; import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; import { TUserDALFactory } from "@app/services/user/user-dal"; +import { normalizeUsername } from "@app/services/user/user-fns"; +import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; +import { UserAliasType } from "@app/services/user-alias/user-alias-types"; import { TLicenseServiceFactory } from "../license/license-service"; import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-permission"; @@ -47,11 +51,16 @@ import { type TScimServiceFactoryDep = { scimDAL: Pick; - userDAL: Pick; + userDAL: Pick< + TUserDALFactory, + "find" | "findOne" | "create" | "transaction" | "findUserEncKeyByUserIdsBatch" | "findById" + >; + userAliasDAL: TUserAliasDALFactory; // TODO: pick orgDAL: Pick< TOrgDALFactory, - "createMembership" | "findById" | "findMembership" | "deleteMembershipById" | "transaction" + "createMembership" | "findById" | "findMembership" | "deleteMembershipById" | "transaction" | "updateMembershipById" >; + orgMembershipDAL: TOrgMembershipDALFactory; // TODO: Pick projectDAL: Pick; projectMembershipDAL: Pick; groupDAL: Pick< @@ -64,7 +73,7 @@ type TScimServiceFactoryDep = { projectBotDAL: Pick; licenseService: Pick; permissionService: Pick; - smtpService: TSmtpService; + smtpService: Pick; }; export type TScimServiceFactory = ReturnType; @@ -75,7 +84,9 @@ export const scimServiceFactory = ({ licenseService, scimDAL, userDAL, + userAliasDAL, orgDAL, + orgMembershipDAL, projectDAL, projectMembershipDAL, groupDAL, @@ -162,8 +173,13 @@ export const scimServiceFactory = ({ }; // SCIM server endpoints - const listScimUsers = async ({ offset, limit, filter, orgId }: TListScimUsersDTO): Promise => { - console.log("listScimUsers"); // done + const listScimUsers = async ({ startIndex, limit, filter, orgId }: TListScimUsersDTO): Promise => { + console.log("listScimUsers args: ", { + startIndex, + limit, + filter, + orgId + }); // done const org = await orgDAL.findById(orgId); if (!org.scimEnabled) @@ -181,11 +197,11 @@ export const scimServiceFactory = ({ attributeName = "email"; } - return { [attributeName]: parsedValue }; + return { [attributeName]: parsedValue.replace(/"/g, "") }; }; const findOpts = { - ...(offset && { offset }), + ...(startIndex && { offset: startIndex - 1 }), ...(limit && { limit }) }; @@ -197,11 +213,9 @@ export const scimServiceFactory = ({ findOpts ); - console.log("orgDAL.findMembership users: ", users); - const scimUsers = users.map(({ id, username, firstName, lastName, email }) => buildScimUser({ - userId: id ?? "", + orgMembershipId: id ?? "", username, firstName: firstName ?? "", lastName: lastName ?? "", @@ -212,17 +226,20 @@ export const scimServiceFactory = ({ return buildScimUserList({ scimUsers, - offset, + startIndex, limit }); }; - const getScimUser = async ({ userId, orgId }: TGetScimUserDTO) => { - console.log("getScimUser"); // done + const getScimUser = async ({ orgMembershipId, orgId }: TGetScimUserDTO) => { + console.log("getScimUser args: ", { + orgMembershipId, + orgId + }); // done const [membership] = await orgDAL .findMembership({ - userId, - [`${TableName.OrgMembership}.orgId` as "id"]: orgId + [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId }) .catch(() => { throw new ScimRequestError({ @@ -246,7 +263,7 @@ export const scimServiceFactory = ({ console.log("getScimUser membership: ", membership); return buildScimUser({ - userId: membership.id, + orgMembershipId: membership.id, username: membership.username, email: membership.email ?? "", firstName: membership.firstName as string, @@ -256,7 +273,14 @@ export const scimServiceFactory = ({ }; const createScimUser = async ({ username, email, firstName, lastName, orgId }: TCreateScimUserDTO) => { - console.log("createScimUser"); // TODO: update implementation to always create a new user and be based on orgMembershipId + // do we get external ID or not? + console.log("createScimUser args: ", { + username, + email, + firstName, + lastName, + orgId + }); const org = await orgDAL.findById(orgId); if (!org) @@ -271,67 +295,85 @@ export const scimServiceFactory = ({ status: 403 }); - let user = await userDAL.findOne({ - username + const appCfg = getConfig(); + + const userAlias = await userAliasDAL.findOne({ + externalId: username, + orgId, + aliasType: UserAliasType.SAML }); - if (user) { - await userDAL.transaction(async (tx) => { - const [orgMembership] = await orgDAL.findMembership( + const { user: createdUser, orgMembership: createdOrgMembership } = await userDAL.transaction(async (tx) => { + let user: TUsers; + let orgMembership: TOrgMemberships; + if (userAlias) { + user = await userDAL.findById(userAlias.userId, tx); + orgMembership = await orgMembershipDAL.findOne( { userId: user.id, - [`${TableName.OrgMembership}.orgId` as "id"]: orgId - }, - { tx } - ); - if (orgMembership) - throw new ScimRequestError({ - detail: "User already exists in the database", - status: 409 - }); - - if (!orgMembership) { - await orgDAL.createMembership( - { - userId: user.id, - orgId, - inviteEmail: email, - role: OrgMembershipRole.Member, - status: OrgMembershipStatus.Invited - }, - tx - ); - } - }); - } else { - user = await userDAL.transaction(async (tx) => { - const newUser = await userDAL.create( - { - username, - email, - firstName, - lastName, - authMethods: [AuthMethod.EMAIL], - isGhost: false + orgId }, tx ); - await orgDAL.createMembership( + if (!orgMembership) { + orgMembership = await orgMembershipDAL.create( + { + userId: userAlias.userId, + inviteEmail: email, + orgId, + role: OrgMembershipRole.Member, + status: user.isAccepted ? OrgMembershipStatus.Accepted : OrgMembershipStatus.Invited // if user is fully completed, then set status to accepted, otherwise set it to invited so we can update it later + }, + tx + ); + } else if (orgMembership.status === OrgMembershipStatus.Invited && user.isAccepted) { + orgMembership = await orgMembershipDAL.updateById( + orgMembership.id, + { + status: OrgMembershipStatus.Accepted + }, + tx + ); + } + } else { + const uniqueUsername = await normalizeUsername(username, userDAL); + user = await userDAL.create( { + username: uniqueUsername, + email, + isEmailVerified: appCfg.TRUST_SAML_EMAILS, + firstName, + lastName, + authMethods: [], + isGhost: false + }, + tx + ); + await userAliasDAL.create( + { + userId: user.id, + aliasType: UserAliasType.SAML, + externalId: username, + emails: email ? [email] : [], + orgId + }, + tx + ); + orgMembership = await orgMembershipDAL.create( + { + userId: user.id, inviteEmail: email, orgId, - userId: newUser.id, role: OrgMembershipRole.Member, status: OrgMembershipStatus.Invited }, tx ); - return newUser; - }); - } + } - const appCfg = getConfig(); + return { user, orgMembership }; + }); if (email) { await smtpService.sendMail({ @@ -346,11 +388,11 @@ export const scimServiceFactory = ({ } return buildScimUser({ - userId: user.id, - username: user.username, - firstName: user.firstName as string, - lastName: user.lastName as string, - email: user.email ?? "", + orgMembershipId: createdOrgMembership.id, + username: createdUser.username, + firstName: createdUser.firstName as string, + lastName: createdUser.lastName as string, + email: createdUser.email ?? "", active: true }); }; @@ -406,7 +448,7 @@ export const scimServiceFactory = ({ } return buildScimUser({ - userId: membership.id, + orgMembershipId: membership.id, username: membership.username, email: membership.email, firstName: membership.firstName as string, @@ -415,12 +457,16 @@ export const scimServiceFactory = ({ }); }; - const replaceScimUser = async ({ userId, active, orgId }: TReplaceScimUserDTO) => { - console.log("replaceScimUser"); // done + const replaceScimUser = async ({ orgMembershipId, active, orgId }: TReplaceScimUserDTO) => { + console.log("replaceScimUser args: ", { + orgMembershipId, + orgId, + active + }); // done const [membership] = await orgDAL .findMembership({ - userId, - [`${TableName.OrgMembership}.orgId` as "id"]: orgId + [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId }) .catch(() => { throw new ScimRequestError({ @@ -453,7 +499,7 @@ export const scimServiceFactory = ({ } return buildScimUser({ - userId: membership.id, + orgMembershipId: membership.id, username: membership.username, email: membership.email, firstName: membership.firstName as string, @@ -462,19 +508,15 @@ export const scimServiceFactory = ({ }); }; - const deleteScimUser = async ({ userId, orgId }: TDeleteScimUserDTO) => { - console.log("deleteScimUser"); // done - const [membership] = await orgDAL - .findMembership({ - userId, - [`${TableName.OrgMembership}.orgId` as "id"]: orgId - }) - .catch(() => { - throw new ScimRequestError({ - detail: "User not found", - status: 404 - }); - }); + const deleteScimUser = async ({ orgMembershipId, orgId }: TDeleteScimUserDTO) => { + console.log("deleteScimUser args: ", { + orgMembershipId, + orgId + }); // done + const [membership] = await orgDAL.findMembership({ + [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId + }); if (!membership) throw new ScimRequestError({ @@ -593,12 +635,19 @@ export const scimServiceFactory = ({ return { group, newMembers: [] }; }); + const orgMemberships = await orgDAL.findMembership({ + orgId, + $in: { + userId: newGroup.newMembers.map((member) => member.id) + } + }); + return buildScimGroup({ groupId: newGroup.group.id, name: newGroup.group.name, - members: newGroup.newMembers.map((member) => ({ - value: member.id, - display: `${member.firstName} ${member.lastName}` + members: orgMemberships.map(({ id, firstName, lastName }) => ({ + value: id, + display: `${firstName} ${lastName}` })) }); }; @@ -627,15 +676,20 @@ export const scimServiceFactory = ({ groupId: group.id }); + const orgMemberships = await orgDAL.findMembership({ + orgId, + $in: { + userId: users.filter((user) => user.isPartOfGroup).map((user) => user.id) + } + }); + return buildScimGroup({ groupId: group.id, name: group.name, - members: users - .filter((user) => user.isPartOfGroup) - .map((user) => ({ - value: user.id, - display: `${user.firstName} ${user.lastName}` - })) + members: orgMemberships.map(({ id, firstName, lastName }) => ({ + value: id, + display: `${firstName} ${lastName}` + })) }); }; diff --git a/backend/src/ee/services/scim/scim-types.ts b/backend/src/ee/services/scim/scim-types.ts index 73d0ebe78..a82f08656 100644 --- a/backend/src/ee/services/scim/scim-types.ts +++ b/backend/src/ee/services/scim/scim-types.ts @@ -12,7 +12,7 @@ export type TDeleteScimTokenDTO = { // SCIM server endpoint types export type TListScimUsersDTO = { - offset: number; + startIndex: number; limit: number; filter?: string; orgId: string; @@ -27,7 +27,7 @@ export type TListScimUsers = { }; export type TGetScimUserDTO = { - userId: string; + orgMembershipId: string; orgId: string; }; @@ -54,13 +54,13 @@ export type TUpdateScimUserDTO = { }; export type TReplaceScimUserDTO = { - userId: string; + orgMembershipId: string; active: boolean; orgId: string; }; export type TDeleteScimUserDTO = { - userId: string; + orgMembershipId: string; orgId: string; }; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 299319e41..b944eb37e 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -292,7 +292,9 @@ export const registerRoutes = async ( licenseService, scimDAL, userDAL, + userAliasDAL, orgDAL, + orgMembershipDAL, projectDAL, projectMembershipDAL, groupDAL, diff --git a/backend/src/services/org/org-fns.ts b/backend/src/services/org/org-fns.ts index ec6d4cb2d..69eac5e07 100644 --- a/backend/src/services/org/org-fns.ts +++ b/backend/src/services/org/org-fns.ts @@ -34,6 +34,8 @@ export const deleteOrgMembership = async ({ tx ); + // TODO: delete associated aliases + return orgMembership; }); diff --git a/backend/src/services/user-alias/user-alias-types.ts b/backend/src/services/user-alias/user-alias-types.ts index 6188732c6..09204644f 100644 --- a/backend/src/services/user-alias/user-alias-types.ts +++ b/backend/src/services/user-alias/user-alias-types.ts @@ -1,4 +1,4 @@ -export enum TUserAliasType { +export enum UserAliasType { LDAP = "ldap", SAML = "saml" } From b2a976f3d4aa49129cccee3800fe90cba5265a6b Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Sun, 28 Apr 2024 21:58:24 -0700 Subject: [PATCH 07/46] Update groups CRUD SCIM to use orgMembershipId --- backend/src/ee/routes/v1/scim-router.ts | 18 +--- .../saml-config/saml-config-service.ts | 2 +- backend/src/ee/services/scim/scim-fns.ts | 6 +- backend/src/ee/services/scim/scim-service.ts | 98 +++++++++---------- backend/src/ee/services/scim/scim-types.ts | 2 +- backend/src/server/routes/index.ts | 1 + backend/src/services/org/org-fns.ts | 69 +++++++++---- backend/src/services/org/org-service.ts | 53 +++------- backend/src/services/user/user-fns.ts | 2 +- 9 files changed, 120 insertions(+), 131 deletions(-) diff --git a/backend/src/ee/routes/v1/scim-router.ts b/backend/src/ee/routes/v1/scim-router.ts index ed2ce92db..7283b8fe1 100644 --- a/backend/src/ee/routes/v1/scim-router.ts +++ b/backend/src/ee/routes/v1/scim-router.ts @@ -152,7 +152,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log("GET /Users req.query: ", req.query); const users = await req.server.services.scim.listScimUsers({ startIndex: req.query.startIndex, limit: req.query.count, @@ -193,7 +192,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`GET /Users/${req.params.orgMembershipId}`); const user = await req.server.services.scim.getScimUser({ orgMembershipId: req.params.orgMembershipId, orgId: req.permission.orgId @@ -248,8 +246,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log("POST /Users req.body: ", req.body); - const primaryEmail = req.body.emails?.find((email) => email.primary)?.value; const user = await req.server.services.scim.createScimUser({ @@ -277,7 +273,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`DELETE /Users/${req.params.orgMembershipId}`); const user = await req.server.services.scim.deleteScimUser({ orgMembershipId: req.params.orgMembershipId, orgId: req.permission.orgId @@ -324,7 +319,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log("POST /Groups req.body: ", req.body); const group = await req.server.services.scim.createScimGroup({ orgId: req.permission.orgId, ...req.body @@ -365,10 +359,9 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log("GET /Groups req.query: ", req.query); const groups = await req.server.services.scim.listScimGroups({ orgId: req.permission.orgId, - offset: req.query.startIndex, + startIndex: req.query.startIndex, limit: req.query.count }); @@ -402,7 +395,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`GET /Groups/${req.params.groupId}`); const group = await req.server.services.scim.getScimGroup({ groupId: req.params.groupId, orgId: req.permission.orgId @@ -424,10 +416,10 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { displayName: z.string().trim(), members: z.array( z.object({ - value: z.string(), // infisical userId + value: z.string(), // infisical orgMembershipId display: z.string() }) - ) // note: is this where members are added to group? + ) }), response: { 200: z.object({ @@ -448,7 +440,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`PUT /Groups/${req.params.groupId} req.body: `, req.body); const group = await req.server.services.scim.updateScimGroupNamePut({ groupId: req.params.groupId, orgId: req.permission.orgId, @@ -510,7 +501,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`PATCH /Groups/${req.params.groupId} req.body: `, req.body); const group = await req.server.services.scim.updateScimGroupNamePatch({ groupId: req.params.groupId, orgId: req.permission.orgId, @@ -534,7 +524,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`DELETE /Groups/${req.params.groupId}`); const group = await req.server.services.scim.deleteScimGroup({ groupId: req.params.groupId, orgId: req.permission.orgId @@ -585,7 +574,6 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { }, onRequest: verifyAuth([AuthMode.SCIM_TOKEN]), handler: async (req) => { - console.log(`PUT /Users/${req.params.orgMembershipId} req.body: `, req.body); const user = await req.server.services.scim.replaceScimUser({ orgMembershipId: req.params.orgMembershipId, orgId: req.permission.orgId, diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index 2a7a6a60a..1dddffa29 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -369,7 +369,7 @@ export const samlConfigServiceFactory = ({ }); } else { user = await userDAL.transaction(async (tx) => { - const uniqueUsername = await normalizeUsername(externalId, userDAL); + const uniqueUsername = await normalizeUsername(`${firstName ?? ""}-${lastName ?? ""}`, userDAL); const newUser = await userDAL.create( { username: uniqueUsername, diff --git a/backend/src/ee/services/scim/scim-fns.ts b/backend/src/ee/services/scim/scim-fns.ts index 8668ed5e1..ec54a4d1f 100644 --- a/backend/src/ee/services/scim/scim-fns.ts +++ b/backend/src/ee/services/scim/scim-fns.ts @@ -65,18 +65,18 @@ export const buildScimUser = ({ export const buildScimGroupList = ({ scimGroups, - offset, + startIndex, limit }: { scimGroups: TScimGroup[]; - offset: number; + startIndex: number; limit: number; }): TListScimGroups => { return { Resources: scimGroups, itemsPerPage: limit, schemas: ["urn:ietf:params:scim:api:messages:2.0:ListResponse"], - startIndex: offset, + startIndex, totalResults: scimGroups.length }; }; diff --git a/backend/src/ee/services/scim/scim-service.ts b/backend/src/ee/services/scim/scim-service.ts index 6700e7f05..a9a78c886 100644 --- a/backend/src/ee/services/scim/scim-service.ts +++ b/backend/src/ee/services/scim/scim-service.ts @@ -14,7 +14,7 @@ import { TOrgPermission } from "@app/lib/types"; import { AuthTokenType } from "@app/services/auth/auth-type"; import { TGroupProjectDALFactory } from "@app/services/group-project/group-project-dal"; import { TOrgDALFactory } from "@app/services/org/org-dal"; -import { deleteOrgMembership } from "@app/services/org/org-fns"; +import { deleteOrgMembershipFn } from "@app/services/org/org-fns"; import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TProjectBotDALFactory } from "@app/services/project-bot/project-bot-dal"; @@ -62,7 +62,7 @@ type TScimServiceFactoryDep = { >; orgMembershipDAL: TOrgMembershipDALFactory; // TODO: Pick projectDAL: Pick; - projectMembershipDAL: Pick; + projectMembershipDAL: Pick; groupDAL: Pick< TGroupDALFactory, "create" | "findOne" | "findAllGroupMembers" | "update" | "delete" | "findGroups" | "transaction" @@ -71,7 +71,7 @@ type TScimServiceFactoryDep = { userGroupMembershipDAL: TUserGroupMembershipDALFactory; // TODO: Pick projectKeyDAL: Pick; projectBotDAL: Pick; - licenseService: Pick; + licenseService: Pick; permissionService: Pick; smtpService: Pick; }; @@ -174,12 +174,6 @@ export const scimServiceFactory = ({ // SCIM server endpoints const listScimUsers = async ({ startIndex, limit, filter, orgId }: TListScimUsersDTO): Promise => { - console.log("listScimUsers args: ", { - startIndex, - limit, - filter, - orgId - }); // done const org = await orgDAL.findById(orgId); if (!org.scimEnabled) @@ -232,10 +226,6 @@ export const scimServiceFactory = ({ }; const getScimUser = async ({ orgMembershipId, orgId }: TGetScimUserDTO) => { - console.log("getScimUser args: ", { - orgMembershipId, - orgId - }); // done const [membership] = await orgDAL .findMembership({ [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, @@ -260,8 +250,6 @@ export const scimServiceFactory = ({ status: 403 }); - console.log("getScimUser membership: ", membership); - return buildScimUser({ orgMembershipId: membership.id, username: membership.username, @@ -273,14 +261,6 @@ export const scimServiceFactory = ({ }; const createScimUser = async ({ username, email, firstName, lastName, orgId }: TCreateScimUserDTO) => { - // do we get external ID or not? - console.log("createScimUser args: ", { - username, - email, - firstName, - lastName, - orgId - }); const org = await orgDAL.findById(orgId); if (!org) @@ -337,7 +317,7 @@ export const scimServiceFactory = ({ ); } } else { - const uniqueUsername = await normalizeUsername(username, userDAL); + const uniqueUsername = await normalizeUsername(`${firstName}-${lastName}`, userDAL); user = await userDAL.create( { username: uniqueUsername, @@ -398,7 +378,6 @@ export const scimServiceFactory = ({ }; const updateScimUser = async ({ userId, orgId, operations }: TUpdateScimUserDTO) => { - console.log("updateScimUser"); // done const [membership] = await orgDAL .findMembership({ userId, @@ -438,12 +417,14 @@ export const scimServiceFactory = ({ }); if (!active) { - await deleteOrgMembership({ + await deleteOrgMembershipFn({ orgMembershipId: membership.id, orgId: membership.orgId, orgDAL, - projectDAL, - projectMembershipDAL + projectMembershipDAL, + projectKeyDAL, + userAliasDAL, + licenseService }); } @@ -458,11 +439,6 @@ export const scimServiceFactory = ({ }; const replaceScimUser = async ({ orgMembershipId, active, orgId }: TReplaceScimUserDTO) => { - console.log("replaceScimUser args: ", { - orgMembershipId, - orgId, - active - }); // done const [membership] = await orgDAL .findMembership({ [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, @@ -489,12 +465,14 @@ export const scimServiceFactory = ({ if (!active) { // tx - await deleteOrgMembership({ + await deleteOrgMembershipFn({ orgMembershipId: membership.id, orgId: membership.orgId, orgDAL, - projectDAL, - projectMembershipDAL + projectMembershipDAL, + projectKeyDAL, + userAliasDAL, + licenseService }); } @@ -509,10 +487,6 @@ export const scimServiceFactory = ({ }; const deleteScimUser = async ({ orgMembershipId, orgId }: TDeleteScimUserDTO) => { - console.log("deleteScimUser args: ", { - orgMembershipId, - orgId - }); // done const [membership] = await orgDAL.findMembership({ [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId @@ -531,18 +505,20 @@ export const scimServiceFactory = ({ }); } - await deleteOrgMembership({ + await deleteOrgMembershipFn({ orgMembershipId: membership.id, orgId: membership.orgId, orgDAL, - projectDAL, - projectMembershipDAL + projectMembershipDAL, + projectKeyDAL, + userAliasDAL, + licenseService }); return {}; // intentionally return empty object upon success }; - const listScimGroups = async ({ orgId, offset, limit }: TListScimGroupsDTO) => { + const listScimGroups = async ({ orgId, startIndex, limit }: TListScimGroupsDTO) => { const plan = await licenseService.getPlan(orgId); if (!plan.groups) throw new BadRequestError({ @@ -563,9 +539,15 @@ export const scimServiceFactory = ({ status: 403 }); - const groups = await groupDAL.findGroups({ - orgId - }); + const groups = await groupDAL.findGroups( + { + orgId + }, + { + offset: startIndex - 1, + limit + } + ); const scimGroups = groups.map((group) => buildScimGroup({ @@ -577,7 +559,7 @@ export const scimServiceFactory = ({ return buildScimGroupList({ scimGroups, - offset, + startIndex, limit }); }; @@ -616,9 +598,15 @@ export const scimServiceFactory = ({ ); if (members && members.length) { + const orgMemberships = await orgMembershipDAL.find({ + $in: { + id: members.map((member) => member.value) + } + }); + const newMembers = await addUsersToGroupByUserIds({ group, - userIds: members.map((member) => member.value), + userIds: orgMemberships.map((membership) => membership.userId as string), userDAL, userGroupMembershipDAL, orgDAL, @@ -733,7 +721,13 @@ export const scimServiceFactory = ({ } if (members) { - const membersIdsSet = new Set(members.map((member) => member.value)); + const orgMemberships = await orgMembershipDAL.find({ + $in: { + id: members.map((member) => member.value) + } + }); + + const membersIdsSet = new Set(orgMemberships.map((orgMembership) => orgMembership.userId)); const directMemberUserIds = ( await userGroupMembershipDAL.find({ @@ -752,13 +746,13 @@ export const scimServiceFactory = ({ const allMembersUserIds = directMemberUserIds.concat(pendingGroupAdditionsUserIds); const allMembersUserIdsSet = new Set(allMembersUserIds); - const toAddUserIds = members.filter((member) => !allMembersUserIdsSet.has(member.value)); + const toAddUserIds = orgMemberships.filter((member) => !allMembersUserIdsSet.has(member.userId as string)); const toRemoveUserIds = allMembersUserIds.filter((userId) => !membersIdsSet.has(userId)); if (toAddUserIds.length) { await addUsersToGroupByUserIds({ group, - userIds: toAddUserIds.map((member) => member.value), + userIds: toAddUserIds.map((member) => member.userId as string), userDAL, userGroupMembershipDAL, orgDAL, diff --git a/backend/src/ee/services/scim/scim-types.ts b/backend/src/ee/services/scim/scim-types.ts index a82f08656..e804d51a5 100644 --- a/backend/src/ee/services/scim/scim-types.ts +++ b/backend/src/ee/services/scim/scim-types.ts @@ -65,7 +65,7 @@ export type TDeleteScimUserDTO = { }; export type TListScimGroupsDTO = { - offset: number; + startIndex: number; limit: number; orgId: string; }; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index b944eb37e..31a777716 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -349,6 +349,7 @@ export const registerRoutes = async ( userDAL }); const orgService = orgServiceFactory({ + userAliasDAL, licenseService, samlConfigDAL, orgRoleDAL, diff --git a/backend/src/services/org/org-fns.ts b/backend/src/services/org/org-fns.ts index 69eac5e07..a63ffabee 100644 --- a/backend/src/services/org/org-fns.ts +++ b/backend/src/services/org/org-fns.ts @@ -1,43 +1,78 @@ +import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; import { TOrgDALFactory } from "@app/services/org/org-dal"; -import { TProjectDALFactory } from "@app/services/project/project-dal"; +import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal"; import { TProjectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal"; +import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; type TDeleteOrgMembership = { orgMembershipId: string; orgId: string; orgDAL: Pick; - projectDAL: Pick; - projectMembershipDAL: Pick; + projectMembershipDAL: Pick; + projectKeyDAL: Pick; + userAliasDAL: Pick; + licenseService: Pick; }; -export const deleteOrgMembership = async ({ +export const deleteOrgMembershipFn = async ({ orgMembershipId, orgId, orgDAL, - projectDAL, - projectMembershipDAL + projectMembershipDAL, + projectKeyDAL, + userAliasDAL, + licenseService }: TDeleteOrgMembership) => { - const membership = await orgDAL.transaction(async (tx) => { - // delete org membership + const deletedMembership = await orgDAL.transaction(async (tx) => { const orgMembership = await orgDAL.deleteMembershipById(orgMembershipId, orgId, tx); - const projects = await projectDAL.find({ orgId }, { tx }); + if (!orgMembership.userId) { + await licenseService.updateSubscriptionOrgMemberCount(orgId); + return orgMembership; + } - // delete associated project memberships - await projectMembershipDAL.delete( + await userAliasDAL.delete( { - $in: { - projectId: projects.map((project) => project.id) - }, - userId: orgMembership.userId as string + userId: orgMembership.userId, + orgId }, tx ); - // TODO: delete associated aliases + // Get all the project memberships of the user in the organization + const projectMemberships = await projectMembershipDAL.findProjectMembershipsByUserId(orgId, orgMembership.userId); + // Delete all the project memberships of the user in the organization + await projectMembershipDAL.delete( + { + $in: { + id: projectMemberships.map((membership) => membership.id) + } + }, + tx + ); + + // Get all the project keys of the user in the organization + const projectKeys = await projectKeyDAL.find({ + $in: { + projectId: projectMemberships.map((membership) => membership.projectId) + }, + receiverId: orgMembership.userId + }); + + // Delete all the project keys of the user in the organization + await projectKeyDAL.delete( + { + $in: { + id: projectKeys.map((key) => key.id) + } + }, + tx + ); + + await licenseService.updateSubscriptionOrgMemberCount(orgId); return orgMembership; }); - return membership; + return deletedMembership; }; diff --git a/backend/src/services/org/org-service.ts b/backend/src/services/org/org-service.ts index 996a08c4d..a666e6a03 100644 --- a/backend/src/services/org/org-service.ts +++ b/backend/src/services/org/org-service.ts @@ -18,6 +18,7 @@ import { generateUserSrpKeys } from "@app/lib/crypto/srp"; import { BadRequestError, UnauthorizedError } from "@app/lib/errors"; import { alphaNumericNanoId } from "@app/lib/nanoid"; import { isDisposableEmail } from "@app/lib/validator"; +import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; import { ActorAuthMethod, ActorType, AuthMethod, AuthTokenType } from "../auth/auth-type"; import { TAuthTokenServiceFactory } from "../auth-token/auth-token-service"; @@ -30,6 +31,7 @@ import { TUserDALFactory } from "../user/user-dal"; import { TIncidentContactsDALFactory } from "./incident-contacts-dal"; import { TOrgBotDALFactory } from "./org-bot-dal"; import { TOrgDALFactory } from "./org-dal"; +import { deleteOrgMembershipFn } from "./org-fns"; import { TOrgRoleDALFactory } from "./org-role-dal"; import { TDeleteOrgMembershipDTO, @@ -43,6 +45,7 @@ import { } from "./org-types"; type TOrgServiceFactoryDep = { + userAliasDAL: Pick; orgDAL: TOrgDALFactory; orgBotDAL: TOrgBotDALFactory; orgRoleDAL: TOrgRoleDALFactory; @@ -65,6 +68,7 @@ type TOrgServiceFactoryDep = { export type TOrgServiceFactory = ReturnType; export const orgServiceFactory = ({ + userAliasDAL, orgDAL, userDAL, groupDAL, @@ -572,47 +576,14 @@ export const orgServiceFactory = ({ const { permission } = await permissionService.getUserOrgPermission(userId, orgId, actorAuthMethod, actorOrgId); ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Delete, OrgPermissionSubjects.Member); - const deletedMembership = await orgDAL.transaction(async (tx) => { - const orgMembership = await orgDAL.deleteMembershipById(membershipId, orgId, tx); - - if (!orgMembership.userId) { - await licenseService.updateSubscriptionOrgMemberCount(orgId); - return orgMembership; - } - - // Get all the project memberships of the user in the organization - const projectMemberships = await projectMembershipDAL.findProjectMembershipsByUserId(orgId, orgMembership.userId); - - // Delete all the project memberships of the user in the organization - await projectMembershipDAL.delete( - { - $in: { - id: projectMemberships.map((membership) => membership.id) - } - }, - tx - ); - - // Get all the project keys of the user in the organization - const projectKeys = await projectKeyDAL.find({ - $in: { - projectId: projectMemberships.map((membership) => membership.projectId) - }, - receiverId: orgMembership.userId - }); - - // Delete all the project keys of the user in the organization - await projectKeyDAL.delete( - { - $in: { - id: projectKeys.map((key) => key.id) - } - }, - tx - ); - - await licenseService.updateSubscriptionOrgMemberCount(orgId); - return orgMembership; + const deletedMembership = await deleteOrgMembershipFn({ + orgMembershipId: membershipId, + orgId, + orgDAL, + projectMembershipDAL, + projectKeyDAL, + userAliasDAL, + licenseService }); return deletedMembership; diff --git a/backend/src/services/user/user-fns.ts b/backend/src/services/user/user-fns.ts index 23789df1b..639320e24 100644 --- a/backend/src/services/user/user-fns.ts +++ b/backend/src/services/user/user-fns.ts @@ -4,7 +4,7 @@ import { alphaNumericNanoId } from "@app/lib/nanoid"; import { TUserDALFactory } from "@app/services/user/user-dal"; export const normalizeUsername = async (username: string, userDAL: Pick) => { - let attempt = slugify(username); + let attempt = slugify(`${username}-${alphaNumericNanoId(4)}`); let user = await userDAL.findOne({ username: attempt }); if (!user) return attempt; From 519403023a01d0523fd8a77680539ce75982fb54 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Sun, 28 Apr 2024 22:04:22 -0700 Subject: [PATCH 08/46] Pick --- .../src/ee/services/saml-config/saml-config-service.ts | 4 ++-- backend/src/ee/services/scim/scim-service.ts | 9 ++++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index 1dddffa29..ff296103b 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -36,14 +36,14 @@ import { TSamlConfigDALFactory } from "./saml-config-dal"; import { TCreateSamlCfgDTO, TGetSamlCfgDTO, TSamlLoginDTO, TUpdateSamlCfgDTO } from "./saml-config-types"; type TSamlConfigServiceFactoryDep = { - samlConfigDAL: TSamlConfigDALFactory; // TODO: Pick + samlConfigDAL: Pick; userDAL: Pick; userAliasDAL: Pick; orgDAL: Pick< TOrgDALFactory, "createMembership" | "updateMembershipById" | "findMembership" | "findOrgById" | "findOne" | "updateById" >; - orgMembershipDAL: TOrgMembershipDALFactory; // TODO: Pick + orgMembershipDAL: Pick; orgBotDAL: Pick; permissionService: Pick; licenseService: Pick; diff --git a/backend/src/ee/services/scim/scim-service.ts b/backend/src/ee/services/scim/scim-service.ts index a9a78c886..db0413fde 100644 --- a/backend/src/ee/services/scim/scim-service.ts +++ b/backend/src/ee/services/scim/scim-service.ts @@ -55,12 +55,12 @@ type TScimServiceFactoryDep = { TUserDALFactory, "find" | "findOne" | "create" | "transaction" | "findUserEncKeyByUserIdsBatch" | "findById" >; - userAliasDAL: TUserAliasDALFactory; // TODO: pick + userAliasDAL: Pick; orgDAL: Pick< TOrgDALFactory, "createMembership" | "findById" | "findMembership" | "deleteMembershipById" | "transaction" | "updateMembershipById" >; - orgMembershipDAL: TOrgMembershipDALFactory; // TODO: Pick + orgMembershipDAL: Pick; projectDAL: Pick; projectMembershipDAL: Pick; groupDAL: Pick< @@ -68,7 +68,10 @@ type TScimServiceFactoryDep = { "create" | "findOne" | "findAllGroupMembers" | "update" | "delete" | "findGroups" | "transaction" >; groupProjectDAL: Pick; - userGroupMembershipDAL: TUserGroupMembershipDALFactory; // TODO: Pick + userGroupMembershipDAL: Pick< + TUserGroupMembershipDALFactory, + "find" | "transaction" | "insertMany" | "filterProjectsByUserMembership" | "delete" + >; projectKeyDAL: Pick; projectBotDAL: Pick; licenseService: Pick; From 69c50af14ebbf65c25d12d5cb6b491f4b94cf490 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 29 Apr 2024 11:53:28 -0700 Subject: [PATCH 09/46] Move trust saml/ldap emails to server config --- ...0426162819_user-alias-optional-username.ts | 31 +++++++-- backend/src/db/schemas/super-admin.ts | 4 +- .../ldap-config/ldap-config-service.ts | 4 +- .../saml-config/saml-config-service.ts | 4 +- backend/src/ee/services/scim/scim-service.ts | 6 +- backend/src/lib/config/env.ts | 3 - backend/src/server/routes/v1/admin-router.ts | 4 +- docs/self-hosting/configuration/envars.mdx | 10 --- frontend/src/hooks/api/admin/types.ts | 2 + .../admin/DashboardPage/DashboardPage.tsx | 68 ++++++++++++++++--- 10 files changed, 102 insertions(+), 34 deletions(-) diff --git a/backend/src/db/migrations/20240426162819_user-alias-optional-username.ts b/backend/src/db/migrations/20240426162819_user-alias-optional-username.ts index 380660149..8e7fd8b8b 100644 --- a/backend/src/db/migrations/20240426162819_user-alias-optional-username.ts +++ b/backend/src/db/migrations/20240426162819_user-alias-optional-username.ts @@ -3,9 +3,32 @@ import { Knex } from "knex"; import { TableName } from "../schemas"; export async function up(knex: Knex): Promise { - await knex.schema.alterTable(TableName.UserAliases, (t) => { - t.string("username").nullable().alter(); - }); + const isUserAliasTablePresent = await knex.schema.hasTable(TableName.SuperAdmin); + if (isUserAliasTablePresent) { + await knex.schema.alterTable(TableName.UserAliases, (t) => { + t.string("username").nullable().alter(); + }); + } + + const isSuperAdminTablePresent = await knex.schema.hasTable(TableName.SuperAdmin); + if (isSuperAdminTablePresent) { + await knex.schema.alterTable(TableName.SuperAdmin, (t) => { + t.boolean("trustSamlEmails").defaultTo(false); + t.boolean("trustLdapEmails").defaultTo(false); + }); + } } -export async function down(): Promise {} +export async function down(knex: Knex): Promise { + if (await knex.schema.hasColumn(TableName.SuperAdmin, "trustSamlEmails")) { + await knex.schema.alterTable(TableName.SuperAdmin, (t) => { + t.dropColumn("trustSamlEmails"); + }); + } + + if (await knex.schema.hasColumn(TableName.SuperAdmin, "trustLdapEmails")) { + await knex.schema.alterTable(TableName.SuperAdmin, (t) => { + t.dropColumn("trustLdapEmails"); + }); + } +} diff --git a/backend/src/db/schemas/super-admin.ts b/backend/src/db/schemas/super-admin.ts index 958fed0ab..417d4e05e 100644 --- a/backend/src/db/schemas/super-admin.ts +++ b/backend/src/db/schemas/super-admin.ts @@ -14,7 +14,9 @@ export const SuperAdminSchema = z.object({ createdAt: z.date(), updatedAt: z.date(), allowedSignUpDomain: z.string().nullable().optional(), - instanceId: z.string().uuid().default("00000000-0000-0000-0000-000000000000") + instanceId: z.string().uuid().default("00000000-0000-0000-0000-000000000000"), + trustSamlEmails: z.boolean().default(false).nullable().optional(), + trustLdapEmails: z.boolean().default(false).nullable().optional() }); export type TSuperAdmin = z.infer; diff --git a/backend/src/ee/services/ldap-config/ldap-config-service.ts b/backend/src/ee/services/ldap-config/ldap-config-service.ts index f712a6ea4..d799b1754 100644 --- a/backend/src/ee/services/ldap-config/ldap-config-service.ts +++ b/backend/src/ee/services/ldap-config/ldap-config-service.ts @@ -28,6 +28,7 @@ import { TOrgDALFactory } from "@app/services/org/org-dal"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TProjectBotDALFactory } from "@app/services/project-bot/project-bot-dal"; import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal"; +import { getServerCfg } from "@app/services/super-admin/super-admin-service"; import { TUserDALFactory } from "@app/services/user/user-dal"; import { normalizeUsername } from "@app/services/user/user-fns"; import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; @@ -392,6 +393,7 @@ export const ldapConfigServiceFactory = ({ relayState }: TLdapLoginDTO) => { const appCfg = getConfig(); + const serverCfg = await getServerCfg(); let userAlias = await userAliasDAL.findOne({ externalId, orgId, @@ -437,7 +439,7 @@ export const ldapConfigServiceFactory = ({ { username: uniqueUsername, email: emails[0], - isEmailVerified: appCfg.TRUST_LDAP_EMAILS, + isEmailVerified: serverCfg.trustLdapEmails, firstName, lastName, authMethods: [], diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index ff296103b..9719b434b 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -24,6 +24,7 @@ import { AuthTokenType } from "@app/services/auth/auth-type"; import { TOrgBotDALFactory } from "@app/services/org/org-bot-dal"; import { TOrgDALFactory } from "@app/services/org/org-dal"; import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; +import { getServerCfg } from "@app/services/super-admin/super-admin-service"; import { TUserDALFactory } from "@app/services/user/user-dal"; import { normalizeUsername } from "@app/services/user/user-fns"; import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; @@ -323,6 +324,7 @@ export const samlConfigServiceFactory = ({ relayState }: TSamlLoginDTO) => { const appCfg = getConfig(); + const serverCfg = await getServerCfg(); const userAlias = await userAliasDAL.findOne({ externalId, orgId, @@ -374,7 +376,7 @@ export const samlConfigServiceFactory = ({ { username: uniqueUsername, email, - isEmailVerified: appCfg.TRUST_SAML_EMAILS, + isEmailVerified: serverCfg.trustSamlEmails, firstName, lastName, authMethods: [], diff --git a/backend/src/ee/services/scim/scim-service.ts b/backend/src/ee/services/scim/scim-service.ts index db0413fde..c9cc6e1ed 100644 --- a/backend/src/ee/services/scim/scim-service.ts +++ b/backend/src/ee/services/scim/scim-service.ts @@ -21,6 +21,7 @@ import { TProjectBotDALFactory } from "@app/services/project-bot/project-bot-dal import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal"; import { TProjectMembershipDALFactory } from "@app/services/project-membership/project-membership-dal"; import { SmtpTemplates, TSmtpService } from "@app/services/smtp/smtp-service"; +import { getServerCfg } from "@app/services/super-admin/super-admin-service"; import { TUserDALFactory } from "@app/services/user/user-dal"; import { normalizeUsername } from "@app/services/user/user-fns"; import { TUserAliasDALFactory } from "@app/services/user-alias/user-alias-dal"; @@ -81,8 +82,6 @@ type TScimServiceFactoryDep = { export type TScimServiceFactory = ReturnType; -// TODO: finish updating all userId refs to orgMembershipId - export const scimServiceFactory = ({ licenseService, scimDAL, @@ -279,6 +278,7 @@ export const scimServiceFactory = ({ }); const appCfg = getConfig(); + const serverCfg = await getServerCfg(); const userAlias = await userAliasDAL.findOne({ externalId: username, @@ -325,7 +325,7 @@ export const scimServiceFactory = ({ { username: uniqueUsername, email, - isEmailVerified: appCfg.TRUST_SAML_EMAILS, + isEmailVerified: serverCfg.trustSamlEmails, firstName, lastName, authMethods: [], diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 8a365f284..4d3d55ffd 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -98,9 +98,6 @@ const envSchema = z CLIENT_ID_GITLAB: zpStr(z.string().optional()), CLIENT_SECRET_GITLAB: zpStr(z.string().optional()), URL_GITLAB_URL: zpStr(z.string().optional().default(GITLAB_URL)), - // email verification - TRUST_SAML_EMAILS: zodStrBool.default("false"), - TRUST_LDAP_EMAILS: zodStrBool.default("false"), // SECRET-SCANNING SECRET_SCANNING_WEBHOOK_PROXY: zpStr(z.string().optional()), SECRET_SCANNING_WEBHOOK_SECRET: zpStr(z.string().optional()), diff --git a/backend/src/server/routes/v1/admin-router.ts b/backend/src/server/routes/v1/admin-router.ts index e70822128..4882411d8 100644 --- a/backend/src/server/routes/v1/admin-router.ts +++ b/backend/src/server/routes/v1/admin-router.ts @@ -42,7 +42,9 @@ export const registerAdminRouter = async (server: FastifyZodProvider) => { schema: { body: z.object({ allowSignUp: z.boolean().optional(), - allowedSignUpDomain: z.string().optional().nullable() + allowedSignUpDomain: z.string().optional().nullable(), + trustSamlEmails: z.boolean().optional(), + trustLdapEmails: z.boolean().optional() }), response: { 200: z.object({ diff --git a/docs/self-hosting/configuration/envars.mdx b/docs/self-hosting/configuration/envars.mdx index e9f4431a4..5233ae910 100644 --- a/docs/self-hosting/configuration/envars.mdx +++ b/docs/self-hosting/configuration/envars.mdx @@ -369,16 +369,6 @@ To login into Infisical with OAuth providers such as Google, configure the assoc information. - - Whether or not to trust emails from external SAML identity providers. If set - to `false` then users will be prompted to verify their email address upon - first login. - - - Whether or not to trust emails from external LDAP servers. If set to `false` - then users will be prompted to verify their email address upon first login. - - Configure SAML organization slug to automatically redirect all users of your Infisical instance to the identity provider. diff --git a/frontend/src/hooks/api/admin/types.ts b/frontend/src/hooks/api/admin/types.ts index c7022a1d7..f5aaabc83 100644 --- a/frontend/src/hooks/api/admin/types.ts +++ b/frontend/src/hooks/api/admin/types.ts @@ -3,6 +3,8 @@ export type TServerConfig = { allowSignUp: boolean; allowedSignUpDomain?: string | null; isMigrationModeOn?: boolean; + trustSamlEmails: boolean; + trustLdapEmails: boolean; }; export type TCreateAdminUserDTO = { diff --git a/frontend/src/views/admin/DashboardPage/DashboardPage.tsx b/frontend/src/views/admin/DashboardPage/DashboardPage.tsx index d5bc4097e..ce1b117f3 100644 --- a/frontend/src/views/admin/DashboardPage/DashboardPage.tsx +++ b/frontend/src/views/admin/DashboardPage/DashboardPage.tsx @@ -14,11 +14,11 @@ import { Input, Select, SelectItem, + Switch, Tab, TabList, TabPanel, - Tabs -} from "@app/components/v2"; + Tabs} from "@app/components/v2"; import { useOrganization, useServerConfig, useUser } from "@app/context"; import { useUpdateServerConfig } from "@app/hooks/api"; @@ -33,7 +33,9 @@ enum SignUpModes { const formSchema = z.object({ signUpMode: z.nativeEnum(SignUpModes), - allowedSignUpDomain: z.string().optional().nullable() + allowedSignUpDomain: z.string().optional().nullable(), + trustSamlEmails: z.boolean(), + trustLdapEmails: z.boolean() }); type TDashboardForm = z.infer; @@ -52,7 +54,9 @@ export const AdminDashboardPage = () => { values: { // eslint-disable-next-line signUpMode: config.allowSignUp ? SignUpModes.Anyone : SignUpModes.Disabled, - allowedSignUpDomain: config.allowedSignUpDomain + allowedSignUpDomain: config.allowedSignUpDomain, + trustSamlEmails: config.trustSamlEmails, + trustLdapEmails: config.trustLdapEmails } }); @@ -62,8 +66,6 @@ export const AdminDashboardPage = () => { const { orgs } = useOrganization(); const { mutateAsync: updateServerConfig } = useUpdateServerConfig(); - - const isNotAllowed = !user?.superAdmin; // TODO(akhilmhdh): on nextjs 14 roadmap this will be properly addressed with context split @@ -78,10 +80,13 @@ export const AdminDashboardPage = () => { const onFormSubmit = async (formData: TDashboardForm) => { try { - const { signUpMode, allowedSignUpDomain } = formData; + const { signUpMode, allowedSignUpDomain, trustSamlEmails, trustLdapEmails } = formData; + await updateServerConfig({ allowSignUp: signUpMode !== SignUpModes.Disabled, - allowedSignUpDomain: signUpMode === SignUpModes.Anyone ? allowedSignUpDomain : null + allowedSignUpDomain: signUpMode === SignUpModes.Anyone ? allowedSignUpDomain : null, + trustSamlEmails, + trustLdapEmails }); createNotification({ text: "Successfully changed sign up setting.", @@ -123,8 +128,9 @@ export const AdminDashboardPage = () => {
Allow user signups
-
- Select if you want users to be able to signup freely into your Infisical instance. +
+ Select if you want users to be able to signup freely into your Infisical + instance.
{ />
)} +
+
Trust emails
+
+ Select if you want Infisical to trust external emails from SAML/LDAP identity + providers. If set to false, then Infisical will prompt SAML/LDAP provisioned + users to verify their email upon their first login. +
+ { + return ( + + field.onChange(value)} + isChecked={field.value} + > +

Trust SAML emails

+
+
+ ); + }} + /> + { + return ( + + field.onChange(value)} + isChecked={field.value} + > +

Trust LDAP emails

+
+
+ ); + }} + /> +
- -
- - -
- ); -}; diff --git a/frontend/src/views/Signup/components/MergeUsersStep/index.tsx b/frontend/src/views/Signup/components/MergeUsersStep/index.tsx deleted file mode 100644 index 2cc931b0a..000000000 --- a/frontend/src/views/Signup/components/MergeUsersStep/index.tsx +++ /dev/null @@ -1 +0,0 @@ -export { MergeUsersStep } from "./MergeUsersStep"; diff --git a/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx b/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx index 0fadee48b..69168e0af 100644 --- a/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx +++ b/frontend/src/views/Signup/components/UserInfoSSOStep/UserInfoSSOStep.tsx @@ -17,7 +17,6 @@ import SecurityClient from "@app/components/utilities/SecurityClient"; import { Button, Input } from "@app/components/v2"; import { completeAccountSignup, useSelectOrganization } from "@app/hooks/api/auth/queries"; import { fetchOrganizations } from "@app/hooks/api/organization/queries"; -import { sendEmailVerificationCode } from "@app/hooks/api/users/mutation"; import ProjectService from "@app/services/ProjectService"; // eslint-disable-next-line new-cap @@ -26,7 +25,6 @@ const client = new jsrp.client(); type Props = { setStep: (step: number) => void; username: string; - isEmailVerified?: boolean; password: string; setPassword: (value: string) => void; name: string; @@ -60,7 +58,6 @@ type Errors = { */ export const UserInfoSSOStep = ({ username, - isEmailVerified, name, providerOrganizationName, password, @@ -204,14 +201,7 @@ export const UserInfoSSOStep = ({ localStorage.setItem("orgData.id", orgId); localStorage.setItem("projectData.id", project.id); - if (isEmailVerified) { - // move to backup PDF step - setStep(3); - } else { - // move to verify email - await sendEmailVerificationCode(); - setStep(1); - } + setStep(2); } catch (error) { setIsLoading(false); console.error(error); diff --git a/frontend/src/views/Signup/components/index.tsx b/frontend/src/views/Signup/components/index.tsx index 4362a6f4f..7ab3d853c 100644 --- a/frontend/src/views/Signup/components/index.tsx +++ b/frontend/src/views/Signup/components/index.tsx @@ -1,4 +1,3 @@ export { BackupPDFStep } from "./BackupPDFStep"; export { EmailConfirmationStep } from "./EmailConfirmationStep"; -export { MergeUsersStep } from "./MergeUsersStep"; export { UserInfoSSOStep } from "./UserInfoSSOStep"; From 69aa20e35c5645bf6df48c441342d4ea0491c39b Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Tue, 23 Apr 2024 20:51:32 +0530 Subject: [PATCH 12/46] feat(server): audit log streams db schema changes --- backend/src/@types/fastify.d.ts | 2 ++ backend/src/@types/knex.d.ts | 8 ++++++ .../20240423070528_audit-log-stream.ts | 28 +++++++++++++++++++ backend/src/db/schemas/audit-log-streams.ts | 25 +++++++++++++++++ backend/src/db/schemas/index.ts | 1 + backend/src/db/schemas/models.ts | 1 + 6 files changed, 65 insertions(+) create mode 100644 backend/src/db/migrations/20240423070528_audit-log-stream.ts create mode 100644 backend/src/db/schemas/audit-log-streams.ts diff --git a/backend/src/@types/fastify.d.ts b/backend/src/@types/fastify.d.ts index a4c3eea7b..b3e9d9952 100644 --- a/backend/src/@types/fastify.d.ts +++ b/backend/src/@types/fastify.d.ts @@ -3,6 +3,7 @@ import "fastify"; import { TUsers } from "@app/db/schemas"; import { TAuditLogServiceFactory } from "@app/ee/services/audit-log/audit-log-service"; import { TCreateAuditLogDTO } from "@app/ee/services/audit-log/audit-log-types"; +import { TAuditLogStreamServiceFactory } from "@app/ee/services/audit-log-stream/audit-log-stream-service"; import { TDynamicSecretServiceFactory } from "@app/ee/services/dynamic-secret/dynamic-secret-service"; import { TDynamicSecretLeaseServiceFactory } from "@app/ee/services/dynamic-secret-lease/dynamic-secret-lease-service"; import { TGroupServiceFactory } from "@app/ee/services/group/group-service"; @@ -120,6 +121,7 @@ declare module "fastify" { scim: TScimServiceFactory; ldap: TLdapConfigServiceFactory; auditLog: TAuditLogServiceFactory; + auditLogStream: TAuditLogStreamServiceFactory; secretScanning: TSecretScanningServiceFactory; license: TLicenseServiceFactory; trustedIp: TTrustedIpServiceFactory; diff --git a/backend/src/@types/knex.d.ts b/backend/src/@types/knex.d.ts index 8845c1d01..a7d76e944 100644 --- a/backend/src/@types/knex.d.ts +++ b/backend/src/@types/knex.d.ts @@ -7,6 +7,9 @@ import { TApiKeysUpdate, TAuditLogs, TAuditLogsInsert, + TAuditLogStreams, + TAuditLogStreamsInsert, + TAuditLogStreamsUpdate, TAuditLogsUpdate, TAuthTokens, TAuthTokenSessions, @@ -404,6 +407,11 @@ declare module "knex/types/tables" { [TableName.LdapGroupMap]: Knex.CompositeTableType; [TableName.OrgBot]: Knex.CompositeTableType; [TableName.AuditLog]: Knex.CompositeTableType; + [TableName.AuditLogStream]: Knex.CompositeTableType< + TAuditLogStreams, + TAuditLogStreamsInsert, + TAuditLogStreamsUpdate + >; [TableName.GitAppInstallSession]: Knex.CompositeTableType< TGitAppInstallSessions, TGitAppInstallSessionsInsert, diff --git a/backend/src/db/migrations/20240423070528_audit-log-stream.ts b/backend/src/db/migrations/20240423070528_audit-log-stream.ts new file mode 100644 index 000000000..0fac59be8 --- /dev/null +++ b/backend/src/db/migrations/20240423070528_audit-log-stream.ts @@ -0,0 +1,28 @@ +import { Knex } from "knex"; + +import { TableName } from "../schemas"; +import { createOnUpdateTrigger, dropOnUpdateTrigger } from "../utils"; + +export async function up(knex: Knex): Promise { + if (!(await knex.schema.hasTable(TableName.AuditLogStream))) { + await knex.schema.createTable(TableName.AuditLogStream, (t) => { + t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); + t.string("url").notNullable(); + t.text("encryptedTokenCiphertext"); + t.text("encryptedTokenIV"); + t.text("encryptedTokenTag"); + t.string("encryptedTokenAlgorithm"); + t.string("encryptedTokenKeyEncoding"); + t.string("projectId").notNullable(); + t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE"); + t.timestamps(true, true, true); + }); + } + + await createOnUpdateTrigger(knex, TableName.AuditLogStream); +} + +export async function down(knex: Knex): Promise { + await dropOnUpdateTrigger(knex, TableName.AuditLogStream); + await knex.schema.dropTableIfExists(TableName.AuditLogStream); +} diff --git a/backend/src/db/schemas/audit-log-streams.ts b/backend/src/db/schemas/audit-log-streams.ts new file mode 100644 index 000000000..154c865de --- /dev/null +++ b/backend/src/db/schemas/audit-log-streams.ts @@ -0,0 +1,25 @@ +// Code generated by automation script, DO NOT EDIT. +// Automated by pulling database and generating zod schema +// To update. Just run npm run generate:schema +// Written by akhilmhdh. + +import { z } from "zod"; + +import { TImmutableDBKeys } from "./models"; + +export const AuditLogStreamsSchema = z.object({ + id: z.string().uuid(), + url: z.string(), + encryptedTokenCiphertext: z.string().nullable().optional(), + encryptedTokenIV: z.string().nullable().optional(), + encryptedTokenTag: z.string().nullable().optional(), + encryptedTokenAlgorithm: z.string().nullable().optional(), + encryptedTokenKeyEncoding: z.string().nullable().optional(), + projectId: z.string(), + createdAt: z.date(), + updatedAt: z.date() +}); + +export type TAuditLogStreams = z.infer; +export type TAuditLogStreamsInsert = Omit, TImmutableDBKeys>; +export type TAuditLogStreamsUpdate = Partial, TImmutableDBKeys>>; diff --git a/backend/src/db/schemas/index.ts b/backend/src/db/schemas/index.ts index 30d6208b8..0eb9b1986 100644 --- a/backend/src/db/schemas/index.ts +++ b/backend/src/db/schemas/index.ts @@ -1,4 +1,5 @@ export * from "./api-keys"; +export * from "./audit-log-streams"; export * from "./audit-logs"; export * from "./auth-token-sessions"; export * from "./auth-tokens"; diff --git a/backend/src/db/schemas/models.ts b/backend/src/db/schemas/models.ts index ea70dccdb..3baa7f40d 100644 --- a/backend/src/db/schemas/models.ts +++ b/backend/src/db/schemas/models.ts @@ -62,6 +62,7 @@ export enum TableName { LdapConfig = "ldap_configs", LdapGroupMap = "ldap_group_maps", AuditLog = "audit_logs", + AuditLogStream = "audit_log_streams", GitAppInstallSession = "git_app_install_sessions", GitAppOrg = "git_app_org", SecretScanningGitRisk = "secret_scanning_git_risks", From f2b1f3f0e794db39099b1afb1e88d12138e848ca Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Tue, 23 Apr 2024 20:51:57 +0530 Subject: [PATCH 13/46] feat(server): audit log streams services and api routes --- .../ee/routes/v1/audit-log-stream-router.ts | 199 +++++++++++++++++ backend/src/ee/routes/v1/index.ts | 2 + .../audit-log-stream/audit-log-stream-dal.ts | 11 + .../audit-log-stream-service.ts | 205 ++++++++++++++++++ .../audit-log-stream-types.ts | 25 +++ .../ee/services/audit-log/audit-log-queue.ts | 41 +++- .../src/ee/services/license/licence-fns.ts | 2 + .../src/ee/services/license/license-types.ts | 2 + backend/src/lib/api-docs/constants.ts | 22 ++ backend/src/lib/config/env.ts | 1 + backend/src/lib/validator/index.ts | 1 + backend/src/lib/validator/validate-url.ts | 18 ++ backend/src/server/routes/index.ts | 13 +- backend/src/server/routes/sanitizedSchemas.ts | 7 + 14 files changed, 546 insertions(+), 3 deletions(-) create mode 100644 backend/src/ee/routes/v1/audit-log-stream-router.ts create mode 100644 backend/src/ee/services/audit-log-stream/audit-log-stream-dal.ts create mode 100644 backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts create mode 100644 backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts create mode 100644 backend/src/lib/validator/validate-url.ts diff --git a/backend/src/ee/routes/v1/audit-log-stream-router.ts b/backend/src/ee/routes/v1/audit-log-stream-router.ts new file mode 100644 index 000000000..a3dcac78c --- /dev/null +++ b/backend/src/ee/routes/v1/audit-log-stream-router.ts @@ -0,0 +1,199 @@ +import { z } from "zod"; + +import { AUDIT_LOG_STREAMS } from "@app/lib/api-docs"; +import { readLimit } from "@app/server/config/rateLimiter"; +import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { SanitizedAuditLogStreamSchema } from "@app/server/routes/sanitizedSchemas"; +import { AuthMode } from "@app/services/auth/auth-type"; + +export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) => { + server.route({ + method: "POST", + url: "/", + config: { + rateLimit: readLimit + }, + schema: { + description: "Create an Audit Log Stream.", + security: [ + { + bearerAuth: [] + } + ], + body: z.object({ + projectSlug: z.string().min(1).describe(AUDIT_LOG_STREAMS.CREATE.projectSlug), + url: z.string().min(1).describe(AUDIT_LOG_STREAMS.CREATE.url), + token: z.string().optional().describe(AUDIT_LOG_STREAMS.CREATE.token) + }), + response: { + 200: z.object({ + auditLogStream: SanitizedAuditLogStreamSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const auditLogStream = await server.services.auditLogStream.create({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + projectSlug: req.body.projectSlug, + url: req.body.url, + token: req.body.token + }); + + return { auditLogStream }; + } + }); + + server.route({ + method: "PATCH", + url: "/:id", + config: { + rateLimit: readLimit + }, + schema: { + description: "Update an Audit Log Stream by ID.", + security: [ + { + bearerAuth: [] + } + ], + params: z.object({ + id: z.string().describe(AUDIT_LOG_STREAMS.UPDATE.id) + }), + body: z.object({ + url: z.string().optional().describe(AUDIT_LOG_STREAMS.UPDATE.url), + token: z.string().optional().describe(AUDIT_LOG_STREAMS.UPDATE.token) + }), + response: { + 200: z.object({ + auditLogStream: SanitizedAuditLogStreamSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const auditLogStream = await server.services.auditLogStream.updateById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + id: req.params.id, + url: req.body.url, + token: req.body.token + }); + + return { auditLogStream }; + } + }); + + server.route({ + method: "DELETE", + url: "/:id", + config: { + rateLimit: readLimit + }, + schema: { + description: "Delete an Audit Log Stream by ID.", + security: [ + { + bearerAuth: [] + } + ], + params: z.object({ + id: z.string().describe(AUDIT_LOG_STREAMS.DELETE.id) + }), + response: { + 200: z.object({ + auditLogStream: SanitizedAuditLogStreamSchema + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const auditLogStream = await server.services.auditLogStream.deleteById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + id: req.params.id + }); + + return { auditLogStream }; + } + }); + + server.route({ + method: "GET", + url: "/:id", + config: { + rateLimit: readLimit + }, + schema: { + description: "Get an Audit Log Stream by ID.", + security: [ + { + bearerAuth: [] + } + ], + params: z.object({ + id: z.string().describe(AUDIT_LOG_STREAMS.GET_BY_ID.id) + }), + response: { + 200: z.object({ + auditLogStream: SanitizedAuditLogStreamSchema.extend({ token: z.string().optional() }) + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const auditLogStream = await server.services.auditLogStream.getById({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + id: req.params.id + }); + + return { auditLogStream }; + } + }); + + server.route({ + method: "GET", + url: "/", + config: { + rateLimit: readLimit + }, + schema: { + description: "List Audit Log Streams.", + security: [ + { + bearerAuth: [] + } + ], + querystring: z.object({ + projectSlug: z.string().describe(AUDIT_LOG_STREAMS.LIST.projectSlug) + }), + response: { + 200: z.object({ + auditLogStreams: SanitizedAuditLogStreamSchema.array() + }) + } + }, + onRequest: verifyAuth([AuthMode.JWT, AuthMode.IDENTITY_ACCESS_TOKEN]), + handler: async (req) => { + const auditLogStreams = await server.services.auditLogStream.list({ + actorId: req.permission.id, + actor: req.permission.type, + actorOrgId: req.permission.orgId, + actorAuthMethod: req.permission.authMethod, + projectSlug: req.query.projectSlug + }); + + return { auditLogStreams }; + } + }); +}; diff --git a/backend/src/ee/routes/v1/index.ts b/backend/src/ee/routes/v1/index.ts index 6860098fd..cf325b2e3 100644 --- a/backend/src/ee/routes/v1/index.ts +++ b/backend/src/ee/routes/v1/index.ts @@ -1,3 +1,4 @@ +import { registerAuditLogStreamRouter } from "./audit-log-stream-router"; import { registerDynamicSecretLeaseRouter } from "./dynamic-secret-lease-router"; import { registerDynamicSecretRouter } from "./dynamic-secret-router"; import { registerGroupRouter } from "./group-router"; @@ -55,6 +56,7 @@ export const registerV1EERoutes = async (server: FastifyZodProvider) => { await server.register(registerSecretRotationRouter, { prefix: "/secret-rotations" }); await server.register(registerSecretVersionRouter, { prefix: "/secret" }); await server.register(registerGroupRouter, { prefix: "/groups" }); + await server.register(registerAuditLogStreamRouter, { prefix: "/audit-log-streams" }); await server.register( async (privilegeRouter) => { await privilegeRouter.register(registerUserAdditionalPrivilegeRouter, { prefix: "/users" }); diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-dal.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-dal.ts new file mode 100644 index 000000000..436821ae9 --- /dev/null +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-dal.ts @@ -0,0 +1,11 @@ +import { TDbClient } from "@app/db"; +import { TableName } from "@app/db/schemas"; +import { ormify } from "@app/lib/knex"; + +export type TAuditLogStreamDALFactory = ReturnType; + +export const auditLogStreamDALFactory = (db: TDbClient) => { + const orm = ormify(db, TableName.AuditLogStream); + + return orm; +}; diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts new file mode 100644 index 000000000..87cb3294a --- /dev/null +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts @@ -0,0 +1,205 @@ +import { ForbiddenError } from "@casl/ability"; + +import { SecretKeyEncoding } from "@app/db/schemas"; +import { infisicalSymmetricDecrypt, infisicalSymmetricEncypt } from "@app/lib/crypto/encryption"; +import { BadRequestError } from "@app/lib/errors"; +import { validateLocalIps } from "@app/lib/validator"; +import { TProjectDALFactory } from "@app/services/project/project-dal"; + +import { TLicenseServiceFactory } from "../license/license-service"; +import { TPermissionServiceFactory } from "../permission/permission-service"; +import { ProjectPermissionActions, ProjectPermissionSub } from "../permission/project-permission"; +import { TAuditLogStreamDALFactory } from "./audit-log-stream-dal"; +import { + TCreateAuditLogStreamDTO, + TDeleteAuditLogStreamDTO, + TGetDetailsAuditLogStreamDTO, + TListAuditLogStreamDTO, + TUpdateAuditLogStreamDTO +} from "./audit-log-stream-types"; + +type TAuditLogStreamServiceFactoryDep = { + auditLogStreamDAL: TAuditLogStreamDALFactory; + permissionService: Pick; + projectDAL: Pick; + licenseService: Pick; +}; + +export type TAuditLogStreamServiceFactory = ReturnType; + +export const auditLogStreamServiceFactory = ({ + auditLogStreamDAL, + permissionService, + projectDAL, + licenseService +}: TAuditLogStreamServiceFactoryDep) => { + const create = async ({ + projectSlug, + url, + actor, + token, + actorId, + actorOrgId, + actorAuthMethod + }: TCreateAuditLogStreamDTO) => { + const plan = await licenseService.getPlan(actorOrgId); + if (!plan.auditLogStreams) + throw new BadRequestError({ + message: "Failed to create audit log streams due to plan restriction. Upgrade plan to create group." + }); + + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Settings); + + validateLocalIps(url); + + const totalStreams = await auditLogStreamDAL.find({ projectId }); + if (totalStreams.length >= plan.auditLogStreamLimit) { + throw new BadRequestError({ + message: + "Failed to create audit log streams due to plan limit reached. Kindly contact Infisical to add more streams." + }); + } + const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; + const logStream = await auditLogStreamDAL.create({ + projectId, + url, + ...(encryptedToken + ? { + encryptedTokenCiphertext: encryptedToken.ciphertext, + encryptedTokenIV: encryptedToken.iv, + encryptedTokenTag: encryptedToken.tag, + encryptedTokenAlgorithm: encryptedToken.algorithm, + encryptedTokenKeyEncoding: encryptedToken.encoding + } + : {}) + }); + return logStream; + }; + + const updateById = async ({ + id, + url, + actor, + token, + actorId, + actorOrgId, + actorAuthMethod + }: TUpdateAuditLogStreamDTO) => { + const plan = await licenseService.getPlan(actorOrgId); + if (!plan.auditLogStreams) + throw new BadRequestError({ + message: "Failed to update audit log streams due to plan restriction. Upgrade plan to create group." + }); + + const logStream = await auditLogStreamDAL.findById(id); + if (!logStream) throw new BadRequestError({ message: "Audit log stream not found" }); + + const { projectId } = logStream; + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Settings); + + if (url) validateLocalIps(url); + const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; + const updatedLogStream = await auditLogStreamDAL.updateById(id, { + projectId, + url, + ...(encryptedToken + ? { + encryptedTokenCiphertext: encryptedToken.ciphertext, + encryptedTokenIV: encryptedToken.iv, + encryptedTokenTag: encryptedToken.tag, + encryptedTokenAlgorithm: encryptedToken.algorithm, + encryptedTokenKeyEncoding: encryptedToken.encoding + } + : {}) + }); + return updatedLogStream; + }; + + const deleteById = async ({ id, actor, actorId, actorOrgId, actorAuthMethod }: TDeleteAuditLogStreamDTO) => { + const logStream = await auditLogStreamDAL.findById(id); + if (!logStream) throw new BadRequestError({ message: "Audit log stream not found" }); + + const { projectId } = logStream; + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Delete, ProjectPermissionSub.Settings); + + const deletedLogStream = await auditLogStreamDAL.deleteById(id); + return deletedLogStream; + }; + + const getById = async ({ id, actor, actorId, actorOrgId, actorAuthMethod }: TGetDetailsAuditLogStreamDTO) => { + const logStream = await auditLogStreamDAL.findById(id); + if (!logStream) throw new BadRequestError({ message: "Audit log stream not found" }); + + const { projectId } = logStream; + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Read, ProjectPermissionSub.Settings); + const token = + logStream?.encryptedTokenCiphertext && logStream?.encryptedTokenIV && logStream?.encryptedTokenTag + ? infisicalSymmetricDecrypt({ + tag: logStream.encryptedTokenTag, + iv: logStream.encryptedTokenIV, + ciphertext: logStream.encryptedTokenCiphertext, + keyEncoding: logStream.encryptedTokenKeyEncoding as SecretKeyEncoding + }) + : undefined; + + return { ...logStream, token }; + }; + + const list = async ({ projectSlug, actor, actorId, actorOrgId, actorAuthMethod }: TListAuditLogStreamDTO) => { + const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); + if (!project) throw new BadRequestError({ message: "Project not found" }); + const projectId = project.id; + + const { permission } = await permissionService.getProjectPermission( + actor, + actorId, + projectId, + actorAuthMethod, + actorOrgId + ); + ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Settings); + + const logStreams = await auditLogStreamDAL.find({ projectId }); + return logStreams; + }; + + return { + create, + updateById, + deleteById, + getById, + list + }; +}; diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts new file mode 100644 index 000000000..f25c423fa --- /dev/null +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts @@ -0,0 +1,25 @@ +import { TProjectPermission } from "@app/lib/types"; + +export type TCreateAuditLogStreamDTO = Omit & { + projectSlug: string; + url: string; + token?: string; +}; + +export type TUpdateAuditLogStreamDTO = Omit & { + id: string; + url?: string; + token?: string; +}; + +export type TDeleteAuditLogStreamDTO = Omit & { + id: string; +}; + +export type TListAuditLogStreamDTO = Omit & { + projectSlug: string; +}; + +export type TGetDetailsAuditLogStreamDTO = Omit & { + id: string; +}; diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index afffd463d..1bf56ca3b 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -1,13 +1,20 @@ +import { RawAxiosRequestHeaders } from "axios"; + +import { SecretKeyEncoding } from "@app/db/schemas"; +import { request } from "@app/lib/config/request"; +import { infisicalSymmetricDecrypt } from "@app/lib/crypto/encryption"; import { logger } from "@app/lib/logger"; import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue"; import { TProjectDALFactory } from "@app/services/project/project-dal"; +import { TAuditLogStreamDALFactory } from "../audit-log-stream/audit-log-stream-dal"; import { TLicenseServiceFactory } from "../license/license-service"; import { TAuditLogDALFactory } from "./audit-log-dal"; import { TCreateAuditLogDTO } from "./audit-log-types"; type TAuditLogQueueServiceFactoryDep = { auditLogDAL: TAuditLogDALFactory; + auditLogStreamDAL: Pick; queueService: TQueueServiceFactory; projectDAL: Pick; licenseService: Pick; @@ -15,11 +22,15 @@ type TAuditLogQueueServiceFactoryDep = { export type TAuditLogQueueServiceFactory = ReturnType; +// keep this timeout 5s it must be fast because else the queue will take time to finish +// audit log is a crowded queue thus needs to be fast +const AUDIT_LOG_STREAM_TIMEOUT = 5 * 1000; export const auditLogQueueServiceFactory = ({ auditLogDAL, queueService, projectDAL, - licenseService + licenseService, + auditLogStreamDAL }: TAuditLogQueueServiceFactoryDep) => { const pushToLog = async (data: TCreateAuditLogDTO) => { await queueService.queue(QueueName.AuditLog, QueueJobs.AuditLog, data, { @@ -47,7 +58,7 @@ export const auditLogQueueServiceFactory = ({ // skip inserting if audit log retention is 0 meaning its not supported if (ttl === 0) return; - await auditLogDAL.create({ + const auditLog = await auditLogDAL.create({ actor: actor.type, actorMetadata: actor.metadata, userAgent, @@ -59,6 +70,32 @@ export const auditLogQueueServiceFactory = ({ eventMetadata: event.metadata, userAgentType }); + + const logStreams = await auditLogStreamDAL.find({ projectId }); + await Promise.allSettled( + logStreams.map( + async ({ url, encryptedTokenTag, encryptedTokenIV, encryptedTokenKeyEncoding, encryptedTokenCiphertext }) => { + const token = + encryptedTokenIV && encryptedTokenCiphertext && encryptedTokenTag + ? infisicalSymmetricDecrypt({ + keyEncoding: encryptedTokenKeyEncoding as SecretKeyEncoding, + iv: encryptedTokenIV, + tag: encryptedTokenTag, + ciphertext: encryptedTokenCiphertext + }) + : undefined; + const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; + if (token) headers.Authorization = `Bearer ${token}`; + return request.post(url, auditLog, { + headers, + // request timeout + timeout: AUDIT_LOG_STREAM_TIMEOUT, + // connection timeout + signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) + }); + } + ) + ); }); queueService.start(QueueName.AuditLogPrune, async () => { diff --git a/backend/src/ee/services/license/licence-fns.ts b/backend/src/ee/services/license/licence-fns.ts index 8a4de57f1..189a3c4e0 100644 --- a/backend/src/ee/services/license/licence-fns.ts +++ b/backend/src/ee/services/license/licence-fns.ts @@ -24,6 +24,8 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ customAlerts: false, auditLogs: false, auditLogsRetentionDays: 0, + auditLogStreams: false, + auditLogStreamLimit: 3, samlSSO: false, scim: false, ldap: false, diff --git a/backend/src/ee/services/license/license-types.ts b/backend/src/ee/services/license/license-types.ts index 1cea39a83..a2379ddaa 100644 --- a/backend/src/ee/services/license/license-types.ts +++ b/backend/src/ee/services/license/license-types.ts @@ -40,6 +40,8 @@ export type TFeatureSet = { customAlerts: false; auditLogs: false; auditLogsRetentionDays: 0; + auditLogStreams: false; + auditLogStreamLimit: 3; samlSSO: false; scim: false; ldap: false; diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 04b7509ca..d8b1c6469 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -614,3 +614,25 @@ export const INTEGRATION = { integrationId: "The ID of the integration object." } }; + +export const AUDIT_LOG_STREAMS = { + CREATE: { + projectSlug: "The slug of the project to create audit log stream.", + url: "The socket URL to push logs to.", + token: "Authentication token for the external provider used for identification." + }, + UPDATE: { + id: "The ID of the audit log stream to update.", + url: "The socket URL to push logs to.", + token: "Authentication token for the external provider used for identification." + }, + DELETE: { + id: "The ID of the audit log stream to delete." + }, + LIST: { + projectSlug: "The slug of the project to list audit log streams." + }, + GET_BY_ID: { + id: "The ID of the audit log stream to get details." + } +}; diff --git a/backend/src/lib/config/env.ts b/backend/src/lib/config/env.ts index 4d3d55ffd..f9bbb1b46 100644 --- a/backend/src/lib/config/env.ts +++ b/backend/src/lib/config/env.ts @@ -119,6 +119,7 @@ const envSchema = z }) .transform((data) => ({ ...data, + isCloud: Boolean(data.LICENSE_SERVER_KEY), isSmtpConfigured: Boolean(data.SMTP_HOST), isRedisConfigured: Boolean(data.REDIS_URL), isDevelopmentMode: data.NODE_ENV === "development", diff --git a/backend/src/lib/validator/index.ts b/backend/src/lib/validator/index.ts index 6bc415680..6a70d8571 100644 --- a/backend/src/lib/validator/index.ts +++ b/backend/src/lib/validator/index.ts @@ -1 +1,2 @@ export { isDisposableEmail } from "./validate-email"; +export { validateLocalIps } from "./validate-url"; diff --git a/backend/src/lib/validator/validate-url.ts b/backend/src/lib/validator/validate-url.ts new file mode 100644 index 000000000..9a953be1a --- /dev/null +++ b/backend/src/lib/validator/validate-url.ts @@ -0,0 +1,18 @@ +import { getConfig } from "../config/env"; +import { BadRequestError } from "../errors"; + +export const validateLocalIps = (url: string) => { + const validUrl = new URL(url); + const appCfg = getConfig(); + // on cloud local ips are not allowed + if ( + appCfg.isCloud && + (validUrl.host === "host.docker.internal" || + validUrl.host.match(/^10\.\d+\.\d+\.\d+/) || + validUrl.host.match(/^192\.168\.\d+\.\d+/)) + ) + throw new BadRequestError({ message: "Local IPs not allowed as URL" }); + + if (validUrl.host === "localhost" || validUrl.host === "127.0.0.1") + throw new BadRequestError({ message: "Localhost not allowed" }); +}; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index 4cb56a222..d53256bc2 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -5,6 +5,8 @@ import { registerV1EERoutes } from "@app/ee/routes/v1"; import { auditLogDALFactory } from "@app/ee/services/audit-log/audit-log-dal"; import { auditLogQueueServiceFactory } from "@app/ee/services/audit-log/audit-log-queue"; import { auditLogServiceFactory } from "@app/ee/services/audit-log/audit-log-service"; +import { auditLogStreamDALFactory } from "@app/ee/services/audit-log-stream/audit-log-stream-dal"; +import { auditLogStreamServiceFactory } from "@app/ee/services/audit-log-stream/audit-log-stream-service"; import { dynamicSecretDALFactory } from "@app/ee/services/dynamic-secret/dynamic-secret-dal"; import { dynamicSecretServiceFactory } from "@app/ee/services/dynamic-secret/dynamic-secret-service"; import { buildDynamicSecretProviders } from "@app/ee/services/dynamic-secret/providers"; @@ -193,6 +195,7 @@ export const registerRoutes = async ( const identityUaClientSecretDAL = identityUaClientSecretDALFactory(db); const auditLogDAL = auditLogDALFactory(db); + const auditLogStreamDAL = auditLogStreamDALFactory(db); const trustedIpDAL = trustedIpDALFactory(db); const telemetryDAL = telemetryDALFactory(db); @@ -243,9 +246,16 @@ export const registerRoutes = async ( auditLogDAL, queueService, projectDAL, - licenseService + licenseService, + auditLogStreamDAL }); const auditLogService = auditLogServiceFactory({ auditLogDAL, permissionService, auditLogQueue }); + const auditLogStreamService = auditLogStreamServiceFactory({ + projectDAL, + licenseService, + permissionService, + auditLogStreamDAL + }); const sapService = secretApprovalPolicyServiceFactory({ projectMembershipDAL, projectEnvDAL, @@ -715,6 +725,7 @@ export const registerRoutes = async ( saml: samlService, ldap: ldapService, auditLog: auditLogService, + auditLogStream: auditLogStreamService, secretScanning: secretScanningService, license: licenseService, trustedIp: trustedIpService, diff --git a/backend/src/server/routes/sanitizedSchemas.ts b/backend/src/server/routes/sanitizedSchemas.ts index eaae4149c..a0b792789 100644 --- a/backend/src/server/routes/sanitizedSchemas.ts +++ b/backend/src/server/routes/sanitizedSchemas.ts @@ -69,3 +69,10 @@ export const SanitizedDynamicSecretSchema = DynamicSecretsSchema.omit({ keyEncoding: true, algorithm: true }); + +export const SanitizedAuditLogStreamSchema = z.object({ + id: z.string(), + url: z.string(), + createdAt: z.date(), + updatedAt: z.date() +}); From 49ae2386c07fe8f45277d1e1bdefa72e0f6c0939 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Tue, 23 Apr 2024 20:52:19 +0530 Subject: [PATCH 14/46] feat(ui): audit log api hooks --- .../src/hooks/api/auditLogStreams/index.tsx | 6 ++ .../hooks/api/auditLogStreams/mutations.tsx | 61 +++++++++++++++++++ .../src/hooks/api/auditLogStreams/queries.tsx | 45 ++++++++++++++ .../src/hooks/api/auditLogStreams/types.ts | 23 +++++++ frontend/src/hooks/api/index.tsx | 1 + frontend/src/hooks/api/subscriptions/types.ts | 2 + frontend/src/hooks/api/types.ts | 17 +++--- 7 files changed, 147 insertions(+), 8 deletions(-) create mode 100644 frontend/src/hooks/api/auditLogStreams/index.tsx create mode 100644 frontend/src/hooks/api/auditLogStreams/mutations.tsx create mode 100644 frontend/src/hooks/api/auditLogStreams/queries.tsx create mode 100644 frontend/src/hooks/api/auditLogStreams/types.ts diff --git a/frontend/src/hooks/api/auditLogStreams/index.tsx b/frontend/src/hooks/api/auditLogStreams/index.tsx new file mode 100644 index 000000000..72b1fba1a --- /dev/null +++ b/frontend/src/hooks/api/auditLogStreams/index.tsx @@ -0,0 +1,6 @@ +export { + useCreateAuditLogStream, + useDeleteAuditLogStream, + useUpdateAuditLogStream +} from "./mutations"; +export { useGetAuditLogStreamDetails, useGetAuditLogStreams } from "./queries"; diff --git a/frontend/src/hooks/api/auditLogStreams/mutations.tsx b/frontend/src/hooks/api/auditLogStreams/mutations.tsx new file mode 100644 index 000000000..902efbb57 --- /dev/null +++ b/frontend/src/hooks/api/auditLogStreams/mutations.tsx @@ -0,0 +1,61 @@ +import { useMutation, useQueryClient } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { auditLogStreamKeys } from "./queries"; +import { + TAuditLogStream, + TCreateAuditLogStreamDTO, + TDeleteAuditLogStreamDTO, + TUpdateAuditLogStreamDTO +} from "./types"; + +export const useCreateAuditLogStream = () => { + const queryClient = useQueryClient(); + + return useMutation<{ auditLogStream: TAuditLogStream }, {}, TCreateAuditLogStreamDTO>({ + mutationFn: async (dto) => { + const { data } = await apiRequest.post<{ auditLogStream: TAuditLogStream }>( + "/api/v1/audit-log-streams", + dto + ); + return data; + }, + onSuccess: (_, { projectSlug }) => { + queryClient.invalidateQueries(auditLogStreamKeys.list(projectSlug)); + } + }); +}; + +export const useUpdateAuditLogStream = () => { + const queryClient = useQueryClient(); + + return useMutation<{ auditLogStream: TAuditLogStream }, {}, TUpdateAuditLogStreamDTO>({ + mutationFn: async (dto) => { + const { data } = await apiRequest.patch<{ auditLogStream: TAuditLogStream }>( + `/api/v1/audit-log-streams/${dto.id}`, + dto + ); + return data; + }, + onSuccess: (_, { projectSlug }) => { + queryClient.invalidateQueries(auditLogStreamKeys.list(projectSlug)); + } + }); +}; + +export const useDeleteAuditLogStream = () => { + const queryClient = useQueryClient(); + + return useMutation<{ auditLogStream: TAuditLogStream }, {}, TDeleteAuditLogStreamDTO>({ + mutationFn: async (dto) => { + const { data } = await apiRequest.delete<{ auditLogStream: TAuditLogStream }>( + `/api/v1/audit-log-streams/${dto.id}` + ); + return data; + }, + onSuccess: (_, { projectSlug }) => { + queryClient.invalidateQueries(auditLogStreamKeys.list(projectSlug)); + } + }); +}; diff --git a/frontend/src/hooks/api/auditLogStreams/queries.tsx b/frontend/src/hooks/api/auditLogStreams/queries.tsx new file mode 100644 index 000000000..4c636ac28 --- /dev/null +++ b/frontend/src/hooks/api/auditLogStreams/queries.tsx @@ -0,0 +1,45 @@ +import { useQuery } from "@tanstack/react-query"; + +import { apiRequest } from "@app/config/request"; + +import { TAuditLogStream } from "./types"; + +export const auditLogStreamKeys = { + list: (projectSlug: string) => ["audit-log-stream", { projectSlug }], + getById: (id: string) => ["audit-log-stream-details", { id }] +}; + +const fetchAuditLogStreams = async (projectSlug: string) => { + const { data } = await apiRequest.get<{ auditLogStreams: TAuditLogStream[] }>( + "/api/v1/audit-log-streams", + { + params: { + projectSlug + } + } + ); + + return data.auditLogStreams; +}; + +export const useGetAuditLogStreams = (projectSlug: string) => + useQuery({ + queryKey: auditLogStreamKeys.list(projectSlug), + queryFn: () => fetchAuditLogStreams(projectSlug), + enabled: Boolean(projectSlug) + }); + +const fetchAuditLogStreamDetails = async (id: string) => { + const { data } = await apiRequest.get<{ auditLogStream: TAuditLogStream }>( + `/api/v1/audit-log-streams/${id}` + ); + + return data.auditLogStream; +}; + +export const useGetAuditLogStreamDetails = (id: string) => + useQuery({ + queryKey: auditLogStreamKeys.getById(id), + queryFn: () => fetchAuditLogStreamDetails(id), + enabled: Boolean(id) + }); diff --git a/frontend/src/hooks/api/auditLogStreams/types.ts b/frontend/src/hooks/api/auditLogStreams/types.ts new file mode 100644 index 000000000..3163f96d7 --- /dev/null +++ b/frontend/src/hooks/api/auditLogStreams/types.ts @@ -0,0 +1,23 @@ +export type TAuditLogStream = { + id: string; + url: string; + token: string; +}; + +export type TCreateAuditLogStreamDTO = { + projectSlug: string; + url: string; + token?: string; +}; + +export type TUpdateAuditLogStreamDTO = { + id: string; + projectSlug: string; + url?: string; + token?: string; +}; + +export type TDeleteAuditLogStreamDTO = { + id: string; + projectSlug: string; +}; diff --git a/frontend/src/hooks/api/index.tsx b/frontend/src/hooks/api/index.tsx index b2df27f2d..574da5a31 100644 --- a/frontend/src/hooks/api/index.tsx +++ b/frontend/src/hooks/api/index.tsx @@ -1,6 +1,7 @@ export * from "./admin"; export * from "./apiKeys"; export * from "./auditLogs"; +export * from "./auditLogStreams"; export * from "./auth"; export * from "./bots"; export * from "./dynamicSecret"; diff --git a/frontend/src/hooks/api/subscriptions/types.ts b/frontend/src/hooks/api/subscriptions/types.ts index 46facedd3..45414292d 100644 --- a/frontend/src/hooks/api/subscriptions/types.ts +++ b/frontend/src/hooks/api/subscriptions/types.ts @@ -5,6 +5,8 @@ export type SubscriptionPlan = { auditLogs: boolean; dynamicSecret: boolean; auditLogsRetentionDays: number; + auditLogStreamLimit: number; + auditLogStreams: boolean; customAlerts: boolean; customRateLimits: boolean; pitRecovery: boolean; diff --git a/frontend/src/hooks/api/types.ts b/frontend/src/hooks/api/types.ts index d6b43d674..49949d88e 100644 --- a/frontend/src/hooks/api/types.ts +++ b/frontend/src/hooks/api/types.ts @@ -1,5 +1,6 @@ import { ZodIssue } from "zod"; +export type { TAuditLogStream } from "./auditLogStreams/types"; export type { GetAuthTokenAPI } from "./auth/types"; export type { IncidentContact } from "./incidentContacts/types"; export type { IntegrationAuth } from "./integrationAuth/types"; @@ -48,13 +49,13 @@ export enum ApiErrorTypes { export type TApiErrors = | { - error: ApiErrorTypes.ValidationError; - message: ZodIssue[]; - statusCode: 403; - } + error: ApiErrorTypes.ValidationError; + message: ZodIssue[]; + statusCode: 403; + } | { error: ApiErrorTypes.ForbiddenError; message: string; statusCode: 401 } | { - statusCode: 400; - message: string; - error: ApiErrorTypes.BadRequestError; - }; + statusCode: 400; + message: string; + error: ApiErrorTypes.BadRequestError; + }; From 8485fdc1cd0f2e4eb4f3eee9d9fabf1660b8cbd7 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Tue, 23 Apr 2024 20:52:38 +0530 Subject: [PATCH 15/46] feat(ui): audit log page completed --- .../ProjectSettingsPage.tsx | 12 +- .../AuditLogStreamTab/AuditLogStreamForm.tsx | 136 ++++++++++++ .../AuditLogStreamTab/AuditLogStreamTab.tsx | 200 ++++++++++++++++++ .../components/AuditLogStreamTab/index.tsx | 1 + .../ProjectSettingsPage/components/index.tsx | 1 + 5 files changed, 346 insertions(+), 4 deletions(-) create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx create mode 100644 frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/index.tsx diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index da87da755..cc521d813 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -4,10 +4,12 @@ import { Tab } from "@headlessui/react"; import { ProjectGeneralTab } from "./components/ProjectGeneralTab"; import { WebhooksTab } from "./components/WebhooksTab"; +import { AuditLogStreamsTab } from "./components"; const tabs = [ { name: "General", key: "tab-project-general" }, - { name: "Webhooks", key: "tab-project-webhooks" } + { name: "Webhooks", key: "tab-project-webhooks" }, + { name: "Audit Log Streams", key: "tab-project-audit-log-stream" } ]; export const ProjectSettingsPage = () => { @@ -25,9 +27,8 @@ export const ProjectSettingsPage = () => { {({ selected }) => ( @@ -42,6 +43,9 @@ export const ProjectSettingsPage = () => { + + + diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx new file mode 100644 index 000000000..d5f9c5cfd --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx @@ -0,0 +1,136 @@ +import { Controller, useForm } from "react-hook-form"; +import { z } from "zod"; + +import { createNotification } from "@app/components/notifications"; +import { Button, FormControl, Input, Spinner } from "@app/components/v2"; +import { useWorkspace } from "@app/context"; +import { + useCreateAuditLogStream, + useGetAuditLogStreamDetails, + useUpdateAuditLogStream +} from "@app/hooks/api"; + +type Props = { + id?: string; + onClose: () => void; +}; + +const formSchema = z.object({ + url: z.string().url().min(1), + token: z.string().optional() +}); +type TForm = z.infer; + +export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { + const isEdit = Boolean(id); + const { currentWorkspace } = useWorkspace(); + const projectSlug = currentWorkspace?.slug || ""; + + const auditLogStream = useGetAuditLogStreamDetails(id); + const createAuditLogStream = useCreateAuditLogStream(); + const updateAuditLogStream = useUpdateAuditLogStream(); + + const { + handleSubmit, + control, + formState: { isSubmitting } + } = useForm({ + values: auditLogStream?.data + }); + + const handleAuditLogStreamEdit = async ({ token, url }: TForm) => { + if (!id) return; + try { + await updateAuditLogStream.mutateAsync({ + id, + projectSlug, + token, + url + }); + createNotification({ + type: "success", + text: "Successfully updated stream" + }); + onClose(); + } catch (err) { + console.log(err); + createNotification({ + type: "error", + text: "Failed to update stream" + }); + } + }; + + const handleFormSubmit = async ({ token, url }: TForm) => { + if (isSubmitting) return; + if (isEdit) { + handleAuditLogStreamEdit({ token, url }); + return; + } + try { + await createAuditLogStream.mutateAsync({ + projectSlug, + token, + url + }); + createNotification({ + type: "success", + text: "Successfully created stream" + }); + onClose(); + } catch (err) { + console.log(err); + createNotification({ + type: "error", + text: "Failed to create stream" + }); + } + }; + + if (isEdit && auditLogStream.isLoading) { + return ( +
+ +
+ ); + } + + return ( +
+
+ ( + + + + )} + /> + ( + + + + )} + /> +
+
+ + +
+
+ ); +}; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx new file mode 100644 index 000000000..2c3234c10 --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx @@ -0,0 +1,200 @@ +import { faPlug, faPlus } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; + +import { createNotification } from "@app/components/notifications"; +import { ProjectPermissionCan } from "@app/components/permissions"; +import { + Button, + DeleteActionModal, + EmptyState, + Modal, + ModalContent, + Table, + TableContainer, + TableSkeleton, + TBody, + Td, + THead, + Tr, + UpgradePlanModal +} from "@app/components/v2"; +import { + ProjectPermissionActions, + ProjectPermissionSub, + useSubscription, + useWorkspace +} from "@app/context"; +import { withProjectPermission } from "@app/hoc"; +import { usePopUp } from "@app/hooks"; +import { useDeleteAuditLogStream, useGetAuditLogStreams } from "@app/hooks/api"; + +import { AuditLogStreamForm } from "./AuditLogStreamForm"; + +export const AuditLogStreamsTab = withProjectPermission( + () => { + const { currentWorkspace } = useWorkspace(); + const projectSlug = currentWorkspace?.slug || ""; + const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ + "auditLogStreamForm", + "deleteAuditLogStream", + "upgradePlan" + ] as const); + const { subscription } = useSubscription(); + + const { data: auditLogStreams, isLoading: isAuditLogStreamsLoading } = + useGetAuditLogStreams(projectSlug); + + // mutation + const { mutateAsync: deleteAuditLogStream } = useDeleteAuditLogStream(); + + const handleAuditLogStreamDelete = async () => { + try { + const auditLogStreamId = popUp?.deleteAuditLogStream?.data as string; + await deleteAuditLogStream({ + id: auditLogStreamId, + projectSlug + }); + handlePopUpClose("deleteAuditLogStream"); + createNotification({ + type: "success", + text: "Successfully deleted stream" + }); + } catch (err) { + console.log(err); + createNotification({ + type: "error", + text: "Failed to delete stream" + }); + } + }; + + return ( +
+
+

Audit Log Streams

+ + {(isAllowed) => ( + + )} + +
+

+ Manage audit log streams to send audit log to any logging providers with syslog support. +

+
+ + + + + + + + + + {isAuditLogStreamsLoading && ( + + )} + {!isAuditLogStreamsLoading && auditLogStreams && auditLogStreams?.length === 0 && ( + + + + )} + {!isAuditLogStreamsLoading && + auditLogStreams?.map(({ id, url }) => ( + + + + + ))} + +
URLAction
+ +
+ {url} + +
+ + {(isAllowed) => ( + + )} + + + {(isAllowed) => ( + + )} + +
+
+
+
+ { + handlePopUpToggle("auditLogStreamForm", isModalOpen); + }} + > + + handlePopUpToggle("auditLogStreamForm")} + /> + + + handlePopUpToggle("upgradePlan", isOpen)} + text="You can add audit log streams if you switch to Infisical's Enterprise plan." + /> + handlePopUpToggle("deleteAuditLogStream", isOpen)} + onClose={() => handlePopUpClose("deleteAuditLogStream")} + onDeleteApproved={handleAuditLogStreamDelete} + /> +
+ ); + }, + { action: ProjectPermissionActions.Read, subject: ProjectPermissionSub.Settings } +); diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/index.tsx new file mode 100644 index 000000000..ecce21f3b --- /dev/null +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/index.tsx @@ -0,0 +1 @@ +export { AuditLogStreamsTab } from "./AuditLogStreamTab"; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx index 72ac106a3..a3524152f 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx @@ -1,3 +1,4 @@ +export { AuditLogStreamsTab } from "./AuditLogStreamTab"; export { AutoCapitalizationSection } from "./AutoCapitalizationSection"; export { DeleteProjectSection } from "./DeleteProjectSection"; export { E2EESection } from "./E2EESection"; From fa18ca41ace008618db1de21f417fbed82e60411 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Tue, 23 Apr 2024 20:56:52 +0530 Subject: [PATCH 16/46] feat(server): fixed if projectid is missing --- backend/src/ee/services/audit-log/audit-log-queue.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index 1bf56ca3b..09083eabf 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -71,7 +71,7 @@ export const auditLogQueueServiceFactory = ({ userAgentType }); - const logStreams = await auditLogStreamDAL.find({ projectId }); + const logStreams = projectId ? await auditLogStreamDAL.find({ projectId }) : []; await Promise.allSettled( logStreams.map( async ({ url, encryptedTokenTag, encryptedTokenIV, encryptedTokenKeyEncoding, encryptedTokenCiphertext }) => { From 68a1aa6f4631e8320e1b1428a88d106ef5a7eaaa Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Tue, 23 Apr 2024 22:49:50 +0530 Subject: [PATCH 17/46] feat: switched audit log stream from project level to org level --- .../20240423070528_audit-log-stream.ts | 4 +- backend/src/db/schemas/audit-log-streams.ts | 2 +- .../ee/routes/v1/audit-log-stream-router.ts | 8 +- .../audit-log-stream-service.ts | 89 ++++++------------- .../audit-log-stream-types.ts | 15 ++-- .../ee/services/audit-log/audit-log-queue.ts | 2 +- backend/src/lib/api-docs/constants.ts | 4 - backend/src/lib/types/index.ts | 2 +- backend/src/server/routes/index.ts | 1 - .../hooks/api/auditLogStreams/mutations.tsx | 12 +-- .../src/hooks/api/auditLogStreams/queries.tsx | 19 ++-- .../src/hooks/api/auditLogStreams/types.ts | 6 +- .../AuditLogStreamTab/AuditLogStreamForm.tsx | 10 +-- .../AuditLogStreamTab/AuditLogStreamTab.tsx | 47 +++++----- .../components/AuditLogStreamTab/index.tsx | 0 .../components/OrgTabGroup/OrgTabGroup.tsx | 12 ++- .../ProjectSettingsPage.tsx | 5 -- .../ProjectSettingsPage/components/index.tsx | 1 - 18 files changed, 92 insertions(+), 147 deletions(-) rename frontend/src/views/Settings/{ProjectSettingsPage => OrgSettingsPage}/components/AuditLogStreamTab/AuditLogStreamForm.tsx (94%) rename frontend/src/views/Settings/{ProjectSettingsPage => OrgSettingsPage}/components/AuditLogStreamTab/AuditLogStreamTab.tsx (84%) rename frontend/src/views/Settings/{ProjectSettingsPage => OrgSettingsPage}/components/AuditLogStreamTab/index.tsx (100%) diff --git a/backend/src/db/migrations/20240423070528_audit-log-stream.ts b/backend/src/db/migrations/20240423070528_audit-log-stream.ts index 0fac59be8..c4133fb94 100644 --- a/backend/src/db/migrations/20240423070528_audit-log-stream.ts +++ b/backend/src/db/migrations/20240423070528_audit-log-stream.ts @@ -13,8 +13,8 @@ export async function up(knex: Knex): Promise { t.text("encryptedTokenTag"); t.string("encryptedTokenAlgorithm"); t.string("encryptedTokenKeyEncoding"); - t.string("projectId").notNullable(); - t.foreign("projectId").references("id").inTable(TableName.Project).onDelete("CASCADE"); + t.uuid("orgId").notNullable(); + t.foreign("orgId").references("id").inTable(TableName.Organization).onDelete("CASCADE"); t.timestamps(true, true, true); }); } diff --git a/backend/src/db/schemas/audit-log-streams.ts b/backend/src/db/schemas/audit-log-streams.ts index 154c865de..bab73d0c5 100644 --- a/backend/src/db/schemas/audit-log-streams.ts +++ b/backend/src/db/schemas/audit-log-streams.ts @@ -15,7 +15,7 @@ export const AuditLogStreamsSchema = z.object({ encryptedTokenTag: z.string().nullable().optional(), encryptedTokenAlgorithm: z.string().nullable().optional(), encryptedTokenKeyEncoding: z.string().nullable().optional(), - projectId: z.string(), + orgId: z.string().uuid(), createdAt: z.date(), updatedAt: z.date() }); diff --git a/backend/src/ee/routes/v1/audit-log-stream-router.ts b/backend/src/ee/routes/v1/audit-log-stream-router.ts index a3dcac78c..d11b74cc3 100644 --- a/backend/src/ee/routes/v1/audit-log-stream-router.ts +++ b/backend/src/ee/routes/v1/audit-log-stream-router.ts @@ -21,7 +21,6 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = } ], body: z.object({ - projectSlug: z.string().min(1).describe(AUDIT_LOG_STREAMS.CREATE.projectSlug), url: z.string().min(1).describe(AUDIT_LOG_STREAMS.CREATE.url), token: z.string().optional().describe(AUDIT_LOG_STREAMS.CREATE.token) }), @@ -38,7 +37,6 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = actor: req.permission.type, actorOrgId: req.permission.orgId, actorAuthMethod: req.permission.authMethod, - projectSlug: req.body.projectSlug, url: req.body.url, token: req.body.token }); @@ -174,9 +172,6 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = bearerAuth: [] } ], - querystring: z.object({ - projectSlug: z.string().describe(AUDIT_LOG_STREAMS.LIST.projectSlug) - }), response: { 200: z.object({ auditLogStreams: SanitizedAuditLogStreamSchema.array() @@ -189,8 +184,7 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = actorId: req.permission.id, actor: req.permission.type, actorOrgId: req.permission.orgId, - actorAuthMethod: req.permission.authMethod, - projectSlug: req.query.projectSlug + actorAuthMethod: req.permission.authMethod }); return { auditLogStreams }; diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts index 87cb3294a..cff4ed49a 100644 --- a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts @@ -4,11 +4,10 @@ import { SecretKeyEncoding } from "@app/db/schemas"; import { infisicalSymmetricDecrypt, infisicalSymmetricEncypt } from "@app/lib/crypto/encryption"; import { BadRequestError } from "@app/lib/errors"; import { validateLocalIps } from "@app/lib/validator"; -import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TLicenseServiceFactory } from "../license/license-service"; +import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-permission"; import { TPermissionServiceFactory } from "../permission/permission-service"; -import { ProjectPermissionActions, ProjectPermissionSub } from "../permission/project-permission"; import { TAuditLogStreamDALFactory } from "./audit-log-stream-dal"; import { TCreateAuditLogStreamDTO, @@ -20,8 +19,7 @@ import { type TAuditLogStreamServiceFactoryDep = { auditLogStreamDAL: TAuditLogStreamDALFactory; - permissionService: Pick; - projectDAL: Pick; + permissionService: Pick; licenseService: Pick; }; @@ -30,40 +28,29 @@ export type TAuditLogStreamServiceFactory = ReturnType { - const create = async ({ - projectSlug, - url, - actor, - token, - actorId, - actorOrgId, - actorAuthMethod - }: TCreateAuditLogStreamDTO) => { + const create = async ({ url, actor, token, actorId, actorOrgId, actorAuthMethod }: TCreateAuditLogStreamDTO) => { + if (!actorOrgId) throw new BadRequestError({ message: "Missing org id from token" }); + const plan = await licenseService.getPlan(actorOrgId); if (!plan.auditLogStreams) throw new BadRequestError({ message: "Failed to create audit log streams due to plan restriction. Upgrade plan to create group." }); - const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); - if (!project) throw new BadRequestError({ message: "Project not found" }); - const projectId = project.id; - - const { permission } = await permissionService.getProjectPermission( + const { permission } = await permissionService.getOrgPermission( actor, actorId, - projectId, + actorOrgId, actorAuthMethod, actorOrgId ); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Settings); + ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Create, OrgPermissionSubjects.Settings); validateLocalIps(url); - const totalStreams = await auditLogStreamDAL.find({ projectId }); + const totalStreams = await auditLogStreamDAL.find({ orgId: actorOrgId }); if (totalStreams.length >= plan.auditLogStreamLimit) { throw new BadRequestError({ message: @@ -72,7 +59,7 @@ export const auditLogStreamServiceFactory = ({ } const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; const logStream = await auditLogStreamDAL.create({ - projectId, + orgId: actorOrgId, url, ...(encryptedToken ? { @@ -96,6 +83,8 @@ export const auditLogStreamServiceFactory = ({ actorOrgId, actorAuthMethod }: TUpdateAuditLogStreamDTO) => { + if (!actorOrgId) throw new BadRequestError({ message: "Missing org id from token" }); + const plan = await licenseService.getPlan(actorOrgId); if (!plan.auditLogStreams) throw new BadRequestError({ @@ -105,20 +94,13 @@ export const auditLogStreamServiceFactory = ({ const logStream = await auditLogStreamDAL.findById(id); if (!logStream) throw new BadRequestError({ message: "Audit log stream not found" }); - const { projectId } = logStream; - const { permission } = await permissionService.getProjectPermission( - actor, - actorId, - projectId, - actorAuthMethod, - actorOrgId - ); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Edit, ProjectPermissionSub.Settings); + const { orgId } = logStream; + const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId); + ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Edit, OrgPermissionSubjects.Settings); if (url) validateLocalIps(url); const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; const updatedLogStream = await auditLogStreamDAL.updateById(id, { - projectId, url, ...(encryptedToken ? { @@ -134,18 +116,14 @@ export const auditLogStreamServiceFactory = ({ }; const deleteById = async ({ id, actor, actorId, actorOrgId, actorAuthMethod }: TDeleteAuditLogStreamDTO) => { + if (!actorOrgId) throw new BadRequestError({ message: "Missing org id from token" }); + const logStream = await auditLogStreamDAL.findById(id); if (!logStream) throw new BadRequestError({ message: "Audit log stream not found" }); - const { projectId } = logStream; - const { permission } = await permissionService.getProjectPermission( - actor, - actorId, - projectId, - actorAuthMethod, - actorOrgId - ); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Delete, ProjectPermissionSub.Settings); + const { orgId } = logStream; + const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId); + ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Delete, OrgPermissionSubjects.Settings); const deletedLogStream = await auditLogStreamDAL.deleteById(id); return deletedLogStream; @@ -155,15 +133,10 @@ export const auditLogStreamServiceFactory = ({ const logStream = await auditLogStreamDAL.findById(id); if (!logStream) throw new BadRequestError({ message: "Audit log stream not found" }); - const { projectId } = logStream; - const { permission } = await permissionService.getProjectPermission( - actor, - actorId, - projectId, - actorAuthMethod, - actorOrgId - ); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Read, ProjectPermissionSub.Settings); + const { orgId } = logStream; + const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId); + ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Read, OrgPermissionSubjects.Settings); + const token = logStream?.encryptedTokenCiphertext && logStream?.encryptedTokenIV && logStream?.encryptedTokenTag ? infisicalSymmetricDecrypt({ @@ -177,21 +150,17 @@ export const auditLogStreamServiceFactory = ({ return { ...logStream, token }; }; - const list = async ({ projectSlug, actor, actorId, actorOrgId, actorAuthMethod }: TListAuditLogStreamDTO) => { - const project = await projectDAL.findProjectBySlug(projectSlug, actorOrgId); - if (!project) throw new BadRequestError({ message: "Project not found" }); - const projectId = project.id; - - const { permission } = await permissionService.getProjectPermission( + const list = async ({ actor, actorId, actorOrgId, actorAuthMethod }: TListAuditLogStreamDTO) => { + const { permission } = await permissionService.getOrgPermission( actor, actorId, - projectId, + actorOrgId, actorAuthMethod, actorOrgId ); - ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Settings); + ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Read, OrgPermissionSubjects.Settings); - const logStreams = await auditLogStreamDAL.find({ projectId }); + const logStreams = await auditLogStreamDAL.find({ orgId: actorOrgId }); return logStreams; }; diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts index f25c423fa..ec8c14923 100644 --- a/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts @@ -1,25 +1,22 @@ -import { TProjectPermission } from "@app/lib/types"; +import { TOrgPermission } from "@app/lib/types"; -export type TCreateAuditLogStreamDTO = Omit & { - projectSlug: string; +export type TCreateAuditLogStreamDTO = Omit & { url: string; token?: string; }; -export type TUpdateAuditLogStreamDTO = Omit & { +export type TUpdateAuditLogStreamDTO = Omit & { id: string; url?: string; token?: string; }; -export type TDeleteAuditLogStreamDTO = Omit & { +export type TDeleteAuditLogStreamDTO = Omit & { id: string; }; -export type TListAuditLogStreamDTO = Omit & { - projectSlug: string; -}; +export type TListAuditLogStreamDTO = Omit; -export type TGetDetailsAuditLogStreamDTO = Omit & { +export type TGetDetailsAuditLogStreamDTO = Omit & { id: string; }; diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index 09083eabf..75a733289 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -71,7 +71,7 @@ export const auditLogQueueServiceFactory = ({ userAgentType }); - const logStreams = projectId ? await auditLogStreamDAL.find({ projectId }) : []; + const logStreams = orgId ? await auditLogStreamDAL.find({ orgId }) : []; await Promise.allSettled( logStreams.map( async ({ url, encryptedTokenTag, encryptedTokenIV, encryptedTokenKeyEncoding, encryptedTokenCiphertext }) => { diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index d8b1c6469..2ede304f2 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -617,7 +617,6 @@ export const INTEGRATION = { export const AUDIT_LOG_STREAMS = { CREATE: { - projectSlug: "The slug of the project to create audit log stream.", url: "The socket URL to push logs to.", token: "Authentication token for the external provider used for identification." }, @@ -629,9 +628,6 @@ export const AUDIT_LOG_STREAMS = { DELETE: { id: "The ID of the audit log stream to delete." }, - LIST: { - projectSlug: "The slug of the project to list audit log streams." - }, GET_BY_ID: { id: "The ID of the audit log stream to get details." } diff --git a/backend/src/lib/types/index.ts b/backend/src/lib/types/index.ts index b3b46e739..2c41f4d23 100644 --- a/backend/src/lib/types/index.ts +++ b/backend/src/lib/types/index.ts @@ -17,7 +17,7 @@ export type TOrgPermission = { actorId: string; orgId: string; actorAuthMethod: ActorAuthMethod; - actorOrgId: string | undefined; + actorOrgId: string; }; export type TProjectPermission = { diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index d53256bc2..25e807cc2 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -251,7 +251,6 @@ export const registerRoutes = async ( }); const auditLogService = auditLogServiceFactory({ auditLogDAL, permissionService, auditLogQueue }); const auditLogStreamService = auditLogStreamServiceFactory({ - projectDAL, licenseService, permissionService, auditLogStreamDAL diff --git a/frontend/src/hooks/api/auditLogStreams/mutations.tsx b/frontend/src/hooks/api/auditLogStreams/mutations.tsx index 902efbb57..2d99f57c4 100644 --- a/frontend/src/hooks/api/auditLogStreams/mutations.tsx +++ b/frontend/src/hooks/api/auditLogStreams/mutations.tsx @@ -21,8 +21,8 @@ export const useCreateAuditLogStream = () => { ); return data; }, - onSuccess: (_, { projectSlug }) => { - queryClient.invalidateQueries(auditLogStreamKeys.list(projectSlug)); + onSuccess: (_, { orgId }) => { + queryClient.invalidateQueries(auditLogStreamKeys.list(orgId)); } }); }; @@ -38,8 +38,8 @@ export const useUpdateAuditLogStream = () => { ); return data; }, - onSuccess: (_, { projectSlug }) => { - queryClient.invalidateQueries(auditLogStreamKeys.list(projectSlug)); + onSuccess: (_, { orgId }) => { + queryClient.invalidateQueries(auditLogStreamKeys.list(orgId)); } }); }; @@ -54,8 +54,8 @@ export const useDeleteAuditLogStream = () => { ); return data; }, - onSuccess: (_, { projectSlug }) => { - queryClient.invalidateQueries(auditLogStreamKeys.list(projectSlug)); + onSuccess: (_, { orgId }) => { + queryClient.invalidateQueries(auditLogStreamKeys.list(orgId)); } }); }; diff --git a/frontend/src/hooks/api/auditLogStreams/queries.tsx b/frontend/src/hooks/api/auditLogStreams/queries.tsx index 4c636ac28..f86ca0dce 100644 --- a/frontend/src/hooks/api/auditLogStreams/queries.tsx +++ b/frontend/src/hooks/api/auditLogStreams/queries.tsx @@ -5,28 +5,23 @@ import { apiRequest } from "@app/config/request"; import { TAuditLogStream } from "./types"; export const auditLogStreamKeys = { - list: (projectSlug: string) => ["audit-log-stream", { projectSlug }], + list: (orgId: string) => ["audit-log-stream", { orgId }], getById: (id: string) => ["audit-log-stream-details", { id }] }; -const fetchAuditLogStreams = async (projectSlug: string) => { +const fetchAuditLogStreams = async () => { const { data } = await apiRequest.get<{ auditLogStreams: TAuditLogStream[] }>( - "/api/v1/audit-log-streams", - { - params: { - projectSlug - } - } + "/api/v1/audit-log-streams" ); return data.auditLogStreams; }; -export const useGetAuditLogStreams = (projectSlug: string) => +export const useGetAuditLogStreams = (orgId: string) => useQuery({ - queryKey: auditLogStreamKeys.list(projectSlug), - queryFn: () => fetchAuditLogStreams(projectSlug), - enabled: Boolean(projectSlug) + queryKey: auditLogStreamKeys.list(orgId), + queryFn: () => fetchAuditLogStreams(), + enabled: Boolean(orgId) }); const fetchAuditLogStreamDetails = async (id: string) => { diff --git a/frontend/src/hooks/api/auditLogStreams/types.ts b/frontend/src/hooks/api/auditLogStreams/types.ts index 3163f96d7..7e73ae301 100644 --- a/frontend/src/hooks/api/auditLogStreams/types.ts +++ b/frontend/src/hooks/api/auditLogStreams/types.ts @@ -5,19 +5,19 @@ export type TAuditLogStream = { }; export type TCreateAuditLogStreamDTO = { - projectSlug: string; url: string; token?: string; + orgId: string; }; export type TUpdateAuditLogStreamDTO = { id: string; - projectSlug: string; url?: string; token?: string; + orgId: string; }; export type TDeleteAuditLogStreamDTO = { id: string; - projectSlug: string; + orgId: string; }; diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx similarity index 94% rename from frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx rename to frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx index d5f9c5cfd..a47215f21 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx @@ -3,7 +3,7 @@ import { z } from "zod"; import { createNotification } from "@app/components/notifications"; import { Button, FormControl, Input, Spinner } from "@app/components/v2"; -import { useWorkspace } from "@app/context"; +import { useOrganization } from "@app/context"; import { useCreateAuditLogStream, useGetAuditLogStreamDetails, @@ -23,8 +23,8 @@ type TForm = z.infer; export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { const isEdit = Boolean(id); - const { currentWorkspace } = useWorkspace(); - const projectSlug = currentWorkspace?.slug || ""; + const { currentOrg } = useOrganization(); + const orgId = currentOrg?.id || ""; const auditLogStream = useGetAuditLogStreamDetails(id); const createAuditLogStream = useCreateAuditLogStream(); @@ -43,7 +43,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { try { await updateAuditLogStream.mutateAsync({ id, - projectSlug, + orgId, token, url }); @@ -69,7 +69,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { } try { await createAuditLogStream.mutateAsync({ - projectSlug, + orgId, token, url }); diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx similarity index 84% rename from frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx rename to frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx index 2c3234c10..be03b698e 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx @@ -2,7 +2,7 @@ import { faPlug, faPlus } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { createNotification } from "@app/components/notifications"; -import { ProjectPermissionCan } from "@app/components/permissions"; +import { OrgPermissionCan } from "@app/components/permissions"; import { Button, DeleteActionModal, @@ -19,21 +19,21 @@ import { UpgradePlanModal } from "@app/components/v2"; import { - ProjectPermissionActions, - ProjectPermissionSub, - useSubscription, - useWorkspace + OrgPermissionActions, + OrgPermissionSubjects, + useOrganization, + useSubscription } from "@app/context"; -import { withProjectPermission } from "@app/hoc"; +import { withPermission } from "@app/hoc"; import { usePopUp } from "@app/hooks"; import { useDeleteAuditLogStream, useGetAuditLogStreams } from "@app/hooks/api"; import { AuditLogStreamForm } from "./AuditLogStreamForm"; -export const AuditLogStreamsTab = withProjectPermission( +export const AuditLogStreamsTab = withPermission( () => { - const { currentWorkspace } = useWorkspace(); - const projectSlug = currentWorkspace?.slug || ""; + const { currentOrg } = useOrganization(); + const orgId = currentOrg?.id || ""; const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ "auditLogStreamForm", "deleteAuditLogStream", @@ -42,7 +42,7 @@ export const AuditLogStreamsTab = withProjectPermission( const { subscription } = useSubscription(); const { data: auditLogStreams, isLoading: isAuditLogStreamsLoading } = - useGetAuditLogStreams(projectSlug); + useGetAuditLogStreams(orgId); // mutation const { mutateAsync: deleteAuditLogStream } = useDeleteAuditLogStream(); @@ -52,7 +52,7 @@ export const AuditLogStreamsTab = withProjectPermission( const auditLogStreamId = popUp?.deleteAuditLogStream?.data as string; await deleteAuditLogStream({ id: auditLogStreamId, - projectSlug + orgId }); handlePopUpClose("deleteAuditLogStream"); createNotification({ @@ -72,10 +72,7 @@ export const AuditLogStreamsTab = withProjectPermission(

Audit Log Streams

- + {(isAllowed) => ( )} - +

Manage audit log streams to send audit log to any logging providers with syslog support. @@ -124,9 +121,9 @@ export const AuditLogStreamsTab = withProjectPermission(

- {(isAllowed) => (
@@ -196,5 +193,5 @@ export const AuditLogStreamsTab = withProjectPermission(
); }, - { action: ProjectPermissionActions.Read, subject: ProjectPermissionSub.Settings } + { action: OrgPermissionActions.Read, subject: OrgPermissionSubjects.Settings } ); diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/index.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/index.tsx similarity index 100% rename from frontend/src/views/Settings/ProjectSettingsPage/components/AuditLogStreamTab/index.tsx rename to frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/index.tsx diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/OrgTabGroup/OrgTabGroup.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/OrgTabGroup/OrgTabGroup.tsx index de6bf0453..fdf541c54 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/components/OrgTabGroup/OrgTabGroup.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/OrgTabGroup/OrgTabGroup.tsx @@ -1,12 +1,14 @@ import { Fragment } from "react"; import { Tab } from "@headlessui/react"; +import { AuditLogStreamsTab } from "../AuditLogStreamTab"; import { OrgAuthTab } from "../OrgAuthTab"; import { OrgGeneralTab } from "../OrgGeneralTab"; const tabs = [ { name: "General", key: "tab-org-general" }, - { name: "Security", key: "tab-org-security" } + { name: "Security", key: "tab-org-security" }, + { name: "Audit Log Streams", key: "tag-audit-log-streams" } ]; export const OrgTabGroup = () => { return ( @@ -17,9 +19,8 @@ export const OrgTabGroup = () => { {({ selected }) => ( @@ -34,6 +35,9 @@ export const OrgTabGroup = () => { + + + ); diff --git a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx index cc521d813..1d453b872 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/ProjectSettingsPage.tsx @@ -4,12 +4,10 @@ import { Tab } from "@headlessui/react"; import { ProjectGeneralTab } from "./components/ProjectGeneralTab"; import { WebhooksTab } from "./components/WebhooksTab"; -import { AuditLogStreamsTab } from "./components"; const tabs = [ { name: "General", key: "tab-project-general" }, { name: "Webhooks", key: "tab-project-webhooks" }, - { name: "Audit Log Streams", key: "tab-project-audit-log-stream" } ]; export const ProjectSettingsPage = () => { @@ -43,9 +41,6 @@ export const ProjectSettingsPage = () => { - - - diff --git a/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx b/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx index a3524152f..72ac106a3 100644 --- a/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx +++ b/frontend/src/views/Settings/ProjectSettingsPage/components/index.tsx @@ -1,4 +1,3 @@ -export { AuditLogStreamsTab } from "./AuditLogStreamTab"; export { AutoCapitalizationSection } from "./AutoCapitalizationSection"; export { DeleteProjectSection } from "./DeleteProjectSection"; export { E2EESection } from "./E2EESection"; From 37882e634445956957af3f3f9285719b7ee8bd40 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Thu, 2 May 2024 13:43:48 -0400 Subject: [PATCH 18/46] rephrase ui texts --- backend/src/lib/api-docs/constants.ts | 2 +- .../components/AuditLogStreamTab/AuditLogStreamForm.tsx | 4 ++-- .../components/AuditLogStreamTab/AuditLogStreamTab.tsx | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 2ede304f2..40043c900 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -618,7 +618,7 @@ export const INTEGRATION = { export const AUDIT_LOG_STREAMS = { CREATE: { url: "The socket URL to push logs to.", - token: "Authentication token for the external provider used for identification." + token: "Authentication token from the logging provider" }, UPDATE: { id: "The ID of the audit log stream to update.", diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx index a47215f21..7f0ec24e8 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx @@ -102,7 +102,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { control={control} name="url" render={({ field, fieldState: { error } }) => ( - + )} @@ -116,7 +116,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { isOptional isError={Boolean(error?.message)} errorText={error?.message} - helperText="A token serves for identification and is sent in Authorization Bearer format." + helperText="The bearer token used to authenticate with the logging provider endpoint" > diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx index be03b698e..7590d4002 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamTab.tsx @@ -91,7 +91,7 @@ export const AuditLogStreamsTab = withPermission(

- Manage audit log streams to send audit log to any logging providers with syslog support. + Send audit logs from Infisical to external logging providers via HTTP

@@ -169,7 +169,7 @@ export const AuditLogStreamsTab = withPermission( > Date: Thu, 2 May 2024 13:58:33 -0400 Subject: [PATCH 19/46] add line breaks for readiblity --- backend/src/ee/services/audit-log/audit-log-queue.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index 75a733289..bf03d7548 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -84,8 +84,11 @@ export const auditLogQueueServiceFactory = ({ ciphertext: encryptedTokenCiphertext }) : undefined; + const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; + if (token) headers.Authorization = `Bearer ${token}`; + return request.post(url, auditLog, { headers, // request timeout From d650fd68c04f06717c202d71bfd5469c5e5e39dd Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 00:21:49 +0530 Subject: [PATCH 20/46] feat: improved api desc, added ping check before accepting stream --- .../audit-log-stream-service.ts | 34 +++++++++++++++++++ .../ee/services/audit-log/audit-log-queue.ts | 2 +- .../src/ee/services/license/licence-fns.ts | 6 ++-- backend/src/lib/api-docs/constants.ts | 6 ++-- .../AuditLogStreamTab/AuditLogStreamForm.tsx | 6 ++-- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts index cff4ed49a..fd6e10a28 100644 --- a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts @@ -1,10 +1,13 @@ import { ForbiddenError } from "@casl/ability"; +import { RawAxiosRequestHeaders } from "axios"; import { SecretKeyEncoding } from "@app/db/schemas"; +import { request } from "@app/lib/config/request"; import { infisicalSymmetricDecrypt, infisicalSymmetricEncypt } from "@app/lib/crypto/encryption"; import { BadRequestError } from "@app/lib/errors"; import { validateLocalIps } from "@app/lib/validator"; +import { AUDIT_LOG_STREAM_TIMEOUT } from "../audit-log/audit-log-queue"; import { TLicenseServiceFactory } from "../license/license-service"; import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-permission"; import { TPermissionServiceFactory } from "../permission/permission-service"; @@ -57,6 +60,21 @@ export const auditLogStreamServiceFactory = ({ "Failed to create audit log streams due to plan limit reached. Kindly contact Infisical to add more streams." }); } + + // testing connection first + const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; + if (token) headers.Authorization = `Bearer ${token}`; + await request.post( + url, + { ping: "ok" }, + { + headers, + // request timeout + timeout: AUDIT_LOG_STREAM_TIMEOUT, + // connection timeout + signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) + } + ); const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; const logStream = await auditLogStreamDAL.create({ orgId: actorOrgId, @@ -99,6 +117,22 @@ export const auditLogStreamServiceFactory = ({ ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Edit, OrgPermissionSubjects.Settings); if (url) validateLocalIps(url); + + // testing connection first + const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; + if (token) headers.Authorization = `Bearer ${token}`; + await request.post( + url || logStream.url, + { ping: "ok" }, + { + headers, + // request timeout + timeout: AUDIT_LOG_STREAM_TIMEOUT, + // connection timeout + signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) + } + ); + const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; const updatedLogStream = await auditLogStreamDAL.updateById(id, { url, diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index bf03d7548..a4d504d35 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -24,7 +24,7 @@ export type TAuditLogQueueServiceFactory = ReturnType ({ rbac: false, customRateLimits: false, customAlerts: false, - auditLogs: false, - auditLogsRetentionDays: 0, - auditLogStreams: false, + auditLogs: true, + auditLogsRetentionDays: 3, + auditLogStreams: true, auditLogStreamLimit: 3, samlSSO: false, scim: false, diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 40043c900..b4c0c2a5c 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -617,12 +617,12 @@ export const INTEGRATION = { export const AUDIT_LOG_STREAMS = { CREATE: { - url: "The socket URL to push logs to.", - token: "Authentication token from the logging provider" + url: "The HTTP URL to push logs to.", + token: "Authentication token for the external provider used for identification." }, UPDATE: { id: "The ID of the audit log stream to update.", - url: "The socket URL to push logs to.", + url: "The HTTP URL to push logs to.", token: "Authentication token for the external provider used for identification." }, DELETE: { diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx index 7f0ec24e8..66acea296 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx @@ -64,7 +64,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { const handleFormSubmit = async ({ token, url }: TForm) => { if (isSubmitting) return; if (isEdit) { - handleAuditLogStreamEdit({ token, url }); + await handleAuditLogStreamEdit({ token, url }); return; } try { @@ -102,7 +102,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { control={control} name="url" render={({ field, fieldState: { error } }) => ( - + )} @@ -118,7 +118,7 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { errorText={error?.message} helperText="The bearer token used to authenticate with the logging provider endpoint" > - + )} /> From 8eb22630b6f1a6c0861f0a4f0db0efb822b3ddb2 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 00:22:22 +0530 Subject: [PATCH 21/46] docs: added docs for audit log stream --- .../platform/audit-log-streams.mdx | 56 ++++++++++++++++++ .../betterstack-create-source.png | Bin 0 -> 129058 bytes .../betterstack-source-details.png | Bin 0 -> 263611 bytes .../audit-log-streams/stream-create.png | Bin 0 -> 369495 bytes .../audit-log-streams/stream-inputs.png | Bin 0 -> 97341 bytes .../audit-log-streams/stream-list.png | Bin 0 -> 114423 bytes docs/mint.json | 3 +- 7 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 docs/documentation/platform/audit-log-streams.mdx create mode 100644 docs/images/platform/audit-log-streams/betterstack-create-source.png create mode 100644 docs/images/platform/audit-log-streams/betterstack-source-details.png create mode 100644 docs/images/platform/audit-log-streams/stream-create.png create mode 100644 docs/images/platform/audit-log-streams/stream-inputs.png create mode 100644 docs/images/platform/audit-log-streams/stream-list.png diff --git a/docs/documentation/platform/audit-log-streams.mdx b/docs/documentation/platform/audit-log-streams.mdx new file mode 100644 index 000000000..847501861 --- /dev/null +++ b/docs/documentation/platform/audit-log-streams.mdx @@ -0,0 +1,56 @@ +--- +title: "Audit Log Streams" +description: "Learn how to stream Infisical Audit Logs to external logging providers." +--- + + + Audit log streams is a paid feature. + + If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, + then you should contact team@infisical.com to purchase an enterprise license to use it. + + +Infisical Audit Log Streaming enables you to transmit your organization's Audit Logs to external logging providers for monitoring and analysis. + +The logs are formatted in JSON, requiring your logging provider to support JSON-based log parsing. + + +## Overview + + + + + ![stream create](../../images/platform/audit-log-streams/stream-create.png) + + + ![stream create](../../images/platform/audit-log-streams/stream-inputs.png) + + Provide the following values + + The HTTPS endpoint URL of the logging provider that collects the JSON stream. + + + Bearer token used by the logging providers for identification and authentication. + + + + +![stream listt](../../images/platform/audit-log-streams/stream-list.png) +Your Audit Logs are now ready to be streamed. + +## Example Providers + +### Better Stack + + + + ![better stack connect source](../../images/platform/audit-log-streams/betterstack-create-source.png) + + + + ![better stack connect](../../images/platform/audit-log-streams/betterstack-source-details.png) + + 1. Copy the **Source token** field from Better Stack to the **Token** field. + 2. Copy the **endpoint** from Better Stack to the **Endpoint URL** field. + + diff --git a/docs/images/platform/audit-log-streams/betterstack-create-source.png b/docs/images/platform/audit-log-streams/betterstack-create-source.png new file mode 100644 index 0000000000000000000000000000000000000000..bee4513ea5f9a8e1745d8df85a833eb012bc4882 GIT binary patch literal 129058 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 N52YWZ-P3&Y{{XaBl>Yz# literal 0 HcmV?d00001 diff --git a/docs/images/platform/audit-log-streams/betterstack-source-details.png b/docs/images/platform/audit-log-streams/betterstack-source-details.png new file mode 100644 index 0000000000000000000000000000000000000000..d67980ae8a11d7a2be3e4c216735a359c4a5d3d9 GIT binary patch literal 263611 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%0A^ z5Am0x8h1WRLBP;5%QT9H|B>Y|0j^`Iv?X8s|H>b|)r(+W!WrSmufDM>V4sF}5# zawjld=O3*;_)a>@C*E`=lg4kD?h5Fow>=YI;&eTmbT%s0G9QzTz>2VNg7p`(U0W`5 zR;cR}s3<~L`O@Wuq6NMvvZ1{eUXjug7L&C(gNB$@5JE}8km$_=_TIdmU#g@?$;#2c zh*BrIGiNz(kJSW@6bo%z?y~JK(3MPIEte?xVQt|_)j+&t2fARXotIL+KC3W%QWDOgu1t;iCw zgsH`6pqzGdC;Hx{ZmHYen)e0MZ7t=S3L3SI>&x){GB)^6Slmk;RRA}rtsqN<}(sbm%QUs#N)#sB~S literal 0 HcmV?d00001 diff --git a/docs/images/platform/audit-log-streams/stream-create.png b/docs/images/platform/audit-log-streams/stream-create.png new file mode 100644 index 0000000000000000000000000000000000000000..949278e3d163aee0a18e39950b58fef8774a712e GIT binary patch literal 369495 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
+
( - + )} /> - ( - + {headerFields.fields.map(({ id: headerFieldId }, i) => ( +
+ ( + + + + )} + /> + ( + + + + )} + /> + { + const header = getValues("headers"); + if (header && header?.length > 1) { + headerFields.remove(i); + } else { + setValue("headers", [{ key: "", value: "" }]); + } + }} > - - - )} - /> + + +
+ ))} +
+ +
)}
- {window.location.origin.includes("https://app.infisical.com") || window.location.origin.includes("http://localhost:8080") && ( + {(window.location.origin.includes("https://app.infisical.com") || window.location.origin.includes("http://localhost:8080")) && (
Scheduled maintenance on April 13th 2024 {" "}
- Infisical will undergo scheduled maintenance for approximately 1 hour on Saturday, April 13th, 11am EST. During these hours, read - operations will continue to function normally but no resources will be editable. + Infisical will undergo scheduled maintenance for approximately 2 hour on Saturday, May 11th, 11am EST. During these hours, read + operations to Infisical will continue to function normally but no resources will be editable. No action is required on your end — your applications will continue to fetch secrets.
From 8f3883c7d4308603d11e95622c102939f84b6b39 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 3 May 2024 08:20:20 -0400 Subject: [PATCH 27/46] update date --- frontend/src/pages/org/[id]/overview/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/pages/org/[id]/overview/index.tsx b/frontend/src/pages/org/[id]/overview/index.tsx index b29ee7298..ab9fa790d 100644 --- a/frontend/src/pages/org/[id]/overview/index.tsx +++ b/frontend/src/pages/org/[id]/overview/index.tsx @@ -602,7 +602,7 @@ const OrganizationPage = withPermission( >
- Scheduled maintenance on April 13th 2024 {" "} + Scheduled maintenance on May 11th 2024 {" "}
Infisical will undergo scheduled maintenance for approximately 2 hour on Saturday, May 11th, 11am EST. During these hours, read operations to Infisical will continue to function normally but no resources will be editable. From ee8a88d06226ff333abe6a8269a0a56f4b8d1760 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Fri, 3 May 2024 08:44:43 -0400 Subject: [PATCH 28/46] Update docker-swarm.mdx --- docs/self-hosting/deployment-options/docker-swarm.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/self-hosting/deployment-options/docker-swarm.mdx b/docs/self-hosting/deployment-options/docker-swarm.mdx index f071a2ad1..c63aff23b 100644 --- a/docs/self-hosting/deployment-options/docker-swarm.mdx +++ b/docs/self-hosting/deployment-options/docker-swarm.mdx @@ -84,7 +84,7 @@ The [Docker stack file](https://github.com/Infisical/infisical/tree/main/docker- ``` - docker swarm init --advertise-addr + docker swarm init ``` Replace `` with the IP address of the VM that will serve as the manager node. Remember to copy the join token returned by the this init command. From fdda247120def9173a8a65be444db7c49600f240 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 17:51:02 +0530 Subject: [PATCH 29/46] feat: added a catch and override error message for ping check --- .../audit-log-stream-service.ts | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts index b82ce04ae..0e313b59b 100644 --- a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts @@ -140,17 +140,21 @@ export const auditLogStreamServiceFactory = ({ streamHeaders[key] = value; }); - await request.post( - url || logStream.url, - { ping: "ok" }, - { - headers: streamHeaders, - // request timeout - timeout: AUDIT_LOG_STREAM_TIMEOUT, - // connection timeout - signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) - } - ); + await request + .post( + url || logStream.url, + { ping: "ok" }, + { + headers: streamHeaders, + // request timeout + timeout: AUDIT_LOG_STREAM_TIMEOUT, + // connection timeout + signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) + } + ) + .catch((err) => { + throw new Error(`Failed to connect with the source ${(err as Error)?.message}`); + }); const encryptedHeaders = headers ? infisicalSymmetricEncypt(JSON.stringify(headers)) : undefined; const updatedLogStream = await auditLogStreamDAL.updateById(id, { From b667dccc0df2066f0ec3de77e29c142f593099d3 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 18:19:37 +0530 Subject: [PATCH 30/46] docs: improved text audit log stream --- docs/documentation/platform/audit-log-streams.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/documentation/platform/audit-log-streams.mdx b/docs/documentation/platform/audit-log-streams.mdx index 3cfd50fc8..24126ceaf 100644 --- a/docs/documentation/platform/audit-log-streams.mdx +++ b/docs/documentation/platform/audit-log-streams.mdx @@ -50,8 +50,8 @@ Your Audit Logs are now ready to be streamed. ![better stack connect](../../images/platform/audit-log-streams/betterstack-source-details.png) - 1. Copy the **Source token** field from Better Stack to the **Token** field. - 2. Copy the **endpoint** from Better Stack to the **Endpoint URL** field. + 1. Copy the **endpoint** from Better Stack to the **Endpoint URL** field. + 3. Create a new header with key **Authorization** and set the value as **Bearer **. @@ -70,6 +70,6 @@ Your Audit Logs are now ready to be streamed. 1. Add **https://http-intake.logs.datadoghq.com/api/v2/logs** to the **Endpoint URL** field. 2. Copy the **API Key** from previous step - 3. Create a new header with key **DD-API-KEY** and use the **API Key** as the value. + 3. Create a new header with key **DD-API-KEY** and set the value as **API Key**. From 49642480d34898be45ce2c6b87569c241b91dfa2 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 20:06:24 +0530 Subject: [PATCH 31/46] fix: resolved headers not working in queue --- backend/src/ee/services/audit-log/audit-log-queue.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index fa9a0a500..6c563b573 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -96,7 +96,7 @@ export const auditLogQueueServiceFactory = ({ const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; - if (headers.length) + if (streamHeaders.length) streamHeaders.forEach(({ key, value }) => { headers[key] = value; }); From c4cd6909bbfeb8ec01995e9667f4e8bc83e9be61 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 20:09:57 +0530 Subject: [PATCH 32/46] docs: improved datadog log stream doc --- .../platform/audit-log-streams.mdx | 17 ++++++++++++----- .../datadog-logging-endpoint.png | Bin 0 -> 75509 bytes .../datadog-source-details.png | Bin 37902 -> 38423 bytes 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 docs/images/platform/audit-log-streams/datadog-logging-endpoint.png diff --git a/docs/documentation/platform/audit-log-streams.mdx b/docs/documentation/platform/audit-log-streams.mdx index 24126ceaf..2a69780bc 100644 --- a/docs/documentation/platform/audit-log-streams.mdx +++ b/docs/documentation/platform/audit-log-streams.mdx @@ -47,28 +47,35 @@ Your Audit Logs are now ready to be streamed. ![better stack connect source](../../images/platform/audit-log-streams/betterstack-create-source.png) - + ![better stack connect](../../images/platform/audit-log-streams/betterstack-source-details.png) 1. Copy the **endpoint** from Better Stack to the **Endpoint URL** field. - 3. Create a new header with key **Authorization** and set the value as **Bearer **. + 3. Create a new header with key **Authorization** and set the value as **Bearer \**. ### Datadog - + ![api key create](../../images/platform/audit-log-streams/datadog-api-sidebar.png) - ![api new key](../../images/platform/audit-log-streams/data-create-api-key.png) ![api key form](../../images/platform/audit-log-streams/data-create-api-key.png) + ![api key form](../../images/platform/audit-log-streams/data-dog-api-key.png) + + ![datadog url](../../images/platform/audit-log-streams/datadog-logging-endpoint.png) + + 1. Navigate to the [Datadog Send Logs API documentation](https://docs.datadoghq.com/api/latest/logs/?code-lang=curl&site=us5#send-logs). + 2. Pick your Datadog account region. + 3. Obtain your Datadog logging endpoint URL. + ![datadog api key details](../../images/platform/audit-log-streams/datadog-source-details.png) - 1. Add **https://http-intake.logs.datadoghq.com/api/v2/logs** to the **Endpoint URL** field. + 1. Copy the **logging endpoint** from Datadog to the **Endpoint URL** field. 2. Copy the **API Key** from previous step 3. Create a new header with key **DD-API-KEY** and set the value as **API Key**. diff --git a/docs/images/platform/audit-log-streams/datadog-logging-endpoint.png b/docs/images/platform/audit-log-streams/datadog-logging-endpoint.png new file mode 100644 index 0000000000000000000000000000000000000000..7960b1145762de57d0924d3a7d2777961eb173ed GIT binary patch literal 75509 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Ðqbl|IV3XOoh8QUibXq&qm?n3V&8 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 My~4ZlH%5W~4;HvwGynhq literal 0 HcmV?d00001 diff --git a/docs/images/platform/audit-log-streams/datadog-source-details.png b/docs/images/platform/audit-log-streams/datadog-source-details.png index a4712288f70bed32a34abd837fcc79e7e390f87c..5ae25b0b3adaece7bbdc5d8d68562da9dbc5bbd6 100644 GIT binary patch delta 35458 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 Date: Fri, 3 May 2024 09:49:10 -0700 Subject: [PATCH 33/46] Update email in beginEmailSignupProcess --- backend/src/services/auth/auth-signup-service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/services/auth/auth-signup-service.ts b/backend/src/services/auth/auth-signup-service.ts index 3433a0a98..9475a3f56 100644 --- a/backend/src/services/auth/auth-signup-service.ts +++ b/backend/src/services/auth/auth-signup-service.ts @@ -82,7 +82,7 @@ export const authSignupServiceFactory = ({ await smtpService.sendMail({ template: SmtpTemplates.EmailVerification, subjectLine: "Infisical confirmation code", - recipients: [email], + recipients: [user.email as string], substitutions: { code: token } From 61ae0e2fc7064b3a2a057fe92a952cd973081392 Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Sat, 4 May 2024 14:42:22 +0800 Subject: [PATCH 34/46] feat: added secret expand option in secrets get API --- backend/src/lib/api-docs/constants.ts | 1 + backend/src/server/routes/v3/secret-router.ts | 6 ++ backend/src/services/secret/secret-service.ts | 71 ++++++++++++++++--- backend/src/services/secret/secret-types.ts | 1 + 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index 39728ba7b..efcb03bd3 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -272,6 +272,7 @@ export const SECRETS = { export const RAW_SECRETS = { LIST: { + expand: "Whether or not to expand secret references", recursive: "Whether or not to fetch all secrets from the specified base path, and all of its subdirectories. Note, the max depth is 20 deep.", workspaceId: "The ID of the project to list secrets from.", diff --git a/backend/src/server/routes/v3/secret-router.ts b/backend/src/server/routes/v3/secret-router.ts index 955aa01be..4f64176a6 100644 --- a/backend/src/server/routes/v3/secret-router.ts +++ b/backend/src/server/routes/v3/secret-router.ts @@ -166,6 +166,11 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { workspaceSlug: z.string().trim().optional().describe(RAW_SECRETS.LIST.workspaceSlug), environment: z.string().trim().optional().describe(RAW_SECRETS.LIST.environment), secretPath: z.string().trim().default("/").transform(removeTrailingSlash).describe(RAW_SECRETS.LIST.secretPath), + expand: z + .enum(["true", "false"]) + .default("false") + .transform((value) => value === "true") + .describe(RAW_SECRETS.LIST.expand), recursive: z .enum(["true", "false"]) .default("false") @@ -233,6 +238,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { actor: req.permission.type, actorOrgId: req.permission.orgId, environment, + expand: req.query.expand, actorAuthMethod: req.permission.authMethod, projectId: workspaceId, path: secretPath, diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index 5c7b9bef9..c61792a13 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -27,6 +27,7 @@ import { fnSecretBlindIndexCheck, fnSecretBulkInsert, fnSecretBulkUpdate, + interpolateSecrets, recursivelyGetSecretPaths } from "./secret-fns"; import { TSecretQueueFactory } from "./secret-queue"; @@ -885,6 +886,7 @@ export const secretServiceFactory = ({ actorAuthMethod, environment, includeImports, + expand, recursive }: TGetSecretsRawDTO) => { const botKey = await projectBotService.getBotKey(projectId); @@ -902,17 +904,66 @@ export const secretServiceFactory = ({ recursive }); - return { - secrets: secrets.map((el) => decryptSecretRaw(el, botKey)), - imports: (imports || [])?.map(({ secrets: importedSecrets, ...el }) => ({ - ...el, - secrets: importedSecrets.map((sec) => - decryptSecretRaw( - { ...sec, environment: el.environment, workspace: projectId, secretPath: el.secretPath }, - botKey - ) + const decryptedSecrets = secrets.map((el) => decryptSecretRaw(el, botKey)); + const decryptedImports = (imports || [])?.map(({ secrets: importedSecrets, ...el }) => ({ + ...el, + secrets: importedSecrets.map((sec) => + decryptSecretRaw( + { ...sec, environment: el.environment, workspace: projectId, secretPath: el.secretPath }, + botKey ) - })) + ) + })); + + if (expand) { + const expandSecrets = interpolateSecrets({ + folderDAL, + projectId, + secretDAL, + secretEncKey: botKey + }); + + const batchSecretsExpand = async ( + secretBatch: { + secretKey: string; + secretValue: string; + secretComment?: string; + }[] + ) => { + const secretRecord: Record< + string, + { + value: string; + comment?: string; + skipMultilineEncoding?: boolean; + } + > = {}; + + secretBatch.forEach((decryptedSecret) => { + secretRecord[decryptedSecret.secretKey] = { + value: decryptedSecret.secretValue, + comment: decryptedSecret.secretComment + }; + }); + + await expandSecrets(secretRecord); + + secretBatch.forEach((decryptedSecret, index) => { + // eslint-disable-next-line no-param-reassign + secretBatch[index].secretValue = secretRecord[decryptedSecret.secretKey].value; + }); + }; + + // expand secrets + await batchSecretsExpand(decryptedSecrets); + + // expand imports by batch + await Promise.all(decryptedImports.map((decryptedImport) => batchSecretsExpand(decryptedImport.secrets))); + } + + return { + secrets: decryptedSecrets, + imports: decryptedImports }; }; diff --git a/backend/src/services/secret/secret-types.ts b/backend/src/services/secret/secret-types.ts index c2a0d5cf6..3f872092e 100644 --- a/backend/src/services/secret/secret-types.ts +++ b/backend/src/services/secret/secret-types.ts @@ -138,6 +138,7 @@ export type TDeleteBulkSecretDTO = { } & TProjectPermission; export type TGetSecretsRawDTO = { + expand?: boolean; path: string; environment: string; includeImports?: boolean; From 1957531ac4f421f287b5f80008f25d5fc73dc5b1 Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 4 May 2024 21:01:19 -0400 Subject: [PATCH 35/46] Update docker-compose.mdx --- docs/self-hosting/deployment-options/docker-compose.mdx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/self-hosting/deployment-options/docker-compose.mdx b/docs/self-hosting/deployment-options/docker-compose.mdx index 5adfe6378..d61879255 100644 --- a/docs/self-hosting/deployment-options/docker-compose.mdx +++ b/docs/self-hosting/deployment-options/docker-compose.mdx @@ -2,8 +2,7 @@ title: "Docker Compose" description: "Read how to run Infisical with Docker Compose template." --- -Install Infisical using Docker compose. This self hosting method contains all of the required components needed -to run a functional instance of Infisical. +This self hosting guide will walk you though the steps to self host Infisical using Docker compose. ## Prerequisites - [Docker](https://docs.docker.com/engine/install/) @@ -80,4 +79,4 @@ docker-compose -f docker-compose.prod.yml up Your Infisical instance should now be running on port `80`. To access your instance, visit `http://localhost:80`. -![self host sign up](/images/self-hosting/applicable-to-all/selfhost-signup.png) \ No newline at end of file +![self host sign up](/images/self-hosting/applicable-to-all/selfhost-signup.png) From ab79342743a6f19383044d57679fbc3e293ee01c Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Sat, 4 May 2024 22:05:57 -0400 Subject: [PATCH 36/46] rename to expandSecretReferences --- backend/src/server/routes/v3/secret-router.ts | 4 ++-- backend/src/services/secret/secret-service.ts | 4 ++-- backend/src/services/secret/secret-types.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/backend/src/server/routes/v3/secret-router.ts b/backend/src/server/routes/v3/secret-router.ts index 4f64176a6..cae51f858 100644 --- a/backend/src/server/routes/v3/secret-router.ts +++ b/backend/src/server/routes/v3/secret-router.ts @@ -166,7 +166,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { workspaceSlug: z.string().trim().optional().describe(RAW_SECRETS.LIST.workspaceSlug), environment: z.string().trim().optional().describe(RAW_SECRETS.LIST.environment), secretPath: z.string().trim().default("/").transform(removeTrailingSlash).describe(RAW_SECRETS.LIST.secretPath), - expand: z + expandSecretReferences: z .enum(["true", "false"]) .default("false") .transform((value) => value === "true") @@ -238,7 +238,7 @@ export const registerSecretRouter = async (server: FastifyZodProvider) => { actor: req.permission.type, actorOrgId: req.permission.orgId, environment, - expand: req.query.expand, + expandSecretReferences: req.query.expandSecretReferences, actorAuthMethod: req.permission.authMethod, projectId: workspaceId, path: secretPath, diff --git a/backend/src/services/secret/secret-service.ts b/backend/src/services/secret/secret-service.ts index c61792a13..3f647d8a9 100644 --- a/backend/src/services/secret/secret-service.ts +++ b/backend/src/services/secret/secret-service.ts @@ -886,7 +886,7 @@ export const secretServiceFactory = ({ actorAuthMethod, environment, includeImports, - expand, + expandSecretReferences, recursive }: TGetSecretsRawDTO) => { const botKey = await projectBotService.getBotKey(projectId); @@ -915,7 +915,7 @@ export const secretServiceFactory = ({ ) })); - if (expand) { + if (expandSecretReferences) { const expandSecrets = interpolateSecrets({ folderDAL, projectId, diff --git a/backend/src/services/secret/secret-types.ts b/backend/src/services/secret/secret-types.ts index 3f872092e..df0af5b5d 100644 --- a/backend/src/services/secret/secret-types.ts +++ b/backend/src/services/secret/secret-types.ts @@ -138,7 +138,7 @@ export type TDeleteBulkSecretDTO = { } & TProjectPermission; export type TGetSecretsRawDTO = { - expand?: boolean; + expandSecretReferences?: boolean; path: string; environment: string; includeImports?: boolean; From 61a0997adccbfd407eb2cf12d9c300b8a135a0b2 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Mon, 6 May 2024 14:00:32 +0530 Subject: [PATCH 37/46] fix(ui): secret path input showing / for a valid value that comes delayed --- .../v2/SecretPathInput/SecretPathInput.tsx | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/frontend/src/components/v2/SecretPathInput/SecretPathInput.tsx b/frontend/src/components/v2/SecretPathInput/SecretPathInput.tsx index 1487cb302..ed97ad8dd 100644 --- a/frontend/src/components/v2/SecretPathInput/SecretPathInput.tsx +++ b/frontend/src/components/v2/SecretPathInput/SecretPathInput.tsx @@ -46,14 +46,6 @@ export const SecretPathInput = ({ setInputValue(propValue ?? "/"); }, [propValue]); - useEffect(() => { - if (environment) { - setInputValue("/"); - setSecretPath("/"); - onChange?.("/"); - } - }, [environment]); - useEffect(() => { // update secret path if input is valid if ( @@ -158,9 +150,8 @@ export const SecretPathInput = ({ key={`secret-reference-secret-${i + 1}`} >

From 4692aa12bd44c294b0f5bd9b7fd425718cb41b40 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Mon, 6 May 2024 14:01:30 +0530 Subject: [PATCH 38/46] feat: updated identity additional privilege permission object in api to have a proper body and explanation --- ...ity-project-additional-privilege-router.ts | 43 ++++------ ...ty-project-additional-privilege-service.ts | 79 ++++++++++++++++--- backend/src/lib/api-docs/constants.ts | 31 ++++++-- backend/src/server/routes/sanitizedSchemas.ts | 22 ++++++ frontend/package-lock.json | 13 +-- .../queries.tsx | 20 ++--- frontend/src/hooks/api/roles/types.ts | 2 +- .../SpecificPrivilegeSection.tsx | 4 +- 8 files changed, 146 insertions(+), 68 deletions(-) diff --git a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts index a1a2e36fa..0fecc9d2e 100644 --- a/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts +++ b/backend/src/ee/routes/v1/identity-project-additional-privilege-router.ts @@ -1,16 +1,14 @@ -import { MongoAbility, RawRuleOf } from "@casl/ability"; -import { PackRule, packRules, unpackRules } from "@casl/ability/extra"; +import { packRules } from "@casl/ability/extra"; import slugify from "@sindresorhus/slugify"; import ms from "ms"; import { z } from "zod"; -import { IdentityProjectAdditionalPrivilegeSchema } from "@app/db/schemas"; import { IdentityProjectAdditionalPrivilegeTemporaryMode } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-types"; -import { ProjectPermissionSet } from "@app/ee/services/permission/project-permission"; import { IDENTITY_ADDITIONAL_PRIVILEGE } from "@app/lib/api-docs"; import { alphaNumericNanoId } from "@app/lib/nanoid"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; +import { PermissionSchema, SanitizedIdentityPrivilegeSchema } from "@app/server/routes/sanitizedSchemas"; import { AuthMode } from "@app/services/auth/auth-type"; export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: FastifyZodProvider) => { @@ -41,11 +39,11 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }) .optional() .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), - permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions) + permissions: PermissionSchema.array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions) }), response: { 200: z.object({ - privilege: IdentityProjectAdditionalPrivilegeSchema + privilege: SanitizedIdentityPrivilegeSchema }) } }, @@ -92,7 +90,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }) .optional() .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.slug), - permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), + permissions: PermissionSchema.array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.permissions), temporaryMode: z .nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode) .describe(IDENTITY_ADDITIONAL_PRIVILEGE.CREATE.temporaryMode), @@ -107,7 +105,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }), response: { 200: z.object({ - privilege: IdentityProjectAdditionalPrivilegeSchema + privilege: SanitizedIdentityPrivilegeSchema }) } }, @@ -157,7 +155,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F message: "Slug must be a valid slug" }) .describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.newSlug), - permissions: z.any().array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.permissions), + permissions: PermissionSchema.array().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.permissions), isTemporary: z.boolean().describe(IDENTITY_ADDITIONAL_PRIVILEGE.UPDATE.isTemporary), temporaryMode: z .nativeEnum(IdentityProjectAdditionalPrivilegeTemporaryMode) @@ -175,7 +173,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }), response: { 200: z.object({ - privilege: IdentityProjectAdditionalPrivilegeSchema + privilege: SanitizedIdentityPrivilegeSchema }) } }, @@ -219,7 +217,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }), response: { 200: z.object({ - privilege: IdentityProjectAdditionalPrivilegeSchema + privilege: SanitizedIdentityPrivilegeSchema }) } }, @@ -260,7 +258,7 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F }), response: { 200: z.object({ - privilege: IdentityProjectAdditionalPrivilegeSchema + privilege: SanitizedIdentityPrivilegeSchema }) } }, @@ -293,16 +291,11 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F ], querystring: z.object({ identityId: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.identityId), - projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.projectSlug), - unpacked: z - .enum(["false", "true"]) - .transform((el) => el === "true") - .default("true") - .describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.unpacked) + projectSlug: z.string().min(1).describe(IDENTITY_ADDITIONAL_PRIVILEGE.LIST.projectSlug) }), response: { 200: z.object({ - privileges: IdentityProjectAdditionalPrivilegeSchema.array() + privileges: SanitizedIdentityPrivilegeSchema.array() }) } }, @@ -315,15 +308,9 @@ export const registerIdentityProjectAdditionalPrivilegeRouter = async (server: F actorOrgId: req.permission.orgId, ...req.query }); - if (req.query.unpacked) { - return { - privileges: privileges.map(({ permissions, ...el }) => ({ - ...el, - permissions: unpackRules(permissions as PackRule>>[]) - })) - }; - } - return { privileges }; + return { + privileges + }; } }); }; diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts index 81dc11a00..e4c2c690d 100644 --- a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts @@ -1,5 +1,7 @@ -import { ForbiddenError } from "@casl/ability"; +import { ForbiddenError, MongoAbility, RawRuleOf } from "@casl/ability"; +import { PackRule, unpackRules } from "@casl/ability/extra"; import ms from "ms"; +import { z } from "zod"; import { isAtLeastAsPrivileged } from "@app/lib/casl"; import { BadRequestError, ForbiddenRequestError } from "@app/lib/errors"; @@ -8,7 +10,7 @@ import { TIdentityProjectDALFactory } from "@app/services/identity-project/ident import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TPermissionServiceFactory } from "../permission/permission-service"; -import { ProjectPermissionActions, ProjectPermissionSub } from "../permission/project-permission"; +import { ProjectPermissionActions, ProjectPermissionSet, ProjectPermissionSub } from "../permission/project-permission"; import { TIdentityProjectAdditionalPrivilegeDALFactory } from "./identity-project-additional-privilege-dal"; import { IdentityProjectAdditionalPrivilegeTemporaryMode, @@ -30,6 +32,22 @@ export type TIdentityProjectAdditionalPrivilegeServiceFactory = ReturnType< typeof identityProjectAdditionalPrivilegeServiceFactory >; +// TODO(akhilmhdh): move this to more centralized +export const UnpackedPermissionSchema = z.object({ + subject: z.union([z.string().min(1), z.string().array()]).optional(), + action: z.union([z.string().min(1), z.string().array()]), + conditions: z + .object({ + environment: z.string().optional(), + secretPath: z + .object({ + $glob: z.string().min(1) + }) + .optional() + }) + .optional() +}); + export const identityProjectAdditionalPrivilegeServiceFactory = ({ identityProjectAdditionalPrivilegeDAL, identityProjectDAL, @@ -86,7 +104,14 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ slug, permissions: customPermission }); - return additionalPrivilege; + return { + ...additionalPrivilege, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules( + (additionalPrivilege.permissions || []) as PackRule>>[] + ) + ) + }; } const relativeTempAllocatedTimeInMs = ms(dto.temporaryRange); @@ -100,7 +125,14 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ temporaryAccessStartTime: new Date(dto.temporaryAccessStartTime), temporaryAccessEndTime: new Date(new Date(dto.temporaryAccessStartTime).getTime() + relativeTempAllocatedTimeInMs) }); - return additionalPrivilege; + return { + ...additionalPrivilege, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules( + (additionalPrivilege.permissions || []) as PackRule>>[] + ) + ) + }; }; const updateBySlug = async ({ @@ -163,7 +195,14 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ temporaryAccessStartTime: new Date(temporaryAccessStartTime || ""), temporaryAccessEndTime: new Date(new Date(temporaryAccessStartTime || "").getTime() + ms(temporaryRange || "")) }); - return additionalPrivilege; + return { + ...additionalPrivilege, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules( + (additionalPrivilege.permissions || []) as PackRule>>[] + ) + ) + }; } const additionalPrivilege = await identityProjectAdditionalPrivilegeDAL.updateById(identityPrivilege.id, { @@ -174,7 +213,14 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ temporaryRange: null, temporaryMode: null }); - return additionalPrivilege; + return { + ...additionalPrivilege, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules( + (additionalPrivilege.permissions || []) as PackRule>>[] + ) + ) + }; }; const deleteBySlug = async ({ @@ -220,7 +266,12 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); const deletedPrivilege = await identityProjectAdditionalPrivilegeDAL.deleteById(identityPrivilege.id); - return deletedPrivilege; + return { + ...deletedPrivilege, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules((deletedPrivilege.permissions || []) as PackRule>>[]) + ) + }; }; const getPrivilegeDetailsBySlug = async ({ @@ -254,7 +305,12 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ }); if (!identityPrivilege) throw new BadRequestError({ message: "Identity additional privilege not found" }); - return identityPrivilege; + return { + ...identityPrivilege, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules((identityPrivilege.permissions || []) as PackRule>>[]) + ) + }; }; const listIdentityProjectPrivileges = async ({ @@ -284,7 +340,12 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ const identityPrivileges = await identityProjectAdditionalPrivilegeDAL.find({ projectMembershipId: identityProjectMembership.id }); - return identityPrivileges; + return identityPrivileges.map((el) => ({ + ...el, + permissions: UnpackedPermissionSchema.array().parse( + unpackRules((el.permissions || []) as PackRule>>[]) + ) + })); }; return { diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index efcb03bd3..10006b9ef 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -468,9 +468,18 @@ export const IDENTITY_ADDITIONAL_PRIVILEGE = { identityId: "The ID of the identity to delete.", slug: "The slug of the privilege to create.", permissions: `The permission object for the privilege. -1. [["read", "secrets", {environment: "dev", secretPath: {$glob: "/"}}]] -2. [["read", "secrets", {environment: "dev"}], ["create", "secrets", {environment: "dev"}]] -2. [["read", "secrets", {environment: "dev"}]] +- Read secrets +\`\`\` +{ "permissions": [{"action": "read", "subject": "secrets"]} +\`\`\` +- Read and Write secrets +\`\`\` +{ "permissions": [{"action": "read", "subject": "secrets"], {"action": "write", "subject": "secrets"]} +\`\`\` +- Read secrets scoped to an environment and secret path +\`\`\` +- { "permissions": [{"action": "read", "subject": "secrets", "conditions": { "environment": "dev", "secretPath": { "$glob": "/" } }}] } +\`\`\` `, isPackPermission: "Whether the server should pack(compact) the permission object.", isTemporary: "Whether the privilege is temporary.", @@ -484,11 +493,19 @@ export const IDENTITY_ADDITIONAL_PRIVILEGE = { slug: "The slug of the privilege to update.", newSlug: "The new slug of the privilege to update.", permissions: `The permission object for the privilege. -1. [["read", "secrets", {environment: "dev", secretPath: {$glob: "/"}}]] -2. [["read", "secrets", {environment: "dev"}], ["create", "secrets", {environment: "dev"}]] -2. [["read", "secrets", {environment: "dev"}]] +- Read secrets +\`\`\` +{ "permissions": [{"action": "read", "subject": "secrets"]} +\`\`\` +- Read and Write secrets +\`\`\` +{ "permissions": [{"action": "read", "subject": "secrets"], {"action": "write", "subject": "secrets"]} +\`\`\` +- Read secrets scoped to an environment and secret path +\`\`\` +- { "permissions": [{"action": "read", "subject": "secrets", "conditions": { "environment": "dev", "secretPath": { "$glob": "/" } }}] } +\`\`\` `, - isPackPermission: "Whether the server should pack(compact) the permission object.", isTemporary: "Whether the privilege is temporary.", temporaryMode: "Type of temporary access given. Types: relative", temporaryRange: "TTL for the temporay time. Eg: 1m, 1h, 1d", diff --git a/backend/src/server/routes/sanitizedSchemas.ts b/backend/src/server/routes/sanitizedSchemas.ts index a0b792789..04f0a1166 100644 --- a/backend/src/server/routes/sanitizedSchemas.ts +++ b/backend/src/server/routes/sanitizedSchemas.ts @@ -2,10 +2,12 @@ import { z } from "zod"; import { DynamicSecretsSchema, + IdentityProjectAdditionalPrivilegeSchema, IntegrationAuthsSchema, SecretApprovalPoliciesSchema, UsersSchema } from "@app/db/schemas"; +import { UnpackedPermissionSchema } from "@app/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service"; // sometimes the return data must be santizied to avoid leaking important values // always prefer pick over omit in zod @@ -62,6 +64,26 @@ export const secretRawSchema = z.object({ secretComment: z.string().optional() }); +export const PermissionSchema = z.object({ + action: z.string().min(1).describe("Describe what user can actually do. Ex: create, edit, delete, read"), + subject: z.string().min(1).describe("The entity to check action on. Ex: secrets, environments"), + conditions: z + .object({ + environment: z.string().describe("To scope the permission to an environment.").optional(), + secretPath: z + .object({ + $glob: z.string().min(1).describe("To scope the permission to a secret path. Supports glob patterns.") + }) + .optional() + }) + .describe("Criteria which restricts user action only to matched subjects") + .optional() +}); + +export const SanitizedIdentityPrivilegeSchema = IdentityProjectAdditionalPrivilegeSchema.extend({ + permissions: UnpackedPermissionSchema.array() +}); + export const SanitizedDynamicSecretSchema = DynamicSecretsSchema.omit({ inputIV: true, inputTag: true, diff --git a/frontend/package-lock.json b/frontend/package-lock.json index e7c587f13..c33c9dc36 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -4,6 +4,7 @@ "requires": true, "packages": { "": { + "name": "frontend", "dependencies": { "@casl/ability": "^6.5.0", "@casl/react": "^3.1.0", @@ -12165,9 +12166,9 @@ "dev": true }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -22439,9 +22440,9 @@ } }, "node_modules/tar": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", - "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, "dependencies": { "chownr": "^2.0.0", diff --git a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx index 72534c158..e4bd141fb 100644 --- a/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx +++ b/frontend/src/hooks/api/identityProjectAdditionalPrivilege/queries.tsx @@ -1,9 +1,7 @@ -import { PackRule, unpackRules } from "@casl/ability/extra"; import { useQuery } from "@tanstack/react-query"; import { apiRequest } from "@app/config/request"; -import { TProjectPermission } from "../roles/types"; import { TGetIdentityProejctPrivilegeDetails as TGetIdentityProjectPrivilegeDetails, TIdentityProjectPrivilege, @@ -36,17 +34,14 @@ export const useGetIdentityProjectPrivilegeDetails = ({ const { data: { privilege } } = await apiRequest.get<{ - privilege: Omit & { permissions: unknown }; + privilege: TIdentityProjectPrivilege; }>(`/api/v1/additional-privilege/identity/${privilegeSlug}`, { params: { identityId, projectSlug } }); - return { - ...privilege, - permissions: unpackRules(privilege.permissions as PackRule[]) - }; + return privilege; } }); }; @@ -62,16 +57,11 @@ export const useListIdentityProjectPrivileges = ({ const { data: { privileges } } = await apiRequest.get<{ - privileges: Array< - Omit & { permissions: unknown } - >; + privileges: Array; }>("/api/v1/additional-privilege/identity", { - params: { identityId, projectSlug, unpacked: false } + params: { identityId, projectSlug } }); - return privileges.map((el) => ({ - ...el, - permissions: unpackRules(el.permissions as PackRule[]) - })); + return privileges; } }); }; diff --git a/frontend/src/hooks/api/roles/types.ts b/frontend/src/hooks/api/roles/types.ts index 5f205e585..97a90b421 100644 --- a/frontend/src/hooks/api/roles/types.ts +++ b/frontend/src/hooks/api/roles/types.ts @@ -41,7 +41,7 @@ export type TPermission = { export type TProjectPermission = { conditions?: Record; action: string; - subject: [string]; + subject: string | string[]; }; export type TGetUserOrgPermissionsDTO = { diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx index 56248145b..44feb73d9 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx @@ -142,7 +142,7 @@ const SpecificPrivilegeSecretForm = ({ .filter(({ allowed }) => allowed) .map(({ action }) => ({ action, - subject: [ProjectPermissionSub.Secrets], + subject: ProjectPermissionSub.Secrets, conditions })) }, @@ -477,7 +477,7 @@ export const SpecificPrivilegeSection = ({ identityId }: Props) => { permissions: [ { action: ProjectPermissionActions.Read, - subject: [ProjectPermissionSub.Secrets], + subject: ProjectPermissionSub.Secrets, conditions: { environment: currentWorkspace?.environments?.[0].slug } From 86fd4d5fba3ad02acdd701a538dec04874f83e5f Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Mon, 6 May 2024 14:26:46 +0530 Subject: [PATCH 39/46] feat: added a fixed sorted order to avoid jumps --- .../components/IdentityRoleForm/SpecificPrivilegeSection.tsx | 1 + .../MemberListTab/MemberRoleForm/SpecificPrivilegeSection.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx index 44feb73d9..6c1d4654d 100644 --- a/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx +++ b/frontend/src/views/Project/MembersPage/components/IdentityTab/components/IdentityRoleForm/SpecificPrivilegeSection.tsx @@ -512,6 +512,7 @@ export const SpecificPrivilegeSection = ({ identityId }: Props) => { ?.filter(({ permissions }) => permissions?.[0]?.subject?.includes(ProjectPermissionSub.Secrets) ) + .sort((a, b) => a.id.localeCompare(b.id)) ?.map((privilege) => ( { ?.filter(({ permissions }) => permissions?.[0]?.subject?.includes(ProjectPermissionSub.Secrets) ) + .sort((a, b) => a.id.localeCompare(b.id)) ?.map((privilege) => ( Date: Mon, 6 May 2024 20:43:23 +0530 Subject: [PATCH 40/46] feat: debounced main page search and rolled back to old input component --- frontend/src/lib/fn/debounce.ts | 15 +++++++++++ .../pages/project/[id]/secrets/v2/[env].tsx | 27 ------------------- .../components/ActionBar/ActionBar.tsx | 12 +++++++-- .../components/SecretListView/SecretItem.tsx | 10 +++---- 4 files changed, 28 insertions(+), 36 deletions(-) create mode 100644 frontend/src/lib/fn/debounce.ts delete mode 100644 frontend/src/pages/project/[id]/secrets/v2/[env].tsx diff --git a/frontend/src/lib/fn/debounce.ts b/frontend/src/lib/fn/debounce.ts new file mode 100644 index 000000000..16d7b4ceb --- /dev/null +++ b/frontend/src/lib/fn/debounce.ts @@ -0,0 +1,15 @@ +export const debounce = any>( + func: F, + delay: number +): ((...args: Parameters) => void) => { + let timeoutId: ReturnType | null; + return function debounced(...args: Parameters) { + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(() => { + func(...args); + timeoutId = null; + }, delay); + }; +}; diff --git a/frontend/src/pages/project/[id]/secrets/v2/[env].tsx b/frontend/src/pages/project/[id]/secrets/v2/[env].tsx deleted file mode 100644 index bba0704dd..000000000 --- a/frontend/src/pages/project/[id]/secrets/v2/[env].tsx +++ /dev/null @@ -1,27 +0,0 @@ -import { useTranslation } from "react-i18next"; -import Head from "next/head"; - -import { SecretMainPage } from "@app/views/SecretMainPage"; - -const Dashboard = () => { - const { t } = useTranslation(); - - return ( - <> - - {t("common.head-title", { title: t("dashboard.title") })} - - - - - -
- -
- - ); -}; - -export default Dashboard; - -Dashboard.requireAuth = true; diff --git a/frontend/src/views/SecretMainPage/components/ActionBar/ActionBar.tsx b/frontend/src/views/SecretMainPage/components/ActionBar/ActionBar.tsx index f670ea496..61c7cf8c0 100644 --- a/frontend/src/views/SecretMainPage/components/ActionBar/ActionBar.tsx +++ b/frontend/src/views/SecretMainPage/components/ActionBar/ActionBar.tsx @@ -1,3 +1,4 @@ +import { useState } from "react"; import { subject } from "@casl/ability"; import { faAngleDown, @@ -45,6 +46,7 @@ import { ProjectPermissionActions, ProjectPermissionSub, useSubscription } from import { usePopUp } from "@app/hooks"; import { useCreateFolder, useDeleteSecretBatch } from "@app/hooks/api"; import { DecryptedSecret, TImportedSecrets, WsTag } from "@app/hooks/api/types"; +import { debounce } from "@app/lib/fn/debounce"; import { PopUpNames, @@ -106,6 +108,7 @@ export const ActionBar = ({ ] as const); const { subscription } = useSubscription(); const { openPopUp } = usePopUpAction(); + const [search, setSearch] = useState(filter.searchFilter); const { mutateAsync: createFolder } = useCreateFolder(); const { mutateAsync: deleteBatchSecretV3 } = useDeleteSecretBatch(); @@ -114,6 +117,8 @@ export const ActionBar = ({ const { reset: resetSelectedSecret } = useSelectedSecretActions(); const isMultiSelectActive = Boolean(Object.keys(selectedSecrets).length); + const debouncedOnSearch = debounce(onSearchChange, 500); + const handleFolderCreate = async (folderName: string) => { try { await createFolder({ @@ -199,8 +204,11 @@ export const ActionBar = ({ className="bg-mineshaft-800 placeholder-mineshaft-50 duration-200 focus:bg-mineshaft-700/80" placeholder="Search by folder name, key name, comment..." leftIcon={} - value={filter.searchFilter} - onChange={(evt) => onSearchChange(evt.target.value)} + value={search} + onChange={(evt) => { + setSearch(evt.target.value); + debouncedOnSearch(evt.target.value); + }} />
diff --git a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx index 455b7bbe6..7996d932c 100644 --- a/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx +++ b/frontend/src/views/SecretMainPage/components/SecretListView/SecretItem.tsx @@ -14,6 +14,7 @@ import { Popover, PopoverContent, PopoverTrigger, + SecretInput, Spinner, TextArea, Tooltip @@ -48,7 +49,6 @@ import { memo, useEffect } from "react"; import { Controller, useFieldArray, useForm } from "react-hook-form"; import { twMerge } from "tailwind-merge"; -import { InfisicalSecretInput } from "@app/components/v2/InfisicalSecretInput"; import { CreateReminderForm } from "./CreateReminderForm"; import { formSchema, SecretActionType, TFormSchema } from "./SecretListView.utils"; @@ -263,12 +263,10 @@ export const SecretItem = memo( key="value-overriden" control={control} render={({ field }) => ( - @@ -280,12 +278,10 @@ export const SecretItem = memo( key="secret-value" control={control} render={({ field }) => ( - From b3579cb2719e79ed252b85ea8b40a9f38cc60d3e Mon Sep 17 00:00:00 2001 From: Maidul Islam Date: Mon, 6 May 2024 13:44:39 -0400 Subject: [PATCH 41/46] rephrase text for permission schema zod --- backend/src/server/routes/sanitizedSchemas.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/backend/src/server/routes/sanitizedSchemas.ts b/backend/src/server/routes/sanitizedSchemas.ts index 04f0a1166..14155ecf9 100644 --- a/backend/src/server/routes/sanitizedSchemas.ts +++ b/backend/src/server/routes/sanitizedSchemas.ts @@ -65,18 +65,27 @@ export const secretRawSchema = z.object({ }); export const PermissionSchema = z.object({ - action: z.string().min(1).describe("Describe what user can actually do. Ex: create, edit, delete, read"), - subject: z.string().min(1).describe("The entity to check action on. Ex: secrets, environments"), + action: z + .string() + .min(1) + .describe("Describe what action an entity can take. Possible actions: create, edit, delete, and read"), + subject: z + .string() + .min(1) + .describe("The entity this permission pertains to. Possible options: secrets, environments"), conditions: z .object({ - environment: z.string().describe("To scope the permission to an environment.").optional(), + environment: z.string().describe("The environment slug this permission should allow.").optional(), secretPath: z .object({ - $glob: z.string().min(1).describe("To scope the permission to a secret path. Supports glob patterns.") + $glob: z + .string() + .min(1) + .describe("The secret path this permission should allow. Can be a glob pattern such as /folder-name/*/** ") }) .optional() }) - .describe("Criteria which restricts user action only to matched subjects") + .describe("When specified, only matching conditions will be allowed to access given resource.") .optional() }); From d198ba1a794814d566cdfb107c495bb842049d4c Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Mon, 6 May 2024 23:27:24 +0530 Subject: [PATCH 42/46] feat: refactored the map unpack to a function --- ...ty-project-additional-privilege-service.ts | 45 +++++++------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts index e4c2c690d..70753ee09 100644 --- a/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts +++ b/backend/src/ee/services/identity-project-additional-privilege/identity-project-additional-privilege-service.ts @@ -48,6 +48,11 @@ export const UnpackedPermissionSchema = z.object({ .optional() }); +const unpackPermissions = (permissions: unknown) => + UnpackedPermissionSchema.array().parse( + unpackRules((permissions || []) as PackRule>>[]) + ); + export const identityProjectAdditionalPrivilegeServiceFactory = ({ identityProjectAdditionalPrivilegeDAL, identityProjectDAL, @@ -106,11 +111,7 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ }); return { ...additionalPrivilege, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules( - (additionalPrivilege.permissions || []) as PackRule>>[] - ) - ) + permissions: unpackPermissions(additionalPrivilege.permissions) }; } @@ -127,11 +128,7 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ }); return { ...additionalPrivilege, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules( - (additionalPrivilege.permissions || []) as PackRule>>[] - ) - ) + permissions: unpackPermissions(additionalPrivilege.permissions) }; }; @@ -197,11 +194,8 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ }); return { ...additionalPrivilege, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules( - (additionalPrivilege.permissions || []) as PackRule>>[] - ) - ) + + permissions: unpackPermissions(additionalPrivilege.permissions) }; } @@ -215,11 +209,8 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ }); return { ...additionalPrivilege, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules( - (additionalPrivilege.permissions || []) as PackRule>>[] - ) - ) + + permissions: unpackPermissions(additionalPrivilege.permissions) }; }; @@ -268,9 +259,8 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ const deletedPrivilege = await identityProjectAdditionalPrivilegeDAL.deleteById(identityPrivilege.id); return { ...deletedPrivilege, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules((deletedPrivilege.permissions || []) as PackRule>>[]) - ) + + permissions: unpackPermissions(deletedPrivilege.permissions) }; }; @@ -307,9 +297,7 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ return { ...identityPrivilege, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules((identityPrivilege.permissions || []) as PackRule>>[]) - ) + permissions: unpackPermissions(identityPrivilege.permissions) }; }; @@ -342,9 +330,8 @@ export const identityProjectAdditionalPrivilegeServiceFactory = ({ }); return identityPrivileges.map((el) => ({ ...el, - permissions: UnpackedPermissionSchema.array().parse( - unpackRules((el.permissions || []) as PackRule>>[]) - ) + + permissions: unpackPermissions(el.permissions) })); }; From 3b88a2759b97bb1e7dcd69bef3771b40266e3046 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 6 May 2024 18:27:36 -0700 Subject: [PATCH 43/46] Patch unsynchronized username/email for saml/scim --- ...0240506163405_trusted-saml-ldap-emails.ts} | 0 backend/src/ee/routes/v1/ldap-router.ts | 4 +- backend/src/ee/routes/v1/saml-router.ts | 2 +- backend/src/ee/routes/v1/scim-router.ts | 2 +- backend/src/ee/services/group/group-fns.ts | 6 +- .../ldap-config/ldap-config-service.ts | 84 +++++++++---- .../services/ldap-config/ldap-config-types.ts | 2 +- .../saml-config/saml-config-service.ts | 75 ++++++++---- .../services/saml-config/saml-config-types.ts | 2 +- backend/src/ee/services/scim/scim-service.ts | 114 ++++++++++++------ backend/src/ee/services/scim/scim-types.ts | 4 +- backend/src/server/routes/index.ts | 1 + .../src/services/auth/auth-signup-service.ts | 8 +- backend/src/services/org/org-dal.ts | 8 +- backend/src/services/org/org-service.ts | 14 ++- .../project-membership-service.ts | 10 +- backend/src/services/project/project-queue.ts | 6 +- backend/src/services/user/user-service.ts | 15 ++- docs/documentation/platform/ldap/general.mdx | 4 + .../documentation/platform/ldap/jumpcloud.mdx | 4 + docs/documentation/platform/ldap/overview.mdx | 21 +++- docs/documentation/platform/sso/okta.mdx | 39 +++--- docs/documentation/platform/sso/overview.mdx | 27 ++++- frontend/src/views/Signup/SignupSSO.tsx | 8 -- 24 files changed, 322 insertions(+), 138 deletions(-) rename backend/src/db/migrations/{20240429185709_trusted-saml-ldap-emails.ts => 20240506163405_trusted-saml-ldap-emails.ts} (100%) diff --git a/backend/src/db/migrations/20240429185709_trusted-saml-ldap-emails.ts b/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts similarity index 100% rename from backend/src/db/migrations/20240429185709_trusted-saml-ldap-emails.ts rename to backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts diff --git a/backend/src/ee/routes/v1/ldap-router.ts b/backend/src/ee/routes/v1/ldap-router.ts index 6730e9101..e146668c2 100644 --- a/backend/src/ee/routes/v1/ldap-router.ts +++ b/backend/src/ee/routes/v1/ldap-router.ts @@ -18,6 +18,7 @@ import { LdapConfigsSchema, LdapGroupMapsSchema } from "@app/db/schemas"; import { TLDAPConfig } from "@app/ee/services/ldap-config/ldap-config-types"; import { isValidLdapFilter, searchGroups } from "@app/ee/services/ldap-config/ldap-fns"; import { getConfig } from "@app/lib/config/env"; +import { BadRequestError } from "@app/lib/errors"; import { logger } from "@app/lib/logger"; import { readLimit, writeLimit } from "@app/server/config/rateLimiter"; import { verifyAuth } from "@app/server/plugins/auth/verify-auth"; @@ -52,6 +53,7 @@ export const registerLdapRouter = async (server: FastifyZodProvider) => { // eslint-disable-next-line async (req: IncomingMessage, user, cb) => { try { + if (!user.email) throw new BadRequestError({ message: "Invalid request. Missing email." }); const ldapConfig = (req as unknown as FastifyRequest).ldapConfig as TLDAPConfig; let groups: { dn: string; cn: string }[] | undefined; @@ -74,7 +76,7 @@ export const registerLdapRouter = async (server: FastifyZodProvider) => { username: user.uid, firstName: user.givenName ?? user.cn ?? "", lastName: user.sn ?? "", - emails: user.mail ? [user.mail] : [], + email: user.mail, groups, relayState: ((req as unknown as FastifyRequest).body as { RelayState?: string }).RelayState, orgId: (req as unknown as FastifyRequest).ldapConfig.organization diff --git a/backend/src/ee/routes/v1/saml-router.ts b/backend/src/ee/routes/v1/saml-router.ts index 81543c85e..6001b8b6e 100644 --- a/backend/src/ee/routes/v1/saml-router.ts +++ b/backend/src/ee/routes/v1/saml-router.ts @@ -102,7 +102,7 @@ export const registerSamlRouter = async (server: FastifyZodProvider) => { if (!profile) throw new BadRequestError({ message: "Missing profile" }); const email = profile?.email ?? (profile?.emailAddress as string); // emailRippling is added because in Rippling the field `email` reserved - if (!profile.email || !profile.firstName) { + if (!email || !profile.firstName) { throw new BadRequestError({ message: "Invalid request. Missing email or first name" }); } diff --git a/backend/src/ee/routes/v1/scim-router.ts b/backend/src/ee/routes/v1/scim-router.ts index 7283b8fe1..8965c28f3 100644 --- a/backend/src/ee/routes/v1/scim-router.ts +++ b/backend/src/ee/routes/v1/scim-router.ts @@ -249,7 +249,7 @@ export const registerScimRouter = async (server: FastifyZodProvider) => { const primaryEmail = req.body.emails?.find((email) => email.primary)?.value; const user = await req.server.services.scim.createScimUser({ - username: req.body.userName, + externalId: req.body.userName, email: primaryEmail, firstName: req.body.name.givenName, lastName: req.body.name.familyName, diff --git a/backend/src/ee/services/group/group-fns.ts b/backend/src/ee/services/group/group-fns.ts index e308891f9..4f96ddbf0 100644 --- a/backend/src/ee/services/group/group-fns.ts +++ b/backend/src/ee/services/group/group-fns.ts @@ -1,6 +1,6 @@ import { Knex } from "knex"; -import { SecretKeyEncoding, TUsers } from "@app/db/schemas"; +import { SecretKeyEncoding, TableName, TUsers } from "@app/db/schemas"; import { decryptAsymmetric, encryptAsymmetric, infisicalSymmetricDecrypt } from "@app/lib/crypto/encryption"; import { BadRequestError, ScimRequestError } from "@app/lib/errors"; @@ -188,9 +188,9 @@ export const addUsersToGroupByUserIds = async ({ // check if all user(s) are part of the organization const existingUserOrgMemberships = await orgDAL.findMembership( { - orgId: group.orgId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: group.orgId, $in: { - userId: userIds + [`${TableName.OrgMembership}.userId` as "userId"]: userIds } }, { tx } diff --git a/backend/src/ee/services/ldap-config/ldap-config-service.ts b/backend/src/ee/services/ldap-config/ldap-config-service.ts index d799b1754..6773c9486 100644 --- a/backend/src/ee/services/ldap-config/ldap-config-service.ts +++ b/backend/src/ee/services/ldap-config/ldap-config-service.ts @@ -6,7 +6,8 @@ import { OrgMembershipStatus, SecretKeyEncoding, TableName, - TLdapConfigsUpdate + TLdapConfigsUpdate, + TUsers } from "@app/db/schemas"; import { TGroupDALFactory } from "@app/ee/services/group/group-dal"; import { addUsersToGroupByUserIds, removeUsersFromGroupByUserIds } from "@app/ee/services/group/group-fns"; @@ -25,6 +26,7 @@ import { AuthMethod, AuthTokenType } from "@app/services/auth/auth-type"; import { TGroupProjectDALFactory } from "@app/services/group-project/group-project-dal"; import { TOrgBotDALFactory } from "@app/services/org/org-bot-dal"; import { TOrgDALFactory } from "@app/services/org/org-dal"; +import { TOrgMembershipDALFactory } from "@app/services/org-membership/org-membership-dal"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TProjectBotDALFactory } from "@app/services/project-bot/project-bot-dal"; import { TProjectKeyDALFactory } from "@app/services/project-key/project-key-dal"; @@ -54,6 +56,7 @@ import { TLdapGroupMapDALFactory } from "./ldap-group-map-dal"; type TLdapConfigServiceFactoryDep = { ldapConfigDAL: Pick; ldapGroupMapDAL: Pick; + orgMembershipDAL: Pick; orgDAL: Pick< TOrgDALFactory, "createMembership" | "updateMembershipById" | "findMembership" | "findOrgById" | "findOne" | "updateById" @@ -83,6 +86,7 @@ export const ldapConfigServiceFactory = ({ ldapConfigDAL, ldapGroupMapDAL, orgDAL, + orgMembershipDAL, orgBotDAL, groupDAL, groupProjectDAL, @@ -387,7 +391,7 @@ export const ldapConfigServiceFactory = ({ username, firstName, lastName, - emails, + email, groups, orgId, relayState @@ -407,7 +411,7 @@ export const ldapConfigServiceFactory = ({ await userDAL.transaction(async (tx) => { const [orgMembership] = await orgDAL.findMembership( { - userId: userAlias.userId, + [`${TableName.OrgMembership}.userId` as "userId"]: userAlias.userId, [`${TableName.OrgMembership}.orgId` as "id"]: orgId }, { tx } @@ -434,41 +438,75 @@ export const ldapConfigServiceFactory = ({ }); } else { userAlias = await userDAL.transaction(async (tx) => { - const uniqueUsername = await normalizeUsername(username, userDAL); - const newUser = await userDAL.create( - { - username: uniqueUsername, - email: emails[0], - isEmailVerified: serverCfg.trustLdapEmails, - firstName, - lastName, - authMethods: [], - isGhost: false - }, - tx - ); + let newUser: TUsers | undefined; + if (serverCfg.trustSamlEmails) { + newUser = await userDAL.findOne( + { + email, + isEmailVerified: true + }, + tx + ); + } + + if (!newUser) { + const uniqueUsername = await normalizeUsername(username, userDAL); + newUser = await userDAL.create( + { + username: serverCfg.trustLdapEmails ? email : uniqueUsername, + email, + isEmailVerified: serverCfg.trustLdapEmails, + firstName, + lastName, + authMethods: [], + isGhost: false + }, + tx + ); + } + const newUserAlias = await userAliasDAL.create( { userId: newUser.id, username, aliasType: UserAliasType.LDAP, externalId, - emails, + emails: [email], orgId }, tx ); - await orgDAL.createMembership( + const [orgMembership] = await orgDAL.findMembership( { - userId: newUser.id, - orgId, - role: OrgMembershipRole.Member, - status: OrgMembershipStatus.Invited + [`${TableName.OrgMembership}.userId` as "userId"]: newUser.id, + [`${TableName.OrgMembership}.orgId` as "id"]: orgId }, - tx + { tx } ); + if (!orgMembership) { + await orgMembershipDAL.create( + { + userId: userAlias.userId, + inviteEmail: email, + orgId, + role: OrgMembershipRole.Member, + status: newUser.isAccepted ? OrgMembershipStatus.Accepted : OrgMembershipStatus.Invited // if user is fully completed, then set status to accepted, otherwise set it to invited so we can update it later + }, + tx + ); + // Only update the membership to Accepted if the user account is already completed. + } else if (orgMembership.status === OrgMembershipStatus.Invited && newUser.isAccepted) { + await orgDAL.updateMembershipById( + orgMembership.id, + { + status: OrgMembershipStatus.Accepted + }, + tx + ); + } + return newUserAlias; }); } diff --git a/backend/src/ee/services/ldap-config/ldap-config-types.ts b/backend/src/ee/services/ldap-config/ldap-config-types.ts index b7e9feb7b..aa4aa8da7 100644 --- a/backend/src/ee/services/ldap-config/ldap-config-types.ts +++ b/backend/src/ee/services/ldap-config/ldap-config-types.ts @@ -51,7 +51,7 @@ export type TLdapLoginDTO = { username: string; firstName: string; lastName: string; - emails: string[]; + email: string; orgId: string; groups?: { dn: string; diff --git a/backend/src/ee/services/saml-config/saml-config-service.ts b/backend/src/ee/services/saml-config/saml-config-service.ts index 42e77e431..7dfd211e1 100644 --- a/backend/src/ee/services/saml-config/saml-config-service.ts +++ b/backend/src/ee/services/saml-config/saml-config-service.ts @@ -347,7 +347,7 @@ export const samlConfigServiceFactory = ({ const foundUser = await userDAL.findById(userAlias.userId, tx); const [orgMembership] = await orgDAL.findMembership( { - userId: foundUser.id, + [`${TableName.OrgMembership}.userId` as "userId"]: foundUser.id, [`${TableName.OrgMembership}.orgId` as "id"]: orgId }, { tx } @@ -378,19 +378,33 @@ export const samlConfigServiceFactory = ({ }); } else { user = await userDAL.transaction(async (tx) => { - const uniqueUsername = await normalizeUsername(`${firstName ?? ""}-${lastName ?? ""}`, userDAL); - const newUser = await userDAL.create( - { - username: uniqueUsername, - email, - isEmailVerified: serverCfg.trustSamlEmails, - firstName, - lastName, - authMethods: [], - isGhost: false - }, - tx - ); + let newUser: TUsers | undefined; + if (serverCfg.trustSamlEmails) { + newUser = await userDAL.findOne( + { + email, + isEmailVerified: true + }, + tx + ); + } + + if (!newUser) { + const uniqueUsername = await normalizeUsername(`${firstName ?? ""}-${lastName ?? ""}`, userDAL); + newUser = await userDAL.create( + { + username: serverCfg.trustSamlEmails ? email : uniqueUsername, + email, + isEmailVerified: serverCfg.trustSamlEmails, + firstName, + lastName, + authMethods: [], + isGhost: false + }, + tx + ); + } + await userAliasDAL.create( { userId: newUser.id, @@ -402,17 +416,36 @@ export const samlConfigServiceFactory = ({ tx ); - await orgMembershipDAL.create( + const [orgMembership] = await orgDAL.findMembership( { - userId: newUser.id, - inviteEmail: email, - orgId, - role: OrgMembershipRole.Member, - status: OrgMembershipStatus.Invited + [`${TableName.OrgMembership}.userId` as "userId"]: newUser.id, + [`${TableName.OrgMembership}.orgId` as "id"]: orgId }, - tx + { tx } ); + if (!orgMembership) { + await orgMembershipDAL.create( + { + userId: newUser.id, + inviteEmail: email, + orgId, + role: OrgMembershipRole.Member, + status: newUser.isAccepted ? OrgMembershipStatus.Accepted : OrgMembershipStatus.Invited // if user is fully completed, then set status to accepted, otherwise set it to invited so we can update it later + }, + tx + ); + // Only update the membership to Accepted if the user account is already completed. + } else if (orgMembership.status === OrgMembershipStatus.Invited && newUser.isAccepted) { + await orgDAL.updateMembershipById( + orgMembership.id, + { + status: OrgMembershipStatus.Accepted + }, + tx + ); + } + return newUser; }); } diff --git a/backend/src/ee/services/saml-config/saml-config-types.ts b/backend/src/ee/services/saml-config/saml-config-types.ts index 0e84ff666..92ee32b5c 100644 --- a/backend/src/ee/services/saml-config/saml-config-types.ts +++ b/backend/src/ee/services/saml-config/saml-config-types.ts @@ -46,7 +46,7 @@ export type TGetSamlCfgDTO = export type TSamlLoginDTO = { externalId: string; - email?: string; + email: string; firstName: string; lastName?: string; authProvider: string; diff --git a/backend/src/ee/services/scim/scim-service.ts b/backend/src/ee/services/scim/scim-service.ts index c9cc6e1ed..9a084c6d7 100644 --- a/backend/src/ee/services/scim/scim-service.ts +++ b/backend/src/ee/services/scim/scim-service.ts @@ -209,10 +209,10 @@ export const scimServiceFactory = ({ findOpts ); - const scimUsers = users.map(({ id, username, firstName, lastName, email }) => + const scimUsers = users.map(({ id, externalId, username, firstName, lastName, email }) => buildScimUser({ orgMembershipId: id ?? "", - username, + username: externalId ?? username, firstName: firstName ?? "", lastName: lastName ?? "", email, @@ -254,7 +254,7 @@ export const scimServiceFactory = ({ return buildScimUser({ orgMembershipId: membership.id, - username: membership.username, + username: membership.externalId ?? membership.username, email: membership.email ?? "", firstName: membership.firstName as string, lastName: membership.lastName as string, @@ -262,7 +262,9 @@ export const scimServiceFactory = ({ }); }; - const createScimUser = async ({ username, email, firstName, lastName, orgId }: TCreateScimUserDTO) => { + const createScimUser = async ({ externalId, email, firstName, lastName, orgId }: TCreateScimUserDTO) => { + if (!email) throw new ScimRequestError({ detail: "Invalid request. Missing email.", status: 400 }); + const org = await orgDAL.findById(orgId); if (!org) @@ -281,13 +283,13 @@ export const scimServiceFactory = ({ const serverCfg = await getServerCfg(); const userAlias = await userAliasDAL.findOne({ - externalId: username, + externalId, orgId, aliasType: UserAliasType.SAML }); const { user: createdUser, orgMembership: createdOrgMembership } = await userDAL.transaction(async (tx) => { - let user: TUsers; + let user: TUsers | undefined; let orgMembership: TOrgMemberships; if (userAlias) { user = await userDAL.findById(userAlias.userId, tx); @@ -320,39 +322,74 @@ export const scimServiceFactory = ({ ); } } else { - const uniqueUsername = await normalizeUsername(`${firstName}-${lastName}`, userDAL); - user = await userDAL.create( - { - username: uniqueUsername, - email, - isEmailVerified: serverCfg.trustSamlEmails, - firstName, - lastName, - authMethods: [], - isGhost: false - }, - tx - ); + if (serverCfg.trustSamlEmails) { + user = await userDAL.findOne( + { + email, + isEmailVerified: true + }, + tx + ); + } + + if (!user) { + const uniqueUsername = await normalizeUsername(`${firstName}-${lastName}`, userDAL); + user = await userDAL.create( + { + username: serverCfg.trustSamlEmails ? email : uniqueUsername, + email, + isEmailVerified: serverCfg.trustSamlEmails, + firstName, + lastName, + authMethods: [], + isGhost: false + }, + tx + ); + } + await userAliasDAL.create( { userId: user.id, aliasType: UserAliasType.SAML, - externalId: username, + externalId, emails: email ? [email] : [], orgId }, tx ); - orgMembership = await orgMembershipDAL.create( + + const [foundOrgMembership] = await orgDAL.findMembership( { - userId: user.id, - inviteEmail: email, - orgId, - role: OrgMembershipRole.Member, - status: OrgMembershipStatus.Invited + [`${TableName.OrgMembership}.userId` as "userId"]: user.id, + [`${TableName.OrgMembership}.orgId` as "id"]: orgId }, - tx + { tx } ); + + orgMembership = foundOrgMembership; + + if (!orgMembership) { + orgMembership = await orgMembershipDAL.create( + { + userId: user.id, + inviteEmail: email, + orgId, + role: OrgMembershipRole.Member, + status: user.isAccepted ? OrgMembershipStatus.Accepted : OrgMembershipStatus.Invited // if user is fully completed, then set status to accepted, otherwise set it to invited so we can update it later + }, + tx + ); + // Only update the membership to Accepted if the user account is already completed. + } else if (orgMembership.status === OrgMembershipStatus.Invited && user.isAccepted) { + orgMembership = await orgDAL.updateMembershipById( + orgMembership.id, + { + status: OrgMembershipStatus.Accepted + }, + tx + ); + } } return { user, orgMembership }; @@ -372,7 +409,7 @@ export const scimServiceFactory = ({ return buildScimUser({ orgMembershipId: createdOrgMembership.id, - username: createdUser.username, + username: externalId, firstName: createdUser.firstName as string, lastName: createdUser.lastName as string, email: createdUser.email ?? "", @@ -380,11 +417,11 @@ export const scimServiceFactory = ({ }); }; - const updateScimUser = async ({ userId, orgId, operations }: TUpdateScimUserDTO) => { + const updateScimUser = async ({ orgMembershipId, orgId, operations }: TUpdateScimUserDTO) => { const [membership] = await orgDAL .findMembership({ - userId, - [`${TableName.OrgMembership}.orgId` as "id"]: orgId + [`${TableName.OrgMembership}.id` as "id"]: orgMembershipId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId }) .catch(() => { throw new ScimRequestError({ @@ -433,7 +470,7 @@ export const scimServiceFactory = ({ return buildScimUser({ orgMembershipId: membership.id, - username: membership.username, + username: membership.externalId ?? membership.username, email: membership.email, firstName: membership.firstName as string, lastName: membership.lastName as string, @@ -467,7 +504,6 @@ export const scimServiceFactory = ({ }); if (!active) { - // tx await deleteOrgMembershipFn({ orgMembershipId: membership.id, orgId: membership.orgId, @@ -481,7 +517,7 @@ export const scimServiceFactory = ({ return buildScimUser({ orgMembershipId: membership.id, - username: membership.username, + username: membership.externalId ?? membership.username, email: membership.email, firstName: membership.firstName as string, lastName: membership.lastName as string, @@ -627,9 +663,9 @@ export const scimServiceFactory = ({ }); const orgMemberships = await orgDAL.findMembership({ - orgId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId, $in: { - userId: newGroup.newMembers.map((member) => member.id) + [`${TableName.OrgMembership}.userId` as "userId"]: newGroup.newMembers.map((member) => member.id) } }); @@ -668,9 +704,11 @@ export const scimServiceFactory = ({ }); const orgMemberships = await orgDAL.findMembership({ - orgId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId, $in: { - userId: users.filter((user) => user.isPartOfGroup).map((user) => user.id) + [`${TableName.OrgMembership}.userId` as "userId"]: users + .filter((user) => user.isPartOfGroup) + .map((user) => user.id) } }); diff --git a/backend/src/ee/services/scim/scim-types.ts b/backend/src/ee/services/scim/scim-types.ts index e804d51a5..46ab90b8f 100644 --- a/backend/src/ee/services/scim/scim-types.ts +++ b/backend/src/ee/services/scim/scim-types.ts @@ -32,7 +32,7 @@ export type TGetScimUserDTO = { }; export type TCreateScimUserDTO = { - username: string; + externalId: string; email?: string; firstName: string; lastName: string; @@ -40,7 +40,7 @@ export type TCreateScimUserDTO = { }; export type TUpdateScimUserDTO = { - userId: string; + orgMembershipId: string; orgId: string; operations: { op: string; diff --git a/backend/src/server/routes/index.ts b/backend/src/server/routes/index.ts index fd095389a..aeb66d93f 100644 --- a/backend/src/server/routes/index.ts +++ b/backend/src/server/routes/index.ts @@ -322,6 +322,7 @@ export const registerRoutes = async ( ldapConfigDAL, ldapGroupMapDAL, orgDAL, + orgMembershipDAL, orgBotDAL, groupDAL, groupProjectDAL, diff --git a/backend/src/services/auth/auth-signup-service.ts b/backend/src/services/auth/auth-signup-service.ts index 5aea53786..be7f5777d 100644 --- a/backend/src/services/auth/auth-signup-service.ts +++ b/backend/src/services/auth/auth-signup-service.ts @@ -1,6 +1,6 @@ import jwt from "jsonwebtoken"; -import { OrgMembershipStatus } from "@app/db/schemas"; +import { OrgMembershipStatus, TableName } from "@app/db/schemas"; import { convertPendingGroupAdditionsToGroupMemberships } from "@app/ee/services/group/group-fns"; import { TUserGroupMembershipDALFactory } from "@app/ee/services/group/user-group-membership-dal"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; @@ -102,6 +102,8 @@ export const authSignupServiceFactory = ({ code }); + await userDAL.updateById(user.id, { isEmailVerified: true }); + // generate jwt token this is a temporary token const jwtToken = jwt.sign( { @@ -171,9 +173,9 @@ export const authSignupServiceFactory = ({ // If it's SAML Auth and the organization ID is present, we should check if the user has a pending invite for this org, and accept it if ((isAuthMethodSaml(authMethod) || authMethod === AuthMethod.LDAP) && organizationId) { const [pendingOrgMembership] = await orgDAL.findMembership({ - userId: user.id, + [`${TableName.OrgMembership}.userId` as "userId"]: user.id, status: OrgMembershipStatus.Invited, - orgId: organizationId + [`${TableName.OrgMembership}.orgId` as "orgId"]: organizationId }); if (pendingOrgMembership) { diff --git a/backend/src/services/org/org-dal.ts b/backend/src/services/org/org-dal.ts index 4dc76b612..1e52053b2 100644 --- a/backend/src/services/org/org-dal.ts +++ b/backend/src/services/org/org-dal.ts @@ -262,13 +262,19 @@ export const orgDALFactory = (db: TDbClient) => { .where(buildFindFilter(filter)) .join(TableName.Users, `${TableName.Users}.id`, `${TableName.OrgMembership}.userId`) .join(TableName.Organization, `${TableName.Organization}.id`, `${TableName.OrgMembership}.orgId`) + .leftJoin(TableName.UserAliases, function joinUserAlias() { + this.on(`${TableName.UserAliases}.userId`, "=", `${TableName.OrgMembership}.userId`) + .andOn(`${TableName.UserAliases}.orgId`, "=", `${TableName.OrgMembership}.orgId`) + .andOn(`${TableName.UserAliases}.aliasType`, "=", (tx || db).raw("?", ["saml"])); + }) .select( selectAllTableCols(TableName.OrgMembership), db.ref("email").withSchema(TableName.Users), db.ref("username").withSchema(TableName.Users), db.ref("firstName").withSchema(TableName.Users), db.ref("lastName").withSchema(TableName.Users), - db.ref("scimEnabled").withSchema(TableName.Organization) + db.ref("scimEnabled").withSchema(TableName.Organization), + db.ref("externalId").withSchema(TableName.UserAliases) ) .where({ isGhost: false }); diff --git a/backend/src/services/org/org-service.ts b/backend/src/services/org/org-service.ts index a666e6a03..d7ee1ce93 100644 --- a/backend/src/services/org/org-service.ts +++ b/backend/src/services/org/org-service.ts @@ -4,7 +4,7 @@ import crypto from "crypto"; import jwt from "jsonwebtoken"; import { Knex } from "knex"; -import { OrgMembershipRole, OrgMembershipStatus } from "@app/db/schemas"; +import { OrgMembershipRole, OrgMembershipStatus, TableName } from "@app/db/schemas"; import { TProjects } from "@app/db/schemas/projects"; import { TGroupDALFactory } from "@app/ee/services/group/group-dal"; import { TLicenseServiceFactory } from "@app/ee/services/license/license-service"; @@ -431,7 +431,13 @@ export const orgServiceFactory = ({ if (inviteeUser) { // if user already exist means its already part of infisical // Thus the signup flow is not needed anymore - const [inviteeMembership] = await orgDAL.findMembership({ orgId, userId: inviteeUser.id }, { tx }); + const [inviteeMembership] = await orgDAL.findMembership( + { + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId, + [`${TableName.OrgMembership}.userId` as "userId"]: inviteeUser.id + }, + { tx } + ); if (inviteeMembership && inviteeMembership.status === OrgMembershipStatus.Accepted) { throw new BadRequestError({ message: "Failed to invite an existing member of org", @@ -523,9 +529,9 @@ export const orgServiceFactory = ({ throw new BadRequestError({ message: "Invalid request", name: "Verify user to org" }); } const [orgMembership] = await orgDAL.findMembership({ - userId: user.id, + [`${TableName.OrgMembership}.userId` as "userId"]: user.id, status: OrgMembershipStatus.Invited, - orgId + [`${TableName.OrgMembership}.orgId` as "orgId"]: orgId }); if (!orgMembership) throw new BadRequestError({ diff --git a/backend/src/services/project-membership/project-membership-service.ts b/backend/src/services/project-membership/project-membership-service.ts index 6d148d03b..e12114fef 100644 --- a/backend/src/services/project-membership/project-membership-service.ts +++ b/backend/src/services/project-membership/project-membership-service.ts @@ -110,7 +110,7 @@ export const projectMembershipServiceFactory = ({ ); ForbiddenError.from(permission).throwUnlessCan(ProjectPermissionActions.Create, ProjectPermissionSub.Member); const orgMembers = await orgDAL.findMembership({ - orgId: project.orgId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: project.orgId, $in: { [`${TableName.OrgMembership}.id` as "id"]: members.map(({ orgMembershipId }) => orgMembershipId) } @@ -119,7 +119,7 @@ export const projectMembershipServiceFactory = ({ const existingMembers = await projectMembershipDAL.find({ projectId, - $in: { userId: orgMembers.map(({ userId }) => userId).filter(Boolean) as string[] } + $in: { userId: orgMembers.map(({ userId }) => userId).filter(Boolean) } }); if (existingMembers.length) throw new BadRequestError({ message: "Some users are already part of project" }); @@ -134,7 +134,7 @@ export const projectMembershipServiceFactory = ({ const projectMemberships = await projectMembershipDAL.insertMany( orgMembers.map(({ userId }) => ({ projectId, - userId: userId as string + userId })), tx ); @@ -145,12 +145,12 @@ export const projectMembershipServiceFactory = ({ const encKeyGroupByOrgMembId = groupBy(members, (i) => i.orgMembershipId); await projectKeyDAL.insertMany( orgMembers - .filter(({ userId }) => !userIdsToExcludeForProjectKeyAddition.has(userId as string)) + .filter(({ userId }) => !userIdsToExcludeForProjectKeyAddition.has(userId)) .map(({ userId, id }) => ({ encryptedKey: encKeyGroupByOrgMembId[id][0].workspaceEncryptedKey, nonce: encKeyGroupByOrgMembId[id][0].workspaceEncryptedNonce, senderId: actorId, - receiverId: userId as string, + receiverId: userId, projectId })), tx diff --git a/backend/src/services/project/project-queue.ts b/backend/src/services/project/project-queue.ts index 81ecd6da1..8f1e3fc3f 100644 --- a/backend/src/services/project/project-queue.ts +++ b/backend/src/services/project/project-queue.ts @@ -8,6 +8,7 @@ import { SecretKeyEncoding, SecretsSchema, SecretVersionsSchema, + TableName, TIntegrationAuths, TSecretApprovalRequestsSecrets, TSecrets, @@ -273,7 +274,10 @@ export const projectQueueFactory = ({ for (const key of existingProjectKeys) { const user = await userDAL.findUserEncKeyByUserId(key.receiverId); - const [orgMembership] = await orgDAL.findMembership({ userId: key.receiverId, orgId: project.orgId }); + const [orgMembership] = await orgDAL.findMembership({ + [`${TableName.OrgMembership}.userId` as "userId"]: key.receiverId, + [`${TableName.OrgMembership}.orgId` as "orgId"]: project.orgId + }); if (!user) { throw new Error(`User with ID ${key.receiverId} was not found during upgrade.`); diff --git a/backend/src/services/user/user-service.ts b/backend/src/services/user/user-service.ts index 6d6bf274a..089f3b8c6 100644 --- a/backend/src/services/user/user-service.ts +++ b/backend/src/services/user/user-service.ts @@ -63,6 +63,8 @@ export const userServiceFactory = ({ const verifyEmailVerificationCode = async (username: string, code: string) => { const user = await userDAL.findOne({ username }); if (!user) throw new BadRequestError({ name: "Failed to find user" }); + if (!user.email) + throw new BadRequestError({ name: "Failed to verify email verification code due to no email on user" }); if (user.isEmailVerified) throw new BadRequestError({ name: "Failed to verify email verification code due to email already verified" }); @@ -72,6 +74,8 @@ export const userServiceFactory = ({ code }); + const { email } = user; + await userDAL.transaction(async (tx) => { await userDAL.updateById( user.id, @@ -84,7 +88,7 @@ export const userServiceFactory = ({ // check if there are users with the same email. const users = await userDAL.find( { - email: user.email, + email, isEmailVerified: true }, { tx } @@ -129,6 +133,15 @@ export const userServiceFactory = ({ tx ); } + } else { + // update current user's username to [email] + await userDAL.updateById( + user.id, + { + username: email + }, + tx + ); } }); }; diff --git a/docs/documentation/platform/ldap/general.mdx b/docs/documentation/platform/ldap/general.mdx index aa4841625..5e4253a34 100644 --- a/docs/documentation/platform/ldap/general.mdx +++ b/docs/documentation/platform/ldap/general.mdx @@ -12,6 +12,10 @@ description: "Learn how to log in to Infisical with LDAP." You can configure your organization in Infisical to have members authenticate with the platform via [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol) +Prerequisites: + +- You must have an email address to use LDAP, regardless of whether or not you use that email address to sign in. + In Infisical, head to your Organization Settings > Security > LDAP and select **Manage**. diff --git a/docs/documentation/platform/ldap/jumpcloud.mdx b/docs/documentation/platform/ldap/jumpcloud.mdx index 0b40d8b3a..b92b52bb9 100644 --- a/docs/documentation/platform/ldap/jumpcloud.mdx +++ b/docs/documentation/platform/ldap/jumpcloud.mdx @@ -10,6 +10,10 @@ description: "Learn how to configure JumpCloud LDAP for authenticating into Infi it. +Prerequisites: + +- You must have an email address to use LDAP, regardless of whether or not you use that email address to sign in. + In JumpCloud, head to USER MANAGEMENT > Users and create a new user via the **Manual user entry** option. This user diff --git a/docs/documentation/platform/ldap/overview.mdx b/docs/documentation/platform/ldap/overview.mdx index 2423be8c0..4d6c75e15 100644 --- a/docs/documentation/platform/ldap/overview.mdx +++ b/docs/documentation/platform/ldap/overview.mdx @@ -3,11 +3,13 @@ title: "LDAP Overview" sidebarTitle: "Overview" description: "Learn how to authenticate into Infisical with LDAP." --- + LDAP is a paid feature. - If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, - then you should contact sales@infisical.com to purchase an enterprise license to use it. +If you're using Infisical Cloud, then it is available under the **Enterprise Tier**. If you're self-hosting Infisical, +then you should contact sales@infisical.com to purchase an enterprise license to use it. + You can configure your organization in Infisical to have members authenticate with the platform via [LDAP](https://en.wikipedia.org/wiki/Lightweight_Directory_Access_Protocol). @@ -25,3 +27,18 @@ Read the general instructions for configuring LDAP [here](/documentation/platfor If the documentation for your required identity provider is not shown in the list above, please reach out to [team@infisical.com](mailto:team@infisical.com) for assistance. +## FAQ + + + + By default, Infisical Cloud is configured to not trust emails from external + identity providers to prevent any malicious account takeover attempts via + email spoofing. Accordingly, Infisical creates a new user for anyone provisioned + through an external identity provider and requires an additional email + verification step upon their first login. + + If you're running a self-hosted instance of Infisical and would like it to trust emails from external identity providers, + you can configure this behavior in the admin panel. + + + diff --git a/docs/documentation/platform/sso/okta.mdx b/docs/documentation/platform/sso/okta.mdx index c81141c92..b0ac046d0 100644 --- a/docs/documentation/platform/sso/okta.mdx +++ b/docs/documentation/platform/sso/okta.mdx @@ -4,10 +4,10 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO." --- - Okta SAML SSO is a paid feature. - - If you're using Infisical Cloud, then it is available under the **Pro Tier**. If you're self-hosting Infisical, - then you should contact sales@infisical.com to purchase an enterprise license to use it. + Okta SAML SSO is a paid feature. If you're using Infisical Cloud, then it is + available under the **Pro Tier**. If you're self-hosting Infisical, then you + should contact sales@infisical.com to purchase an enterprise license to use + it. @@ -22,24 +22,24 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO." button. ![SAML Okta create app integration](../../../images/sso/okta/create-app-integration.png) - + In the Create a New Application Integration dialog, select the **SAML 2.0** radio button: ![SAML Okta create SAML 2.0 integration](../../../images/sso/okta/create-saml-app.png) - + On the General Settings screen, give the application a unique name like Infisical and select **Next**. - + ![SAML Okta create SAML 2.0 integration](../../../images/sso/okta/general-settings.png) - + On the Configure SAML screen, set the **Single sign-on URL** and **Audience URI (SP Entity ID)** from step 1. ![SAML Okta configure IdP fields](../../../images/sso/okta/configure-saml.png) - + If you're self-hosting Infisical, then you will want to replace `https://app.infisical.com` with your own domain. - + Also on the Configure SAML screen, configure the **Attribute Statements** to map: - `id -> user.id`, @@ -50,6 +50,7 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO." ![SAML Okta attribute statements](../../../images/sso/okta/attribute-statements.png) Once configured, select **Next** to proceed to the Feedback screen and select **Finish**. + Once your application is created, select the **Sign On** tab for the app and select the **View Setup Instructions** button located on the right side of the screen: @@ -59,12 +60,14 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO." Copy the **Identity Provider Single Sign-On URL**, the **Identity Provider Issuer**, and the **X.509 Certificate** to use when finishing configuring Okta SAML in Infisical. ![SAML Okta IdP values](../../../images/sso/okta/idp-values.png) + Back in Infisical, set **Identity Provider Single Sign-On URL**, **Identity Provider Issuer**, and **Certificate** to **X.509 Certificate** from step 3. Once you've done that, press **Update** to complete the required configuration. ![SAML Okta paste values into Infisical](../../../images/sso/okta/idp-values-2.png) + Back in Okta, navigate to the **Assignments** tab and select **Assign**. You can assign access to the application on a user-by-user basis using the Assign to People option, or in-bulk using the Assign to Groups option. @@ -72,11 +75,13 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO." ![SAML Okta assignment](../../../images/sso/okta/assignment.png) At this point, you have configured everything you need within the context of the Okta Admin Portal. + Enabling SAML SSO allows members in your organization to log into Infisical via Okta. ![SAML Okta enable SAML](../../../images/sso/okta/enable-saml.png) + Enforcing SAML SSO ensures that members in your organization can only access Infisical @@ -89,13 +94,15 @@ description: "Learn how to configure Okta SAML 2.0 for Infisical SSO." We recommend ensuring that your account is provisioned the application in Okta prior to enforcing SAML SSO to prevent any unintended issues. + - If you're configuring SAML SSO on a self-hosted instance of Infisical, make sure to - set the `AUTH_SECRET` and `SITE_URL` environment variable for it to work: - - - `AUTH_SECRET`: A secret key used for signing and verifying JWT. This can be a random 32-byte base64 string generated with `openssl rand -base64 32`. - - `SITE_URL`: The URL of your self-hosted instance of Infisical - should be an absolute URL including the protocol (e.g. https://app.infisical.com) - \ No newline at end of file + If you're configuring SAML SSO on a self-hosted instance of Infisical, make + sure to set the `AUTH_SECRET` and `SITE_URL` environment variable for it to + work: - `AUTH_SECRET`: A secret key used for signing and verifying JWT. This + can be a random 32-byte base64 string generated with `openssl rand -base64 + 32`. - `SITE_URL`: The URL of your self-hosted instance of Infisical - should + be an absolute URL including the protocol (e.g. https://app.infisical.com) + diff --git a/docs/documentation/platform/sso/overview.mdx b/docs/documentation/platform/sso/overview.mdx index 6064f26e8..9ab0acc3a 100644 --- a/docs/documentation/platform/sso/overview.mdx +++ b/docs/documentation/platform/sso/overview.mdx @@ -5,11 +5,12 @@ description: "Learn how to log in to Infisical via SSO protocols." --- - Infisical offers Google SSO and GitHub SSO for free across both Infisical Cloud and Infisical Self-hosted. - - Infisical also offers SAML SSO authentication but as paid features that can be unlocked on Infisical Cloud's **Pro** tier - or via enterprise license on self-hosted instances of Infisical. On this front, we support industry-leading providers including - Okta, Azure AD, and JumpCloud; with any questions, please reach out to team@infisical.com. + Infisical offers Google SSO and GitHub SSO for free across both Infisical + Cloud and Infisical Self-hosted. Infisical also offers SAML SSO authentication + but as paid features that can be unlocked on Infisical Cloud's **Pro** tier or + via enterprise license on self-hosted instances of Infisical. On this front, + we support industry-leading providers including Okta, Azure AD, and JumpCloud; + with any questions, please reach out to team@infisical.com. You can configure your organization in Infisical to have members authenticate with the platform via protocols like [SAML 2.0](https://en.wikipedia.org/wiki/SAML_2.0). @@ -31,3 +32,19 @@ Infisical supports these and many other identity providers: - [Google SAML](/documentation/platform/sso/google-saml) If your required identity provider is not shown in the list above, please reach out to [team@infisical.com](mailto:team@infisical.com) for assistance. + +## FAQ + + + + By default, Infisical Cloud is configured to not trust emails from external + identity providers to prevent any malicious account takeover attempts via + email spoofing. Accordingly, Infisical creates a new user for anyone provisioned + through an external identity provider and requires an additional email + verification step upon their first login. + + If you're running a self-hosted instance of Infisical and would like it to trust emails from external identity providers, + you can configure this behavior in the admin panel. + + + diff --git a/frontend/src/views/Signup/SignupSSO.tsx b/frontend/src/views/Signup/SignupSSO.tsx index 88021ab44..2510c9fa4 100644 --- a/frontend/src/views/Signup/SignupSSO.tsx +++ b/frontend/src/views/Signup/SignupSSO.tsx @@ -54,14 +54,6 @@ export const SignupSSO = ({ providerAuthToken }: Props) => { providerAuthToken={providerAuthToken} /> ); - // case 2: - // return ( - // - // ); case 2: return ( From ba1b223655819996b2509e17de7f8e0585c01602 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 6 May 2024 19:44:43 -0700 Subject: [PATCH 44/46] Patch migration file hasTable ref --- .../db/migrations/20240506163405_trusted-saml-ldap-emails.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts b/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts index 8e7fd8b8b..950f78e58 100644 --- a/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts +++ b/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts @@ -3,7 +3,7 @@ import { Knex } from "knex"; import { TableName } from "../schemas"; export async function up(knex: Knex): Promise { - const isUserAliasTablePresent = await knex.schema.hasTable(TableName.SuperAdmin); + const isUserAliasTablePresent = await knex.schema.hasTable(TableName.UserAliases); if (isUserAliasTablePresent) { await knex.schema.alterTable(TableName.UserAliases, (t) => { t.string("username").nullable().alter(); From 0357e7c80e8d9ae942a37a0cae4c01d838019d19 Mon Sep 17 00:00:00 2001 From: Tuan Dang Date: Mon, 6 May 2024 19:58:58 -0700 Subject: [PATCH 45/46] Put email-confirmation migration into trusted-saml-ldap-emails file --- .../20240419200953_email-confirmation.ts | 15 --------------- .../20240506163405_trusted-saml-ldap-emails.ts | 13 +++++++++++++ 2 files changed, 13 insertions(+), 15 deletions(-) delete mode 100644 backend/src/db/migrations/20240419200953_email-confirmation.ts diff --git a/backend/src/db/migrations/20240419200953_email-confirmation.ts b/backend/src/db/migrations/20240419200953_email-confirmation.ts deleted file mode 100644 index 59d7b3d41..000000000 --- a/backend/src/db/migrations/20240419200953_email-confirmation.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Knex } from "knex"; - -import { TableName } from "../schemas"; - -export async function up(knex: Knex): Promise { - await knex.schema.alterTable(TableName.Users, (t) => { - t.boolean("isEmailVerified"); - }); -} - -export async function down(knex: Knex): Promise { - await knex.schema.alterTable(TableName.Users, (t) => { - t.dropColumn("isEmailVerified"); - }); -} diff --git a/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts b/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts index 950f78e58..63aa75ad8 100644 --- a/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts +++ b/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts @@ -3,6 +3,13 @@ import { Knex } from "knex"; import { TableName } from "../schemas"; export async function up(knex: Knex): Promise { + const isUsersTablePresent = await knex.schema.hasTable(TableName.Users); + if (isUsersTablePresent) { + await knex.schema.alterTable(TableName.Users, (t) => { + t.boolean("isEmailVerified"); + }); + } + const isUserAliasTablePresent = await knex.schema.hasTable(TableName.UserAliases); if (isUserAliasTablePresent) { await knex.schema.alterTable(TableName.UserAliases, (t) => { @@ -20,6 +27,12 @@ export async function up(knex: Knex): Promise { } export async function down(knex: Knex): Promise { + if (await knex.schema.hasColumn(TableName.Users, "isEmailVerified")) { + await knex.schema.alterTable(TableName.Users, (t) => { + t.dropColumn("isEmailVerified"); + }); + } + if (await knex.schema.hasColumn(TableName.SuperAdmin, "trustSamlEmails")) { await knex.schema.alterTable(TableName.SuperAdmin, (t) => { t.dropColumn("trustSamlEmails"); From 308e605b6c8c791a262207ce855cb599e04acb49 Mon Sep 17 00:00:00 2001 From: github-actions Date: Tue, 7 May 2024 03:28:10 +0000 Subject: [PATCH 46/46] chore: renamed new migration files to latest timestamp (gh-action) --- ...-ldap-emails.ts => 20240507032811_trusted-saml-ldap-emails.ts} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename backend/src/db/migrations/{20240506163405_trusted-saml-ldap-emails.ts => 20240507032811_trusted-saml-ldap-emails.ts} (100%) diff --git a/backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts b/backend/src/db/migrations/20240507032811_trusted-saml-ldap-emails.ts similarity index 100% rename from backend/src/db/migrations/20240506163405_trusted-saml-ldap-emails.ts rename to backend/src/db/migrations/20240507032811_trusted-saml-ldap-emails.ts

&_4gg#_O0Nx(@0!iZ->?mhB{GMQuUGBAjy<|` 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 literal 0 HcmV?d00001 diff --git a/docs/images/platform/audit-log-streams/stream-inputs.png b/docs/images/platform/audit-log-streams/stream-inputs.png new file mode 100644 index 0000000000000000000000000000000000000000..8feaa6f558843b431099585b5dcee3da304e90a6 GIT binary patch literal 97341 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 z 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�&)52-}cNDw19~_ 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 Date: Fri, 3 May 2024 00:31:40 +0530 Subject: [PATCH 22/46] feat: rollback license-fns --- backend/src/ee/services/license/licence-fns.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/backend/src/ee/services/license/licence-fns.ts b/backend/src/ee/services/license/licence-fns.ts index 0dfd83bda..189a3c4e0 100644 --- a/backend/src/ee/services/license/licence-fns.ts +++ b/backend/src/ee/services/license/licence-fns.ts @@ -22,9 +22,9 @@ export const getDefaultOnPremFeatures = (): TFeatureSet => ({ rbac: false, customRateLimits: false, customAlerts: false, - auditLogs: true, - auditLogsRetentionDays: 3, - auditLogStreams: true, + auditLogs: false, + auditLogsRetentionDays: 0, + auditLogStreams: false, auditLogStreamLimit: 3, samlSSO: false, scim: false, From 52189111d7b466ea1e0ebd22c566e75b405d10fd Mon Sep 17 00:00:00 2001 From: Sheen Capadngan Date: Fri, 3 May 2024 18:03:21 +0800 Subject: [PATCH 23/46] adjustment: added slug to response --- backend/src/server/routes/v2/organization-router.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/backend/src/server/routes/v2/organization-router.ts b/backend/src/server/routes/v2/organization-router.ts index e8204222e..07074eba3 100644 --- a/backend/src/server/routes/v2/organization-router.ts +++ b/backend/src/server/routes/v2/organization-router.ts @@ -76,6 +76,7 @@ export const registerOrgRouter = async (server: FastifyZodProvider) => { .object({ id: z.string(), name: z.string(), + slug: z.string(), organization: z.string(), environments: z .object({ From 2dcb409d3b95c648e4f7365b13679b5207c651f5 Mon Sep 17 00:00:00 2001 From: Akhil Mohan Date: Fri, 3 May 2024 17:43:14 +0530 Subject: [PATCH 24/46] feat: changed from token to headers for audit log streams api --- ....ts => 20240503101144_audit-log-stream.ts} | 10 +- backend/src/db/schemas/audit-log-streams.ts | 10 +- .../ee/routes/v1/audit-log-stream-router.ts | 32 ++++- .../audit-log-stream-service.ts | 103 +++++++++------ .../audit-log-stream-types.ts | 9 +- .../ee/services/audit-log/audit-log-queue.ts | 34 +++-- backend/src/lib/api-docs/constants.ts | 12 +- .../src/hooks/api/auditLogStreams/types.ts | 11 +- .../AuditLogStreamTab/AuditLogStreamForm.tsx | 120 ++++++++++++++---- 9 files changed, 242 insertions(+), 99 deletions(-) rename backend/src/db/migrations/{20240423070528_audit-log-stream.ts => 20240503101144_audit-log-stream.ts} (80%) diff --git a/backend/src/db/migrations/20240423070528_audit-log-stream.ts b/backend/src/db/migrations/20240503101144_audit-log-stream.ts similarity index 80% rename from backend/src/db/migrations/20240423070528_audit-log-stream.ts rename to backend/src/db/migrations/20240503101144_audit-log-stream.ts index c4133fb94..210ee1bfa 100644 --- a/backend/src/db/migrations/20240423070528_audit-log-stream.ts +++ b/backend/src/db/migrations/20240503101144_audit-log-stream.ts @@ -8,11 +8,11 @@ export async function up(knex: Knex): Promise { await knex.schema.createTable(TableName.AuditLogStream, (t) => { t.uuid("id", { primaryKey: true }).defaultTo(knex.fn.uuid()); t.string("url").notNullable(); - t.text("encryptedTokenCiphertext"); - t.text("encryptedTokenIV"); - t.text("encryptedTokenTag"); - t.string("encryptedTokenAlgorithm"); - t.string("encryptedTokenKeyEncoding"); + t.text("encryptedHeadersCiphertext"); + t.text("encryptedHeadersIV"); + t.text("encryptedHeadersTag"); + t.string("encryptedHeadersAlgorithm"); + t.string("encryptedHeadersKeyEncoding"); t.uuid("orgId").notNullable(); t.foreign("orgId").references("id").inTable(TableName.Organization).onDelete("CASCADE"); t.timestamps(true, true, true); diff --git a/backend/src/db/schemas/audit-log-streams.ts b/backend/src/db/schemas/audit-log-streams.ts index bab73d0c5..901dd8d27 100644 --- a/backend/src/db/schemas/audit-log-streams.ts +++ b/backend/src/db/schemas/audit-log-streams.ts @@ -10,11 +10,11 @@ import { TImmutableDBKeys } from "./models"; export const AuditLogStreamsSchema = z.object({ id: z.string().uuid(), url: z.string(), - encryptedTokenCiphertext: z.string().nullable().optional(), - encryptedTokenIV: z.string().nullable().optional(), - encryptedTokenTag: z.string().nullable().optional(), - encryptedTokenAlgorithm: z.string().nullable().optional(), - encryptedTokenKeyEncoding: z.string().nullable().optional(), + encryptedHeadersCiphertext: z.string().nullable().optional(), + encryptedHeadersIV: z.string().nullable().optional(), + encryptedHeadersTag: z.string().nullable().optional(), + encryptedHeadersAlgorithm: z.string().nullable().optional(), + encryptedHeadersKeyEncoding: z.string().nullable().optional(), orgId: z.string().uuid(), createdAt: z.date(), updatedAt: z.date() diff --git a/backend/src/ee/routes/v1/audit-log-stream-router.ts b/backend/src/ee/routes/v1/audit-log-stream-router.ts index d11b74cc3..17bd9e64b 100644 --- a/backend/src/ee/routes/v1/audit-log-stream-router.ts +++ b/backend/src/ee/routes/v1/audit-log-stream-router.ts @@ -22,7 +22,14 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = ], body: z.object({ url: z.string().min(1).describe(AUDIT_LOG_STREAMS.CREATE.url), - token: z.string().optional().describe(AUDIT_LOG_STREAMS.CREATE.token) + headers: z + .object({ + key: z.string().min(1).trim().describe(AUDIT_LOG_STREAMS.CREATE.headers.key), + value: z.string().min(1).trim().describe(AUDIT_LOG_STREAMS.CREATE.headers.value) + }) + .describe(AUDIT_LOG_STREAMS.CREATE.headers.desc) + .array() + .optional() }), response: { 200: z.object({ @@ -38,7 +45,7 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = actorOrgId: req.permission.orgId, actorAuthMethod: req.permission.authMethod, url: req.body.url, - token: req.body.token + headers: req.body.headers }); return { auditLogStream }; @@ -63,7 +70,14 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = }), body: z.object({ url: z.string().optional().describe(AUDIT_LOG_STREAMS.UPDATE.url), - token: z.string().optional().describe(AUDIT_LOG_STREAMS.UPDATE.token) + headers: z + .object({ + key: z.string().min(1).trim().describe(AUDIT_LOG_STREAMS.UPDATE.headers.key), + value: z.string().min(1).trim().describe(AUDIT_LOG_STREAMS.UPDATE.headers.value) + }) + .describe(AUDIT_LOG_STREAMS.UPDATE.headers.desc) + .array() + .optional() }), response: { 200: z.object({ @@ -80,7 +94,7 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = actorAuthMethod: req.permission.authMethod, id: req.params.id, url: req.body.url, - token: req.body.token + headers: req.body.headers }); return { auditLogStream }; @@ -141,7 +155,15 @@ export const registerAuditLogStreamRouter = async (server: FastifyZodProvider) = }), response: { 200: z.object({ - auditLogStream: SanitizedAuditLogStreamSchema.extend({ token: z.string().optional() }) + auditLogStream: SanitizedAuditLogStreamSchema.extend({ + headers: z + .object({ + key: z.string(), + value: z.string() + }) + .array() + .optional() + }) }) } }, diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts index fd6e10a28..b82ce04ae 100644 --- a/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-service.ts @@ -13,6 +13,7 @@ import { OrgPermissionActions, OrgPermissionSubjects } from "../permission/org-p import { TPermissionServiceFactory } from "../permission/permission-service"; import { TAuditLogStreamDALFactory } from "./audit-log-stream-dal"; import { + LogStreamHeaders, TCreateAuditLogStreamDTO, TDeleteAuditLogStreamDTO, TGetDetailsAuditLogStreamDTO, @@ -33,7 +34,14 @@ export const auditLogStreamServiceFactory = ({ permissionService, licenseService }: TAuditLogStreamServiceFactoryDep) => { - const create = async ({ url, actor, token, actorId, actorOrgId, actorAuthMethod }: TCreateAuditLogStreamDTO) => { + const create = async ({ + url, + actor, + headers = [], + actorId, + actorOrgId, + actorAuthMethod + }: TCreateAuditLogStreamDTO) => { if (!actorOrgId) throw new BadRequestError({ message: "Missing org id from token" }); const plan = await licenseService.getPlan(actorOrgId); @@ -62,30 +70,37 @@ export const auditLogStreamServiceFactory = ({ } // testing connection first - const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; - if (token) headers.Authorization = `Bearer ${token}`; - await request.post( - url, - { ping: "ok" }, - { - headers, - // request timeout - timeout: AUDIT_LOG_STREAM_TIMEOUT, - // connection timeout - signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) - } - ); - const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; + const streamHeaders: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; + if (headers.length) + headers.forEach(({ key, value }) => { + streamHeaders[key] = value; + }); + await request + .post( + url, + { ping: "ok" }, + { + headers: streamHeaders, + // request timeout + timeout: AUDIT_LOG_STREAM_TIMEOUT, + // connection timeout + signal: AbortSignal.timeout(AUDIT_LOG_STREAM_TIMEOUT) + } + ) + .catch((err) => { + throw new Error(`Failed to connect with the source ${(err as Error)?.message}`); + }); + const encryptedHeaders = headers ? infisicalSymmetricEncypt(JSON.stringify(headers)) : undefined; const logStream = await auditLogStreamDAL.create({ orgId: actorOrgId, url, - ...(encryptedToken + ...(encryptedHeaders ? { - encryptedTokenCiphertext: encryptedToken.ciphertext, - encryptedTokenIV: encryptedToken.iv, - encryptedTokenTag: encryptedToken.tag, - encryptedTokenAlgorithm: encryptedToken.algorithm, - encryptedTokenKeyEncoding: encryptedToken.encoding + encryptedHeadersCiphertext: encryptedHeaders.ciphertext, + encryptedHeadersIV: encryptedHeaders.iv, + encryptedHeadersTag: encryptedHeaders.tag, + encryptedHeadersAlgorithm: encryptedHeaders.algorithm, + encryptedHeadersKeyEncoding: encryptedHeaders.encoding } : {}) }); @@ -96,7 +111,7 @@ export const auditLogStreamServiceFactory = ({ id, url, actor, - token, + headers = [], actorId, actorOrgId, actorAuthMethod @@ -119,13 +134,17 @@ export const auditLogStreamServiceFactory = ({ if (url) validateLocalIps(url); // testing connection first - const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; - if (token) headers.Authorization = `Bearer ${token}`; + const streamHeaders: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; + if (headers.length) + headers.forEach(({ key, value }) => { + streamHeaders[key] = value; + }); + await request.post( url || logStream.url, { ping: "ok" }, { - headers, + headers: streamHeaders, // request timeout timeout: AUDIT_LOG_STREAM_TIMEOUT, // connection timeout @@ -133,16 +152,16 @@ export const auditLogStreamServiceFactory = ({ } ); - const encryptedToken = token ? infisicalSymmetricEncypt(token) : undefined; + const encryptedHeaders = headers ? infisicalSymmetricEncypt(JSON.stringify(headers)) : undefined; const updatedLogStream = await auditLogStreamDAL.updateById(id, { url, - ...(encryptedToken + ...(encryptedHeaders ? { - encryptedTokenCiphertext: encryptedToken.ciphertext, - encryptedTokenIV: encryptedToken.iv, - encryptedTokenTag: encryptedToken.tag, - encryptedTokenAlgorithm: encryptedToken.algorithm, - encryptedTokenKeyEncoding: encryptedToken.encoding + encryptedHeadersCiphertext: encryptedHeaders.ciphertext, + encryptedHeadersIV: encryptedHeaders.iv, + encryptedHeadersTag: encryptedHeaders.tag, + encryptedHeadersAlgorithm: encryptedHeaders.algorithm, + encryptedHeadersKeyEncoding: encryptedHeaders.encoding } : {}) }); @@ -171,17 +190,19 @@ export const auditLogStreamServiceFactory = ({ const { permission } = await permissionService.getOrgPermission(actor, actorId, orgId, actorAuthMethod, actorOrgId); ForbiddenError.from(permission).throwUnlessCan(OrgPermissionActions.Read, OrgPermissionSubjects.Settings); - const token = - logStream?.encryptedTokenCiphertext && logStream?.encryptedTokenIV && logStream?.encryptedTokenTag - ? infisicalSymmetricDecrypt({ - tag: logStream.encryptedTokenTag, - iv: logStream.encryptedTokenIV, - ciphertext: logStream.encryptedTokenCiphertext, - keyEncoding: logStream.encryptedTokenKeyEncoding as SecretKeyEncoding - }) + const headers = + logStream?.encryptedHeadersCiphertext && logStream?.encryptedHeadersIV && logStream?.encryptedHeadersTag + ? (JSON.parse( + infisicalSymmetricDecrypt({ + tag: logStream.encryptedHeadersTag, + iv: logStream.encryptedHeadersIV, + ciphertext: logStream.encryptedHeadersCiphertext, + keyEncoding: logStream.encryptedHeadersKeyEncoding as SecretKeyEncoding + }) + ) as LogStreamHeaders[]) : undefined; - return { ...logStream, token }; + return { ...logStream, headers }; }; const list = async ({ actor, actorId, actorOrgId, actorAuthMethod }: TListAuditLogStreamDTO) => { diff --git a/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts b/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts index ec8c14923..3c22251d7 100644 --- a/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts +++ b/backend/src/ee/services/audit-log-stream/audit-log-stream-types.ts @@ -1,14 +1,19 @@ import { TOrgPermission } from "@app/lib/types"; +export type LogStreamHeaders = { + key: string; + value: string; +}; + export type TCreateAuditLogStreamDTO = Omit & { url: string; - token?: string; + headers?: LogStreamHeaders[]; }; export type TUpdateAuditLogStreamDTO = Omit & { id: string; url?: string; - token?: string; + headers?: LogStreamHeaders[]; }; export type TDeleteAuditLogStreamDTO = Omit & { diff --git a/backend/src/ee/services/audit-log/audit-log-queue.ts b/backend/src/ee/services/audit-log/audit-log-queue.ts index a4d504d35..fa9a0a500 100644 --- a/backend/src/ee/services/audit-log/audit-log-queue.ts +++ b/backend/src/ee/services/audit-log/audit-log-queue.ts @@ -8,6 +8,7 @@ import { QueueJobs, QueueName, TQueueServiceFactory } from "@app/queue"; import { TProjectDALFactory } from "@app/services/project/project-dal"; import { TAuditLogStreamDALFactory } from "../audit-log-stream/audit-log-stream-dal"; +import { LogStreamHeaders } from "../audit-log-stream/audit-log-stream-types"; import { TLicenseServiceFactory } from "../license/license-service"; import { TAuditLogDALFactory } from "./audit-log-dal"; import { TCreateAuditLogDTO } from "./audit-log-types"; @@ -74,20 +75,31 @@ export const auditLogQueueServiceFactory = ({ const logStreams = orgId ? await auditLogStreamDAL.find({ orgId }) : []; await Promise.allSettled( logStreams.map( - async ({ url, encryptedTokenTag, encryptedTokenIV, encryptedTokenKeyEncoding, encryptedTokenCiphertext }) => { - const token = - encryptedTokenIV && encryptedTokenCiphertext && encryptedTokenTag - ? infisicalSymmetricDecrypt({ - keyEncoding: encryptedTokenKeyEncoding as SecretKeyEncoding, - iv: encryptedTokenIV, - tag: encryptedTokenTag, - ciphertext: encryptedTokenCiphertext - }) - : undefined; + async ({ + url, + encryptedHeadersTag, + encryptedHeadersIV, + encryptedHeadersKeyEncoding, + encryptedHeadersCiphertext + }) => { + const streamHeaders = + encryptedHeadersIV && encryptedHeadersCiphertext && encryptedHeadersTag + ? (JSON.parse( + infisicalSymmetricDecrypt({ + keyEncoding: encryptedHeadersKeyEncoding as SecretKeyEncoding, + iv: encryptedHeadersIV, + tag: encryptedHeadersTag, + ciphertext: encryptedHeadersCiphertext + }) + ) as LogStreamHeaders[]) + : []; const headers: RawAxiosRequestHeaders = { "Content-Type": "application/json" }; - if (token) headers.Authorization = `Bearer ${token}`; + if (headers.length) + streamHeaders.forEach(({ key, value }) => { + headers[key] = value; + }); return request.post(url, auditLog, { headers, diff --git a/backend/src/lib/api-docs/constants.ts b/backend/src/lib/api-docs/constants.ts index b4c0c2a5c..39728ba7b 100644 --- a/backend/src/lib/api-docs/constants.ts +++ b/backend/src/lib/api-docs/constants.ts @@ -618,12 +618,20 @@ export const INTEGRATION = { export const AUDIT_LOG_STREAMS = { CREATE: { url: "The HTTP URL to push logs to.", - token: "Authentication token for the external provider used for identification." + headers: { + desc: "The HTTP headers attached for the external prrovider requests.", + key: "The HTTP header key name.", + value: "The HTTP header value." + } }, UPDATE: { id: "The ID of the audit log stream to update.", url: "The HTTP URL to push logs to.", - token: "Authentication token for the external provider used for identification." + headers: { + desc: "The HTTP headers attached for the external prrovider requests.", + key: "The HTTP header key name.", + value: "The HTTP header value." + } }, DELETE: { id: "The ID of the audit log stream to delete." diff --git a/frontend/src/hooks/api/auditLogStreams/types.ts b/frontend/src/hooks/api/auditLogStreams/types.ts index 7e73ae301..8e21a3209 100644 --- a/frontend/src/hooks/api/auditLogStreams/types.ts +++ b/frontend/src/hooks/api/auditLogStreams/types.ts @@ -1,19 +1,24 @@ +export type LogStreamHeaders = { + key: string; + value: string; +}; + export type TAuditLogStream = { id: string; url: string; - token: string; + headers?: LogStreamHeaders[]; }; export type TCreateAuditLogStreamDTO = { url: string; - token?: string; + headers?: LogStreamHeaders[]; orgId: string; }; export type TUpdateAuditLogStreamDTO = { id: string; url?: string; - token?: string; + headers?: LogStreamHeaders[]; orgId: string; }; diff --git a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx index 66acea296..18bfa6340 100644 --- a/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx +++ b/frontend/src/views/Settings/OrgSettingsPage/components/AuditLogStreamTab/AuditLogStreamForm.tsx @@ -1,8 +1,10 @@ -import { Controller, useForm } from "react-hook-form"; +import { Controller, useFieldArray, useForm } from "react-hook-form"; +import { faPlus, faTrash } from "@fortawesome/free-solid-svg-icons"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { z } from "zod"; import { createNotification } from "@app/components/notifications"; -import { Button, FormControl, Input, Spinner } from "@app/components/v2"; +import { Button, FormControl, FormLabel, IconButton, Input, Spinner } from "@app/components/v2"; import { useOrganization } from "@app/context"; import { useCreateAuditLogStream, @@ -17,7 +19,13 @@ type Props = { const formSchema = z.object({ url: z.string().url().min(1), - token: z.string().optional() + headers: z + .object({ + key: z.string(), + value: z.string() + }) + .array() + .optional() }); type TForm = z.infer; @@ -33,18 +41,28 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { const { handleSubmit, control, + setValue, + getValues, formState: { isSubmitting } } = useForm({ - values: auditLogStream?.data + values: auditLogStream?.data, + defaultValues: { + headers: [{ key: "", value: "" }] + } }); - const handleAuditLogStreamEdit = async ({ token, url }: TForm) => { + const headerFields = useFieldArray({ + control, + name: "headers" + }); + + const handleAuditLogStreamEdit = async ({ headers, url }: TForm) => { if (!id) return; try { await updateAuditLogStream.mutateAsync({ id, orgId, - token, + headers, url }); createNotification({ @@ -61,16 +79,18 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { } }; - const handleFormSubmit = async ({ token, url }: TForm) => { + const handleFormSubmit = async ({ headers = [], url }: TForm) => { if (isSubmitting) return; + const sanitizedHeaders = headers.filter(({ key, value }) => Boolean(key) && Boolean(value)); + const streamHeaders = sanitizedHeaders.length ? sanitizedHeaders : undefined; if (isEdit) { - await handleAuditLogStreamEdit({ token, url }); + await handleAuditLogStreamEdit({ headers: streamHeaders, url }); return; } try { await createAuditLogStream.mutateAsync({ orgId, - token, + headers: streamHeaders, url }); createNotification({ @@ -96,32 +116,82 @@ export const AuditLogStreamForm = ({ id = "", onClose }: Props) => { } return ( -