Skip to content

Commit 7bf579f

Browse files
authored
fix: use higher entropy invite tokens (#2558)
* fix: use higher entropy invite tokens We currently use CUIDs for invite tokens, which are generated using a pattern and are not cryptographically secure. This PR switches to a higher entropy string generated with `nanoid`. * Dedupe the invite emails in the application
1 parent 69d52db commit 7bf579f

File tree

1 file changed

+18
-9
lines changed

1 file changed

+18
-9
lines changed

apps/webapp/app/models/member.server.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1-
import { prisma } from "~/db.server";
1+
import { type Prisma, prisma } from "~/db.server";
22
import { createEnvironment } from "./organization.server";
3+
import { customAlphabet } from "nanoid";
4+
5+
const tokenValueLength = 40;
6+
const tokenGenerator = customAlphabet("123456789abcdefghijkmnopqrstuvwxyz", tokenValueLength);
37

48
export async function getTeamMembersAndInvites({
59
userId,
@@ -95,14 +99,19 @@ export async function inviteMembers({
9599
throw new Error("User does not have access to this organization");
96100
}
97101

98-
const created = await prisma.orgMemberInvite.createMany({
99-
data: emails.map((email) => ({
100-
email,
101-
organizationId: org.id,
102-
inviterId: userId,
103-
role: "MEMBER",
104-
})),
105-
skipDuplicates: true,
102+
const invites = [...new Set(emails)].map(
103+
(email) =>
104+
({
105+
email,
106+
token: tokenGenerator(),
107+
organizationId: org.id,
108+
inviterId: userId,
109+
role: "MEMBER",
110+
} satisfies Prisma.OrgMemberInviteCreateManyInput)
111+
);
112+
113+
await prisma.orgMemberInvite.createMany({
114+
data: invites,
106115
});
107116

108117
return await prisma.orgMemberInvite.findMany({

0 commit comments

Comments
 (0)