mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-09-22 11:44:31 +00:00
improvement: address feedback
This commit is contained in:
2
backend/src/@types/fastify.d.ts
vendored
2
backend/src/@types/fastify.d.ts
vendored
@@ -71,6 +71,7 @@ import { TIdentityTokenAuthServiceFactory } from "@app/services/identity-token-a
|
||||
import { TIdentityUaServiceFactory } from "@app/services/identity-ua/identity-ua-service";
|
||||
import { TIntegrationServiceFactory } from "@app/services/integration/integration-service";
|
||||
import { TIntegrationAuthServiceFactory } from "@app/services/integration-auth/integration-auth-service";
|
||||
import { TMicrosoftTeamsServiceFactory } from "@app/services/microsoft-teams/microsoft-teams-service";
|
||||
import { TOrgRoleServiceFactory } from "@app/services/org/org-role-service";
|
||||
import { TOrgServiceFactory } from "@app/services/org/org-service";
|
||||
import { TOrgAdminServiceFactory } from "@app/services/org-admin/org-admin-service";
|
||||
@@ -100,7 +101,6 @@ import { TUserServiceFactory } from "@app/services/user/user-service";
|
||||
import { TUserEngagementServiceFactory } from "@app/services/user-engagement/user-engagement-service";
|
||||
import { TWebhookServiceFactory } from "@app/services/webhook/webhook-service";
|
||||
import { TWorkflowIntegrationServiceFactory } from "@app/services/workflow-integration/workflow-integration-service";
|
||||
import { TMicrosoftTeamsServiceFactory } from "@app/services/microsoft-teams/microsoft-teams-service";
|
||||
|
||||
declare module "@fastify/request-context" {
|
||||
interface RequestContextData {
|
||||
|
||||
@@ -26,6 +26,7 @@ import { registerIdentityUaRouter } from "./identity-universal-auth-router";
|
||||
import { registerIntegrationAuthRouter } from "./integration-auth-router";
|
||||
import { registerIntegrationRouter } from "./integration-router";
|
||||
import { registerInviteOrgRouter } from "./invite-org-router";
|
||||
import { registerMicrosoftTeamsRouter } from "./microsoft-teams-router";
|
||||
import { registerOrgAdminRouter } from "./org-admin-router";
|
||||
import { registerOrgRouter } from "./organization-router";
|
||||
import { registerPasswordRouter } from "./password-router";
|
||||
@@ -47,7 +48,6 @@ import { registerUserEngagementRouter } from "./user-engagement-router";
|
||||
import { registerUserRouter } from "./user-router";
|
||||
import { registerWebhookRouter } from "./webhook-router";
|
||||
import { registerWorkflowIntegrationRouter } from "./workflow-integration-router";
|
||||
import { registerMicrosoftTeamsRouter } from "./microsoft-teams-router";
|
||||
|
||||
export const registerV1Routes = async (server: FastifyZodProvider) => {
|
||||
await server.register(registerSsoRouter, { prefix: "/sso" });
|
||||
|
||||
@@ -15,7 +15,7 @@ export const EmailMfaTemplate = ({ code, siteUrl, isCloud }: EmailMfaTemplatePro
|
||||
<strong>MFA required</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[8px] text-center pb-[8px] text-[14px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text>Enter the MFA code below in the browser where you started sign-in.</Text>
|
||||
<Text>Enter the MFA code shown below in the browser where you started sign-in.</Text>
|
||||
<Text className="text-[24px] mt-[16px]">
|
||||
<strong>{code}</strong>
|
||||
</Text>
|
||||
@@ -26,7 +26,7 @@ export const EmailMfaTemplate = ({ code, siteUrl, isCloud }: EmailMfaTemplatePro
|
||||
{isCloud ? (
|
||||
<>
|
||||
Contact us at{" "}
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>{" "}
|
||||
immediately
|
||||
|
||||
@@ -12,14 +12,14 @@ export const EmailVerificationTemplate = ({ code, siteUrl, isCloud }: EmailVerif
|
||||
return (
|
||||
<BaseEmailWrapper
|
||||
title="Confirm Your Email Address"
|
||||
preview="Verify your email address to get continue with Infisical."
|
||||
preview="Verify your email address to continue with Infisical."
|
||||
siteUrl={siteUrl}
|
||||
>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
<strong>Confirm your email address</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[8px] text-center pb-[8px] text-[14px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text>Enter the confirmation code below in the browser window requiring confirmation.</Text>
|
||||
<Text>Enter the confirmation code shown below in the browser window requiring confirmation.</Text>
|
||||
<Text className="text-[24px] mt-[16px]">
|
||||
<strong>{code}</strong>
|
||||
</Text>
|
||||
@@ -30,7 +30,7 @@ export const EmailVerificationTemplate = ({ code, siteUrl, isCloud }: EmailVerif
|
||||
{isCloud ? (
|
||||
<>
|
||||
Email us at{" "}
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>
|
||||
</>
|
||||
|
||||
@@ -21,7 +21,7 @@ export const ExternalImportFailedTemplate = ({ error, siteUrl, provider }: Exter
|
||||
</Text>
|
||||
<Text className="text-black text-[14px] leading-[24px]">
|
||||
If your issue persists, you can contact the Infisical team at{" "}
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>
|
||||
.
|
||||
|
||||
@@ -26,5 +26,6 @@ export const ExternalImportStartedTemplate = ({ siteUrl, provider }: ExternalImp
|
||||
export default ExternalImportStartedTemplate;
|
||||
|
||||
ExternalImportStartedTemplate.PreviewProps = {
|
||||
provider: "EnvKey"
|
||||
provider: "EnvKey",
|
||||
siteUrl: "https://infisical.com"
|
||||
} as ExternalImportStartedTemplateProps;
|
||||
|
||||
@@ -24,7 +24,7 @@ export const IntegrationSyncFailedTemplate = ({
|
||||
return (
|
||||
<BaseEmailWrapper
|
||||
title="Integration Sync Failed"
|
||||
preview="An integration sync has error has occurred."
|
||||
preview="An integration sync error has occurred."
|
||||
siteUrl={siteUrl}
|
||||
>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
|
||||
@@ -42,7 +42,7 @@ export const NewDeviceLoginTemplate = ({
|
||||
<Text className="mb-[0px]">
|
||||
If you believe that this login is suspicious, please contact{" "}
|
||||
{isCloud ? (
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>
|
||||
) : (
|
||||
|
||||
@@ -24,7 +24,7 @@ export const OrgAdminBreakglassAccessTemplate = ({
|
||||
siteUrl={siteUrl}
|
||||
>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
The organization admin <strong>{email}</strong> has bypassed enforced SSO login.
|
||||
The organization admin <strong>{email}</strong> has bypassed enforced SSO login
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[24px] pb-[8px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<strong className="text-[14px]">Timestamp</strong>
|
||||
@@ -53,5 +53,5 @@ OrgAdminBreakglassAccessTemplate.PreviewProps = {
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3.1 Safari/605.1.15",
|
||||
timestamp: "Tue Apr 29 2025 23:03:27 GMT+0000 (Coordinated Universal Time)",
|
||||
siteUrl: "https://infisical.com",
|
||||
email: "august@infiscal.com"
|
||||
email: "august@infisical.com"
|
||||
} as OrgAdminBreakglassAccessTemplateProps;
|
||||
|
||||
@@ -36,5 +36,6 @@ export default OrgAdminProjectGrantAccessTemplate;
|
||||
|
||||
OrgAdminProjectGrantAccessTemplate.PreviewProps = {
|
||||
email: "kevin@infisical.com",
|
||||
projectName: "Example Project"
|
||||
projectName: "Example Project",
|
||||
siteUrl: "https://infisical.com"
|
||||
} as OrgAdminProjectGrantAccessTemplateProps;
|
||||
|
||||
@@ -47,8 +47,8 @@ export const OrganizationInvitationTemplate = ({
|
||||
</Section>
|
||||
<Section className="text-center mt-[28px]">
|
||||
<Button
|
||||
href={`${callback_url}?token=${token}${metadata ? `&metadata=${metadata}` : ""}&to=${email}&organization_id=${organizationId}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
href={`${callback_url}?token=${token}${metadata ? `&metadata=${metadata}` : ""}&to=${encodeURIComponent(email)}&organization_id=${organizationId}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
Accept Invite
|
||||
</Button>
|
||||
@@ -71,5 +71,7 @@ OrganizationInvitationTemplate.PreviewProps = {
|
||||
inviterUsername: "jane@infisical.com",
|
||||
email: "john@infisical.com",
|
||||
siteUrl: "https://infisical.com",
|
||||
callback_url: "https://app.infisical.com"
|
||||
callback_url: "https://app.infisical.com",
|
||||
token: "preview-token",
|
||||
organizationId: "1ae1c2c7-8068-461c-b15e-421737868a6a"
|
||||
} as OrganizationInvitationTemplateProps;
|
||||
|
||||
@@ -27,7 +27,7 @@ export const PasswordResetTemplate = ({ email, isCloud, siteUrl, callback_url, t
|
||||
{isCloud ? (
|
||||
<>
|
||||
us immediately at{" "}
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>
|
||||
</>
|
||||
@@ -39,8 +39,8 @@ export const PasswordResetTemplate = ({ email, isCloud, siteUrl, callback_url, t
|
||||
</Section>
|
||||
<Section className="text-center mt-[28px]">
|
||||
<Button
|
||||
href={`${callback_url}?token=${token}&to=${email}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
href={`${callback_url}?token=${token}&to=${encodeURIComponent(email)}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
Reset Password
|
||||
</Button>
|
||||
@@ -54,5 +54,7 @@ export default PasswordResetTemplate;
|
||||
PasswordResetTemplate.PreviewProps = {
|
||||
email: "kevin@infisical.com",
|
||||
callback_url: "https://app.infisical.com",
|
||||
isCloud: true
|
||||
isCloud: true,
|
||||
token: "preview-token",
|
||||
siteUrl: "https://infisical.com"
|
||||
} as PasswordResetTemplateProps;
|
||||
|
||||
@@ -26,7 +26,7 @@ export const PasswordSetupTemplate = ({ email, isCloud, siteUrl, callback_url, t
|
||||
{isCloud ? (
|
||||
<>
|
||||
us immediately at{" "}
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>
|
||||
</>
|
||||
@@ -38,8 +38,8 @@ export const PasswordSetupTemplate = ({ email, isCloud, siteUrl, callback_url, t
|
||||
</Section>
|
||||
<Section className="text-center mt-[28px]">
|
||||
<Button
|
||||
href={`${callback_url}?token=${token}&to=${email}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
href={`${callback_url}?token=${token}&to=${encodeURIComponent(email)}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
Set Up Password
|
||||
</Button>
|
||||
@@ -53,5 +53,7 @@ export default PasswordSetupTemplate;
|
||||
PasswordSetupTemplate.PreviewProps = {
|
||||
email: "casey@infisical.com",
|
||||
callback_url: "https://app.infisical.com",
|
||||
isCloud: true
|
||||
isCloud: true,
|
||||
siteUrl: "https://infisical.com",
|
||||
token: "preview-token"
|
||||
} as PasswordSetupTemplateProps;
|
||||
|
||||
@@ -45,10 +45,10 @@ export const PkiExpirationAlertTemplate = ({
|
||||
</Fragment>
|
||||
))}
|
||||
<Hr />
|
||||
<Text className="text-[14px] leading-[24px]">
|
||||
<Text className="text-[14px] leading-[24px]">
|
||||
Please take the necessary actions to renew these items before they expire.
|
||||
</Text>
|
||||
<Text className="text-[14px] leading-[24px]">
|
||||
<Text className="text-[14px] leading-[24px]">
|
||||
For more details, please log in to your Infisical account and check your PKI management section.
|
||||
</Text>
|
||||
</Section>
|
||||
@@ -61,8 +61,9 @@ export default PkiExpirationAlertTemplate;
|
||||
PkiExpirationAlertTemplate.PreviewProps = {
|
||||
alertBeforeDays: 5,
|
||||
items: [
|
||||
{ type: "CA", friendlyName: "Example CA", serialNumber: "1234567890", expiryDate: "2022-01-01" },
|
||||
{ type: "Certificate", friendlyName: "Example Certificate", serialNumber: "1234567890", expiryDate: "2022-01-01" }
|
||||
{ type: "CA", friendlyName: "Example CA", serialNumber: "1234567890", expiryDate: "2032-01-01" },
|
||||
{ type: "Certificate", friendlyName: "Example Certificate", serialNumber: "2345678901", expiryDate: "2032-01-01" }
|
||||
],
|
||||
alertName: "My PKI Alert"
|
||||
alertName: "My PKI Alert",
|
||||
siteUrl: "https://infisical.com"
|
||||
} as PkiExpirationAlertTemplateProps;
|
||||
|
||||
@@ -8,7 +8,6 @@ interface ProjectAccessRequestTemplateProps extends Omit<BaseEmailWrapperProps,
|
||||
requesterName: string;
|
||||
requesterEmail: string;
|
||||
orgName: string;
|
||||
environment: string;
|
||||
note: string;
|
||||
callback_url: string;
|
||||
}
|
||||
@@ -64,5 +63,6 @@ ProjectAccessRequestTemplate.PreviewProps = {
|
||||
orgName: "Example Org",
|
||||
siteUrl: "https://infisical.com",
|
||||
projectName: "Example Project",
|
||||
note: "I need access to the project for the new initiative for HR."
|
||||
note: "I need access to the project for the new initiative for HR.",
|
||||
callback_url: "https://infisical.com"
|
||||
} as ProjectAccessRequestTemplateProps;
|
||||
|
||||
@@ -16,7 +16,7 @@ export const ProjectInvitationTemplate = ({ callback_url, workspaceName, siteUrl
|
||||
siteUrl={siteUrl}
|
||||
>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
You've been invited to join a new project on Infisical
|
||||
You've been invited to join a project on Infisical
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[12px] pb-[8px] border text-center border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-black text-[14px] leading-[24px]">
|
||||
@@ -26,7 +26,7 @@ export const ProjectInvitationTemplate = ({ callback_url, workspaceName, siteUrl
|
||||
<Section className="text-center mt-[28px]">
|
||||
<Button
|
||||
href={callback_url}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
Join Project
|
||||
</Button>
|
||||
|
||||
@@ -26,13 +26,13 @@ export const ScimUserProvisionedTemplate = ({
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[12px] pb-[8px] border text-center border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-black text-[14px] leading-[24px]">
|
||||
You've been invited you to collaborate on <strong>{organizationName}</strong>.
|
||||
You've been invited to collaborate on <strong>{organizationName}</strong>.
|
||||
</Text>
|
||||
</Section>
|
||||
<Section className="text-center mt-[28px]">
|
||||
<Button
|
||||
href={callback_url}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
Accept Invite
|
||||
</Button>
|
||||
|
||||
@@ -25,10 +25,10 @@ export const SecretApprovalRequestNeedsReviewTemplate = ({
|
||||
siteUrl={siteUrl}
|
||||
>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
A secret approval request for the project <strong>{projectName}</strong> requires review.
|
||||
A secret approval request for the project <strong>{projectName}</strong> requires review
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[12px] pb-[8px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-14px">Hello {firstName},</Text>
|
||||
<Text className="text-[14px]">Hello {firstName},</Text>
|
||||
<Text className="text-black text-[14px] leading-[24px]">
|
||||
You have a new secret change request pending your review for the project <strong>{projectName}</strong> in the
|
||||
organization <strong>{organizationName}</strong>.
|
||||
|
||||
@@ -62,8 +62,8 @@ export const SecretLeakIncidentTemplate = ({
|
||||
</Section>
|
||||
<Section className="text-center mt-[28px]">
|
||||
<Button
|
||||
href={`${siteUrl}/secret-scanning`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
href={`${siteUrl}/organization/secret-scanning`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
View Leaked Secrets
|
||||
</Button>
|
||||
|
||||
@@ -18,7 +18,7 @@ export const SecretReminderTemplate = ({
|
||||
return (
|
||||
<BaseEmailWrapper title="Secret Reminder" preview="You have a new secret reminder." siteUrl={siteUrl}>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
Secret Reminder
|
||||
<strong>Secret Reminder</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[8px] pb-[8px] text-[14px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-[14px]">
|
||||
|
||||
@@ -3,7 +3,7 @@ import React from "react";
|
||||
|
||||
import { BaseEmailWrapper, BaseEmailWrapperProps } from "./BaseEmailWrapper";
|
||||
|
||||
interface ShareSecretTemplateProps extends Omit<BaseEmailWrapperProps, "title" | "preview" | "children"> {
|
||||
interface SecretRequestCompletedTemplateProps extends Omit<BaseEmailWrapperProps, "title" | "preview" | "children"> {
|
||||
name?: string;
|
||||
respondentUsername: string;
|
||||
secretRequestUrl: string;
|
||||
@@ -14,14 +14,14 @@ export const SecretRequestCompletedTemplate = ({
|
||||
siteUrl,
|
||||
respondentUsername,
|
||||
secretRequestUrl
|
||||
}: ShareSecretTemplateProps) => {
|
||||
}: SecretRequestCompletedTemplateProps) => {
|
||||
return (
|
||||
<BaseEmailWrapper title="Shared Secret" preview="A secret has been shared with you." siteUrl={siteUrl}>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
<strong>A secret has been shared with you</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[12px] text-center pb-[8px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-14px">
|
||||
<Text className="text-[14px]">
|
||||
{respondentUsername ? <strong>{respondentUsername}</strong> : "Someone"} shared a secret{" "}
|
||||
{name && (
|
||||
<>
|
||||
@@ -50,4 +50,4 @@ SecretRequestCompletedTemplate.PreviewProps = {
|
||||
siteUrl: "https://infisical.com",
|
||||
secretRequestUrl: "https://infisical.com",
|
||||
name: "API_TOKEN"
|
||||
} as ShareSecretTemplateProps;
|
||||
} as SecretRequestCompletedTemplateProps;
|
||||
|
||||
@@ -26,7 +26,7 @@ export const SecretRotationFailedTemplate = ({
|
||||
return (
|
||||
<BaseEmailWrapper title="Secret Rotation Failed" preview="A secret rotation failed." siteUrl={siteUrl}>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
Your <strong>{rotationType}</strong> Rotation <strong>{rotationName}</strong> failed to rotate
|
||||
Your <strong>{rotationType}</strong> rotation <strong>{rotationName}</strong> failed to rotate
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[26px] pb-[4px] text-[14px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<strong>Name</strong>
|
||||
@@ -47,7 +47,7 @@ export const SecretRotationFailedTemplate = ({
|
||||
href={`${rotationUrl}?search=${rotationName}&secretPath=${secretPath}`}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
View in Infiscal
|
||||
View in Infisical
|
||||
</Button>
|
||||
</Section>
|
||||
</BaseEmailWrapper>
|
||||
|
||||
@@ -26,7 +26,7 @@ export const SecretSyncFailedTemplate = ({
|
||||
return (
|
||||
<BaseEmailWrapper title="Secret Sync Failed" preview="A secret sync failed." siteUrl={siteUrl}>
|
||||
<Heading className="text-black text-[18px] leading-[28px] text-center font-normal p-0 mx-0">
|
||||
Your <strong>{syncDestination}</strong> Sync <strong>{syncName}</strong> failed to sync
|
||||
Your <strong>{syncDestination}</strong> sync <strong>{syncName}</strong> failed to complete
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[26px] pb-[4px] text-[14px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<strong>Name</strong>
|
||||
@@ -59,7 +59,7 @@ export const SecretSyncFailedTemplate = ({
|
||||
href={syncUrl}
|
||||
className="rounded-md p-3 px-[28px] my-[8px] text-center text-[16px] bg-[#EBF852] border-solid border border-[#d1e309] text-black font-medium"
|
||||
>
|
||||
View in Infiscal
|
||||
View in Infisical
|
||||
</Button>
|
||||
</Section>
|
||||
</BaseEmailWrapper>
|
||||
|
||||
@@ -25,7 +25,7 @@ export const ServiceTokenExpiryNoticeTemplate = ({
|
||||
<strong>Service token expiry notice</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[12px] pb-[8px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-14px">
|
||||
<Text className="text-[14px]">
|
||||
Your service token <strong>{tokenName}</strong> for the project <strong>{projectName}</strong> will expire
|
||||
within 24 hours.
|
||||
</Text>
|
||||
|
||||
@@ -19,7 +19,7 @@ export const SignupEmailVerificationTemplate = ({ code, siteUrl, isCloud }: Sign
|
||||
<strong>Confirm your email address</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[8px] text-center pb-[8px] text-[14px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text>Enter the confirmation code below in the browser where you started sign-up.</Text>
|
||||
<Text>Enter the confirmation code shown below in the browser where you started sign-up.</Text>
|
||||
<Text className="text-[24px] mt-[16px]">
|
||||
<strong>{code}</strong>
|
||||
</Text>
|
||||
@@ -30,7 +30,7 @@ export const SignupEmailVerificationTemplate = ({ code, siteUrl, isCloud }: Sign
|
||||
{isCloud ? (
|
||||
<>
|
||||
Email us at{" "}
|
||||
<Link href={`mailto:support@infisical.com`} className="text-slate-700 no-underline">
|
||||
<Link href="mailto:support@infisical.com" className="text-slate-700 no-underline">
|
||||
support@infisical.com
|
||||
</Link>
|
||||
</>
|
||||
|
||||
@@ -19,7 +19,7 @@ export const UnlockAccountTemplate = ({ token, siteUrl, callback_url }: UnlockAc
|
||||
<strong>Unlock your Infisical account</strong>
|
||||
</Heading>
|
||||
<Section className="px-[24px] mt-[36px] pt-[12px] pb-[8px] border border-solid border-gray-200 rounded-md bg-gray-50">
|
||||
<Text className="text-14px">
|
||||
<Text className="text-[14px]">
|
||||
Your account has been temporarily locked due to multiple failed login attempts.
|
||||
</Text>
|
||||
<Text>If these attempts were not made by you, reset your password immediately.</Text>
|
||||
@@ -41,6 +41,5 @@ export default UnlockAccountTemplate;
|
||||
UnlockAccountTemplate.PreviewProps = {
|
||||
callback_url: "Example Project",
|
||||
siteUrl: "https://infisical.com",
|
||||
url: "https://infisical.com",
|
||||
token: "Example Token"
|
||||
token: "preview-token"
|
||||
} as UnlockAccountTemplateProps;
|
||||
|
||||
@@ -9,7 +9,6 @@ export * from "./NewDeviceLoginTemplate";
|
||||
export * from "./OrgAdminBreakglassAccessTemplate";
|
||||
export * from "./OrgAdminProjectGrantAccessTemplate";
|
||||
export * from "./OrganizationInvitationTemplate";
|
||||
export * from "./OrganizationInvitationTemplate";
|
||||
export * from "./PasswordResetTemplate";
|
||||
export * from "./PasswordSetupTemplate";
|
||||
export * from "./PkiExpirationAlertTemplate";
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { render } from "@react-email/components";
|
||||
import handlebars from "handlebars";
|
||||
import { createTransport } from "nodemailer";
|
||||
import SMTPTransport from "nodemailer/lib/smtp-transport";
|
||||
import React from "react";
|
||||
@@ -80,7 +79,7 @@ export enum SmtpTemplates {
|
||||
export enum SmtpHost {
|
||||
Sendgrid = "smtp.sendgrid.net",
|
||||
Mailgun = "smtp.mailgun.org",
|
||||
SocketLabs = "smtp.sockerlabs.com",
|
||||
SocketLabs = "smtp.socketlabs.com",
|
||||
Zohomail = "smtp.zoho.com",
|
||||
Gmail = "smtp.gmail.com",
|
||||
Office365 = "smtp.office365.com"
|
||||
@@ -121,13 +120,6 @@ export const smtpServiceFactory = (cfg: TSmtpConfig) => {
|
||||
const smtp = createTransport(cfg);
|
||||
const isSmtpOn = Boolean(cfg.host);
|
||||
|
||||
handlebars.registerHelper("emailFooter", () => {
|
||||
const { SITE_URL } = getConfig();
|
||||
return new handlebars.SafeString(
|
||||
`<p style="font-size: 12px;">Email sent via Infisical at <a href="${SITE_URL}">${SITE_URL}</a></p>`
|
||||
);
|
||||
});
|
||||
|
||||
const sendMail = async ({ substitutions, recipients, template, subjectLine }: TSmtpSendMail) => {
|
||||
const appCfg = getConfig();
|
||||
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<title>Import failed</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h2>An import from {{provider}} to Infisical has failed</h2>
|
||||
<p>An import from
|
||||
{{provider}}
|
||||
to Infisical has failed due to unforeseen circumstances. Please re-try your import, and if the issue persists, you
|
||||
can contact the Infisical team at team@infisical.com.
|
||||
</p>
|
||||
|
||||
<p>Error: {{error}}</p>
|
||||
|
||||
{{emailFooter}}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,19 +0,0 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<title>Import in progress</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h2>An import from {{provider}} to Infisical is in progress</h2>
|
||||
<p>An import from
|
||||
{{provider}}
|
||||
to Infisical is in progress. The import process may take up to 30 minutes, and you will receive once the import
|
||||
has finished or if it fails.</p>
|
||||
|
||||
{{emailFooter}}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,16 +0,0 @@
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge" />
|
||||
<title>Import successful</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h2>An import from {{provider}} to Infisical was successful</h2>
|
||||
<p>An import from {{provider}} was successful. Your data is now available in Infisical.</p>
|
||||
|
||||
{{emailFooter}}
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -26,7 +26,7 @@
|
||||
"paths": {
|
||||
"@app/*": ["./src/*"]
|
||||
},
|
||||
"jsx": "react"
|
||||
"jsx": "react-jsx"
|
||||
},
|
||||
"include": ["src/**/*", "scripts/**/*", "e2e-test/**/*", "./.eslintrc.js", "./tsup.config.js"],
|
||||
"exclude": ["node_modules"]
|
||||
|
||||
Reference in New Issue
Block a user