2
0

🐛 Fix legacy publicId format validation

This commit is contained in:
Baptiste Arnaud
2023-08-22 11:43:35 +02:00
parent 83352d77f5
commit fe54888350
4 changed files with 20 additions and 8 deletions

View File

@ -58,8 +58,7 @@ export const SharePage = () => {
if (!isCorrectlyFormatted) { if (!isCorrectlyFormatted) {
showToast({ showToast({
description: description: 'Can only contain lowercase letters, numbers and dashes.',
'Should contain only contain letters, numbers. Words can be separated by dashes.',
}) })
return false return false
} }

View File

@ -139,7 +139,12 @@ export const updateTypebot = authenticatedProcedure
typebot.resultsTablePreferences === null typebot.resultsTablePreferences === null
? Prisma.DbNull ? Prisma.DbNull
: typebot.resultsTablePreferences, : typebot.resultsTablePreferences,
publicId: typebot.publicId === null ? null : typebot.publicId, publicId:
typebot.publicId === null
? null
: typebot.publicId && isPublicIdValid(typebot.publicId)
? typebot.publicId
: undefined,
customDomain: customDomain:
typebot.customDomain === null ? null : typebot.customDomain, typebot.customDomain === null ? null : typebot.customDomain,
isClosed: typebot.isClosed, isClosed: typebot.isClosed,
@ -149,3 +154,6 @@ export const updateTypebot = authenticatedProcedure
return { typebot: typebotSchema.parse(newTypebot) } return { typebot: typebotSchema.parse(newTypebot) }
} }
) )
const isPublicIdValid = (str: string) =>
/^([a-z0-9]+-[a-z0-9]*)*$/.test(str) || /^[a-z0-9]*$/.test(str)

View File

@ -1,7 +1,12 @@
import { isNotEmpty } from '@typebot.io/lib'
export const toKebabCase = (value: string) => { export const toKebabCase = (value: string) => {
const matched = value.match( const matched = value.match(
/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g
) )
if (!matched) return '' if (!matched) return ''
return matched.map((x) => x.toLowerCase()).join('-') return matched
.filter(isNotEmpty)
.map((x) => x.toLowerCase())
.join('-')
} }

View File

@ -38,9 +38,6 @@ const resultsTablePreferencesSchema = z.object({
columnsWidth: z.record(z.string(), z.number()), columnsWidth: z.record(z.string(), z.number()),
}) })
const isPathNameCompatible = (str: string) =>
/^([a-zA-Z0-9]+(-|.)[a-zA-z0-9]*)*$/.test(str) || /^[a-zA-Z0-9]*$/.test(str)
const isDomainNameWithPathNameCompatible = (str: string) => const isDomainNameWithPathNameCompatible = (str: string) =>
/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:\/[\w-\/]*)?)$/.test( /^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:\/[\w-\/]*)?)$/.test(
str str
@ -60,7 +57,10 @@ export const typebotSchema = z.object({
updatedAt: z.date(), updatedAt: z.date(),
icon: z.string().nullable(), icon: z.string().nullable(),
folderId: z.string().nullable(), folderId: z.string().nullable(),
publicId: z.string().refine(isPathNameCompatible).nullable(), publicId: z
.string()
.refine((str) => /^[a-zA-Z0-9-.]+$/.test(str))
.nullable(),
customDomain: z customDomain: z
.string() .string()
.refine(isDomainNameWithPathNameCompatible) .refine(isDomainNameWithPathNameCompatible)