🛂 Auto ban IP on suspected bot publishing (#1095)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Enhanced sign-in error handling with specific messages for different
error types.
- Implemented IP-based restrictions for authentication and publishing
actions.

- **Bug Fixes**
- Updated the retrieval of user session information to improve
reliability.

- **Documentation**
- Updated usage instructions for `getServerSession` to reflect the new
authentication options.

- **Refactor**
- Replaced direct usage of `authOptions` with a new function
`getAuthOptions` to dynamically generate authentication options.
- Improved IP address extraction logic to handle various header formats.

- **Chores**
- Added a new `BannedIp` model to the database schema for managing
IP-based restrictions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Baptiste Arnaud
2023-12-11 13:40:07 +01:00
committed by GitHub
parent eedb7145ac
commit fcfbd63443
13 changed files with 171 additions and 38 deletions

View File

@@ -32,6 +32,7 @@ import { parseDefaultPublicId } from '../helpers/parseDefaultPublicId'
import { InputBlockType } from '@typebot.io/schemas/features/blocks/inputs/constants'
import { ConfirmModal } from '@/components/ConfirmModal'
import { TextLink } from '@/components/TextLink'
import { useUser } from '@/features/account/hooks/useUser'
type Props = ButtonProps & {
isMoreMenuDisabled?: boolean
@@ -44,6 +45,7 @@ export const PublishButton = ({
const { workspace } = useWorkspace()
const { push, query, pathname } = useRouter()
const { isOpen, onOpen, onClose } = useDisclosure()
const { logOut } = useUser()
const {
isOpen: isNewEngineWarningOpen,
onOpen: onNewEngineWarningOpen,
@@ -69,11 +71,13 @@ export const PublishButton = ({
const { mutate: publishTypebotMutate, isLoading: isPublishing } =
trpc.typebot.publishTypebot.useMutation({
onError: (error) =>
onError: (error) => {
showToast({
title: 'Error while publishing typebot',
description: error.message,
}),
})
if (error.data?.httpStatus === 403) logOut()
},
onSuccess: () => {
refetchPublishedTypebot({
typebotId: typebot?.id as string,