diff --git a/apps/web/src/pages/api/auth/[...nextauth].ts b/apps/web/src/pages/api/auth/[...nextauth].ts index 44c509c62..811ddbda0 100644 --- a/apps/web/src/pages/api/auth/[...nextauth].ts +++ b/apps/web/src/pages/api/auth/[...nextauth].ts @@ -6,6 +6,7 @@ import { getStripeCustomerByUser } from '@documenso/ee/server-only/stripe/get-cu import { IS_BILLING_ENABLED } from '@documenso/lib/constants/app'; import { NEXT_AUTH_OPTIONS } from '@documenso/lib/next-auth/auth-options'; import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata'; +import { slugify } from '@documenso/lib/utils/slugify'; import { prisma } from '@documenso/prisma'; import { UserSecurityAuditLogType } from '@documenso/prisma/client'; @@ -77,6 +78,24 @@ export default async function auth(req: NextApiRequest, res: NextApiResponse) { }); } + // auto set public profile name + if (account.provider === 'oidc' && user.name && 'url' in user && !user.url) { + let counter = 1; + let url = slugify(user.name); + + while (await prisma.user.findFirst({ where: { url } })) { + url = `${slugify(user.name)}-${counter}`; + counter++; + } + + await prisma.user.update({ + where: { id: userId }, + data: { + url, + }, + }); + } + await prisma.userSecurityAuditLog.create({ data: { userId, diff --git a/packages/lib/utils/slugify.ts b/packages/lib/utils/slugify.ts new file mode 100644 index 000000000..e8f03f3ce --- /dev/null +++ b/packages/lib/utils/slugify.ts @@ -0,0 +1,3 @@ +export * from '@sindresorhus/slugify'; + +export { default as slugify } from '@sindresorhus/slugify';