diff --git a/apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx b/apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx
index 8429870b0..d04b3a998 100644
--- a/apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx
+++ b/apps/web/src/components/(dashboard)/avatar/avatar-with-recipient.tsx
@@ -6,6 +6,7 @@ import { useCopyToClipboard } from '@documenso/lib/client-only/hooks/use-copy-to
import { getRecipientType } from '@documenso/lib/client-only/recipient-type';
import { recipientAbbreviation } from '@documenso/lib/utils/recipient-formatter';
import type { Recipient } from '@documenso/prisma/client';
+import { cn } from '@documenso/ui/lib/utils';
import { useToast } from '@documenso/ui/primitives/use-toast';
import { StackAvatar } from './stack-avatar';
@@ -19,6 +20,10 @@ export function AvatarWithRecipient({ recipient }: AvatarWithRecipientProps) {
const { toast } = useToast();
const onRecipientClick = () => {
+ if (!recipient.token) {
+ return;
+ }
+
void copy(`${process.env.NEXT_PUBLIC_WEBAPP_URL}/sign/${recipient.token}`).then(() => {
toast({
title: 'Copied to clipboard',
@@ -28,19 +33,22 @@ export function AvatarWithRecipient({ recipient }: AvatarWithRecipientProps) {
};
return (
-
+
-
- {recipient.email}
-
+
+ {recipient.email}
);
}
diff --git a/packages/lib/server-only/document/find-documents.ts b/packages/lib/server-only/document/find-documents.ts
index 18600ebe6..def85f2d4 100644
--- a/packages/lib/server-only/document/find-documents.ts
+++ b/packages/lib/server-only/document/find-documents.ts
@@ -7,6 +7,7 @@ import { SigningStatus } from '@documenso/prisma/client';
import { ExtendedDocumentStatus } from '@documenso/prisma/types/extended-document-status';
import type { FindResultSet } from '../../types/find-result-set';
+import { maskRecipientTokensForDocument } from '../../utils/mask-recipient-tokens-for-document';
export type FindDocumentsOptions = {
userId: number;
@@ -173,8 +174,15 @@ export const findDocuments = async ({
}),
]);
+ const maskedData = data.map((document) =>
+ maskRecipientTokensForDocument({
+ document,
+ user,
+ }),
+ );
+
return {
- data,
+ data: maskedData,
count,
currentPage: Math.max(page, 1),
perPage,
diff --git a/packages/lib/server-only/document/update-document.ts b/packages/lib/server-only/document/update-document.ts
index 5ad686860..29ab2c998 100644
--- a/packages/lib/server-only/document/update-document.ts
+++ b/packages/lib/server-only/document/update-document.ts
@@ -5,14 +5,16 @@ import type { Prisma } from '@prisma/client';
import { prisma } from '@documenso/prisma';
export type UpdateDocumentOptions = {
- documentId: number;
data: Prisma.DocumentUpdateInput;
+ userId: number;
+ documentId: number;
};
-export const updateDocument = async ({ documentId, data }: UpdateDocumentOptions) => {
+export const updateDocument = async ({ documentId, userId, data }: UpdateDocumentOptions) => {
return await prisma.document.update({
where: {
id: documentId,
+ userId,
},
data: {
...data,
diff --git a/packages/lib/utils/mask-recipient-tokens-for-document.ts b/packages/lib/utils/mask-recipient-tokens-for-document.ts
new file mode 100644
index 000000000..ed6e2b13e
--- /dev/null
+++ b/packages/lib/utils/mask-recipient-tokens-for-document.ts
@@ -0,0 +1,38 @@
+import type { User } from '@documenso/prisma/client';
+import type { DocumentWithRecipients } from '@documenso/prisma/types/document-with-recipient';
+
+export type MaskRecipientTokensForDocumentOptions
= {
+ document: T;
+ user?: User;
+ token?: string;
+};
+
+export const maskRecipientTokensForDocument = ({
+ document,
+ user,
+ token,
+}: MaskRecipientTokensForDocumentOptions) => {
+ const maskedRecipients = document.Recipient.map((recipient) => {
+ if (document.userId === user?.id) {
+ return recipient;
+ }
+
+ if (recipient.email === user?.email) {
+ return recipient;
+ }
+
+ if (recipient.token === token) {
+ return recipient;
+ }
+
+ return {
+ ...recipient,
+ token: '',
+ };
+ });
+
+ return {
+ ...document,
+ Recipient: maskedRecipients,
+ };
+};
diff --git a/packages/prisma/seed/initial-seed.ts b/packages/prisma/seed/initial-seed.ts
index b01c2d434..6409c5bd9 100644
--- a/packages/prisma/seed/initial-seed.ts
+++ b/packages/prisma/seed/initial-seed.ts
@@ -18,6 +18,7 @@ export const seedDatabase = async () => {
create: {
name: 'Example User',
email: 'example@documenso.com',
+ emailVerified: new Date(),
password: hashSync('password'),
roles: [Role.USER],
},
@@ -31,6 +32,7 @@ export const seedDatabase = async () => {
create: {
name: 'Admin User',
email: 'admin@documenso.com',
+ emailVerified: new Date(),
password: hashSync('password'),
roles: [Role.USER, Role.ADMIN],
},