Skip to content

Commit 69cee48

Browse files
authored
Merge pull request #604 from trycompai/lewis/comp-trust-portal-improvements
[dev] [carhartlewis] lewis/comp-trust-portal-improvements
2 parents 237af47 + 5ba7ba4 commit 69cee48

File tree

24 files changed

+895
-149
lines changed

24 files changed

+895
-149
lines changed

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/check-dns-record.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,8 @@ export const checkDnsRecordAction = authActionClient
160160
});
161161
});
162162

163-
revalidatePath("/settings/trust-portal");
164-
revalidateTag(`organization_${ctx.session.activeOrganizationId}`);
163+
revalidatePath(`/${activeOrgId}/settings/trust-portal`);
164+
revalidateTag(`organization_${activeOrgId}`);
165165

166166
return {
167167
success: true,

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/custom-domain.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,32 @@ export const customDomainAction = authActionClient
2929
}
3030

3131
try {
32+
const currentDomain = await db.trust.findUnique({
33+
where: { organizationId: activeOrganizationId },
34+
});
35+
36+
// Always set domainVerified to false when domain changes
37+
const domainVerified =
38+
currentDomain?.domain === domain
39+
? currentDomain.domainVerified
40+
: false;
41+
3242
await db.trust.upsert({
3343
where: { organizationId: activeOrganizationId },
34-
update: { domain },
35-
create: { organizationId: activeOrganizationId, domain },
44+
update: { domain, domainVerified },
45+
create: {
46+
organizationId: activeOrganizationId,
47+
domain,
48+
domainVerified: false,
49+
},
3650
});
3751

38-
revalidatePath("/settings/trust-portal");
52+
revalidatePath(`/${activeOrganizationId}/settings/trust-portal`);
3953
revalidateTag(`organization_${activeOrganizationId}`);
4054

4155
return {
4256
success: true,
57+
needsVerification: !domainVerified,
4358
};
4459
} catch (error) {
4560
console.error(error);

apps/app/src/app/[locale]/(app)/(dashboard)/[orgId]/settings/trust-portal/actions/trust-portal-switch.ts

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { z } from "zod";
99

1010
const trustPortalSwitchSchema = z.object({
1111
enabled: z.boolean(),
12+
contactEmail: z.string().email().optional(),
1213
});
1314

1415
export const trustPortalSwitchAction = authActionClient
@@ -21,7 +22,7 @@ export const trustPortalSwitchAction = authActionClient
2122
},
2223
})
2324
.action(async ({ parsedInput, ctx }) => {
24-
const { enabled } = parsedInput;
25+
const { enabled, contactEmail } = parsedInput;
2526
const { activeOrganizationId } = ctx.session;
2627

2728
if (!activeOrganizationId) {
@@ -31,14 +32,18 @@ export const trustPortalSwitchAction = authActionClient
3132
try {
3233
await db.trust.upsert({
3334
where: { organizationId: activeOrganizationId },
34-
update: { status: enabled ? "published" : "draft" },
35+
update: {
36+
status: enabled ? "published" : "draft",
37+
contactEmail: contactEmail ?? null,
38+
},
3539
create: {
3640
organizationId: activeOrganizationId,
3741
status: enabled ? "published" : "draft",
42+
contactEmail: contactEmail ?? null,
3843
},
3944
});
4045

41-
revalidatePath("/settings/trust-portal");
46+
revalidatePath(`/${activeOrganizationId}/settings/trust-portal`);
4247
revalidateTag(`organization_${activeOrganizationId}`);
4348

4449
return {
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
"use server";
2+
3+
import { auth } from "@/utils/auth";
4+
import { headers } from "next/headers";
5+
import { db } from "@comp/db";
6+
import { revalidatePath, revalidateTag } from "next/cache";
7+
8+
interface UpdateTrustPortalFrameworksParams {
9+
orgId: string;
10+
soc2?: boolean;
11+
iso27001?: boolean;
12+
gdpr?: boolean;
13+
soc2Status?: "started" | "in_progress" | "compliant";
14+
iso27001Status?: "started" | "in_progress" | "compliant";
15+
gdprStatus?: "started" | "in_progress" | "compliant";
16+
}
17+
18+
export async function updateTrustPortalFrameworks({
19+
orgId,
20+
soc2,
21+
iso27001,
22+
gdpr,
23+
soc2Status,
24+
iso27001Status,
25+
gdprStatus,
26+
}: UpdateTrustPortalFrameworksParams) {
27+
const session = await auth.api.getSession({
28+
headers: await headers(),
29+
});
30+
31+
if (!session?.session.activeOrganizationId) {
32+
throw new Error("Not authenticated");
33+
}
34+
35+
const trustPortal = await db.trust.findUnique({
36+
where: {
37+
organizationId: orgId,
38+
},
39+
});
40+
41+
if (!trustPortal) {
42+
throw new Error("Trust portal not found");
43+
}
44+
45+
await db.trust.update({
46+
where: {
47+
organizationId: orgId,
48+
},
49+
data: {
50+
soc2: soc2 ?? trustPortal.soc2,
51+
iso27001: iso27001 ?? trustPortal.iso27001,
52+
gdpr: gdpr ?? trustPortal.gdpr,
53+
soc2_status: soc2Status ?? trustPortal.soc2_status,
54+
iso27001_status: iso27001Status ?? trustPortal.iso27001_status,
55+
gdpr_status: gdprStatus ?? trustPortal.gdpr_status,
56+
},
57+
});
58+
59+
revalidatePath(`/${orgId}/settings/trust-portal`);
60+
revalidateTag(`organization_${orgId}`);
61+
}

0 commit comments

Comments
 (0)