diff --git a/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx b/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx
index edec80576b2..ac78878ccfa 100644
--- a/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx
+++ b/apps/studio/components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm.tsx
@@ -1,7 +1,5 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
-
import { useParams } from 'common'
-import { observer } from 'mobx-react-lite'
import { useEffect, useState } from 'react'
import {
AlertDescription_Shadcn_,
@@ -18,6 +16,7 @@ import {
} from 'ui'
import { boolean, number, object, string } from 'yup'
+import { Markdown } from 'components/interfaces/Markdown'
import {
FormActions,
FormHeader,
@@ -30,8 +29,7 @@ import UpgradeToPro from 'components/ui/UpgradeToPro'
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
-import { useCheckPermissions, useFlag, useSelectedOrganization, useStore } from 'hooks'
-import { Markdown } from 'components/interfaces/Markdown'
+import { useCheckPermissions, useSelectedOrganization, useStore } from 'hooks'
import FormField from '../AuthProvidersForm/FormField'
// Use a const string to represent no chars option. Represented as empty string on the backend side.
@@ -75,7 +73,7 @@ function HoursOrNeverText({ value }: { value: number }) {
const formId = 'auth-config-basic-settings'
-const BasicAuthSettingsForm = observer(() => {
+const BasicAuthSettingsForm = () => {
const { ui } = useStore()
const { ref: projectRef } = useParams()
const {
@@ -96,9 +94,6 @@ const BasicAuthSettingsForm = observer(() => {
})
const isProPlanAndUp = isSuccessSubscription && subscription?.plan?.id !== 'free'
- const singlePerUserReleased = useFlag('authSingleSessionPerUserReleased')
- const passwordStrengthReleased = useFlag('authPasswordStrengthReleased')
- const hibpReleased = useFlag('authHIBPReleased')
const INITIAL_VALUES = {
DISABLE_SIGNUP: !authConfig?.DISABLE_SIGNUP,
@@ -109,25 +104,11 @@ const BasicAuthSettingsForm = observer(() => {
SECURITY_CAPTCHA_PROVIDER: authConfig?.SECURITY_CAPTCHA_PROVIDER || 'hcaptcha',
SESSIONS_TIMEBOX: authConfig?.SESSIONS_TIMEBOX || 0,
SESSIONS_INACTIVITY_TIMEOUT: authConfig?.SESSIONS_INACTIVITY_TIMEOUT || 0,
- ...(singlePerUserReleased
- ? {
- SESSIONS_SINGLE_PER_USER: authConfig?.SESSIONS_SINGLE_PER_USER || false,
- }
- : null),
-
- ...(passwordStrengthReleased
- ? {
- PASSWORD_MIN_LENGTH: authConfig?.PASSWORD_MIN_LENGTH || 6,
- PASSWORD_REQUIRED_CHARACTERS:
- authConfig?.PASSWORD_REQUIRED_CHARACTERS || NO_REQUIRED_CHARACTERS,
-
- ...(hibpReleased
- ? {
- PASSWORD_HIBP_ENABLED: authConfig?.PASSWORD_HIBP_ENABLED || false,
- }
- : null),
- }
- : null),
+ SESSIONS_SINGLE_PER_USER: authConfig?.SESSIONS_SINGLE_PER_USER || false,
+ PASSWORD_MIN_LENGTH: authConfig?.PASSWORD_MIN_LENGTH || 6,
+ PASSWORD_REQUIRED_CHARACTERS:
+ authConfig?.PASSWORD_REQUIRED_CHARACTERS || NO_REQUIRED_CHARACTERS,
+ PASSWORD_HIBP_ENABLED: authConfig?.PASSWORD_HIBP_ENABLED || false,
}
const onSubmit = (values: any, { resetForm }: any) => {
@@ -173,6 +154,7 @@ const BasicAuthSettingsForm = observer(() => {
{({ handleReset, resetForm, values, initialValues }: any) => {
const hasChanges = JSON.stringify(values) !== JSON.stringify(initialValues)
// Form is reset once remote data is loaded in store
+ // eslint-disable-next-line react-hooks/rules-of-hooks
useEffect(() => {
if (isSuccess) resetForm({ values: INITIAL_VALUES, initialValues: INITIAL_VALUES })
}, [isSuccess])
@@ -228,70 +210,65 @@ const BasicAuthSettingsForm = observer(() => {
/>
- {passwordStrengthReleased && (
- <>
- Passwords}>
-
- characters}
- disabled={!canUpdateConfig}
- />
-
- {isProPlanAndUp ? (
- <>>
- ) : (
-
- )}
-
-
-
- >
- )}
+ Passwords}>
+
+ characters}
+ disabled={!canUpdateConfig}
+ />
+
+ {isProPlanAndUp ? (
+ <>>
+ ) : (
+
+ )}
+
+
+
User Sessions}>
{isProPlanAndUp ? (
@@ -304,16 +281,14 @@ const BasicAuthSettingsForm = observer(() => {
organizationSlug={organization!.slug}
/>
)}
- {singlePerUserReleased && (
-
- )}
+
{
}}
)
-})
+}
export default BasicAuthSettingsForm
diff --git a/apps/studio/components/interfaces/Auth/Hooks/BasicHooksConfig.tsx b/apps/studio/components/interfaces/Auth/Hooks/BasicHooksConfig.tsx
index ea90bb8f6d3..476f85236b7 100644
--- a/apps/studio/components/interfaces/Auth/Hooks/BasicHooksConfig.tsx
+++ b/apps/studio/components/interfaces/Auth/Hooks/BasicHooksConfig.tsx
@@ -21,8 +21,7 @@ import {
} from 'components/ui/Forms'
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
-import { useCheckPermissions, useFlag, useStore } from 'hooks'
-
+import { useCheckPermissions, useStore } from 'hooks'
import SchemaFunctionSelector from './SchemaFunctionSelector'
const schema = object({
@@ -43,19 +42,12 @@ const BasicHooksConfig = () => {
isSuccess,
} = useAuthConfigQuery({ projectRef })
const { mutate: updateAuthConfig, isLoading: isUpdatingConfig } = useAuthConfigUpdateMutation()
-
- const customizeAccessTokenReleased = useFlag('authHooksCustomizeAccessToken')
-
const canUpdateConfig = useCheckPermissions(PermissionAction.UPDATE, 'custom_config_gotrue')
// TODO: Remove as any once these properties are defined in Auth Config types
const INITIAL_VALUES = {
- ...(customizeAccessTokenReleased
- ? {
- HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: authConfig?.HOOK_CUSTOM_ACCESS_TOKEN_ENABLED || false,
- HOOK_CUSTOM_ACCESS_TOKEN_URI: authConfig?.HOOK_CUSTOM_ACCESS_TOKEN_URI || '',
- }
- : null),
+ HOOK_CUSTOM_ACCESS_TOKEN_ENABLED: authConfig?.HOOK_CUSTOM_ACCESS_TOKEN_ENABLED || false,
+ HOOK_CUSTOM_ACCESS_TOKEN_URI: authConfig?.HOOK_CUSTOM_ACCESS_TOKEN_URI || '',
}
const onSubmit = (values: any, { resetForm }: any) => {
@@ -142,23 +134,15 @@ const BasicHooksConfig = () => {
descriptionText="Select the function to be called by Supabase Auth each time a new JWT is created. It should return the claims you wish to be present in the JWT."
values={values}
setFieldValue={setFieldValue}
- disabled={!canUpdateConfig || !customizeAccessTokenReleased}
+ disabled={!canUpdateConfig}
/>
- {!customizeAccessTokenReleased && (
-
- Coming soon!
-
- This hook is not available yet on your project.
-
-
- )}
{values.HOOK_CUSTOM_ACCESS_TOKEN_URI && (
)}
diff --git a/apps/studio/components/interfaces/Auth/Hooks/EnterpriseHooksConfig.tsx b/apps/studio/components/interfaces/Auth/Hooks/EnterpriseHooksConfig.tsx
index e027518dbeb..167f26f0c12 100644
--- a/apps/studio/components/interfaces/Auth/Hooks/EnterpriseHooksConfig.tsx
+++ b/apps/studio/components/interfaces/Auth/Hooks/EnterpriseHooksConfig.tsx
@@ -23,8 +23,7 @@ import UpgradeToPro from 'components/ui/UpgradeToPro'
import { useAuthConfigQuery } from 'data/auth/auth-config-query'
import { useAuthConfigUpdateMutation } from 'data/auth/auth-config-update-mutation'
import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query'
-import { useCheckPermissions, useFlag, useSelectedOrganization, useStore } from 'hooks'
-
+import { useCheckPermissions, useSelectedOrganization, useStore } from 'hooks'
import SchemaFunctionSelector from './SchemaFunctionSelector'
const schema = object({
@@ -47,10 +46,7 @@ const EnterpriseHooksConfig = () => {
isSuccess,
} = useAuthConfigQuery({ projectRef })
const { mutate: updateAuthConfig, isLoading: isUpdatingConfig } = useAuthConfigUpdateMutation()
-
const canUpdateConfig = useCheckPermissions(PermissionAction.UPDATE, 'custom_config_gotrue')
- const mfaVerificationAttemptReleased = useFlag('authHookMFAVerification')
- const passwordVerificationAttemptReleased = useFlag('authHookPasswordVerification')
const organization = useSelectedOrganization()
const { data: subscription, isSuccess: isSuccessSubscription } = useOrgSubscriptionQuery({
@@ -61,22 +57,14 @@ const EnterpriseHooksConfig = () => {
isSuccessSubscription && subscription?.plan?.id !== 'free' && subscription?.plan?.id !== 'pro'
const INITIAL_VALUES = {
- ...(mfaVerificationAttemptReleased
- ? {
- HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED:
- authConfig?.HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED || false,
- HOOK_MFA_VERIFICATION_ATTEMPT_URI: authConfig?.HOOK_MFA_VERIFICATION_ATTEMPT_URI || '',
- }
- : null),
- ...(passwordVerificationAttemptReleased
- ? {
- // remove as any when the types are merged in
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED:
- (authConfig as any)?.HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED || false,
- HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI:
- (authConfig as any)?.HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI || '',
- }
- : null),
+ HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED:
+ authConfig?.HOOK_MFA_VERIFICATION_ATTEMPT_ENABLED || false,
+ HOOK_MFA_VERIFICATION_ATTEMPT_URI: authConfig?.HOOK_MFA_VERIFICATION_ATTEMPT_URI || '',
+ // remove as any when the types are merged in
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED:
+ (authConfig as any)?.HOOK_PASSWORD_VERIFICATION_ATTEMPT_ENABLED || false,
+ HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI:
+ (authConfig as any)?.HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI || '',
}
const onSubmit = (values: any, { resetForm }: any) => {
@@ -172,31 +160,15 @@ const EnterpriseHooksConfig = () => {
descriptionText="Select the function to be called by Supabase Auth each time a user tries to verify an MFA factor. Return a decision on whether to reject the attempt and future ones, or to allow the user to keep trying."
values={values}
setFieldValue={setFieldValue}
- disabled={
- !canUpdateConfig ||
- !isTeamsEnterprisePlan ||
- !mfaVerificationAttemptReleased
- }
+ disabled={!canUpdateConfig || !isTeamsEnterprisePlan}
/>
- {!mfaVerificationAttemptReleased && (
-
- Coming soon!
-
- This hook is not available yet on your project.
-
-
- )}
{values.HOOK_MFA_VERIFICATION_ATTEMPT_URI && (
)}
@@ -212,31 +184,15 @@ const EnterpriseHooksConfig = () => {
descriptionText="Select the function to be called by Supabase Auth each time a user tries to sign in with a password. Return a decision whether to allow the user to reject the attempt, or to allow the user to keep trying."
values={values}
setFieldValue={setFieldValue}
- disabled={
- !canUpdateConfig ||
- !isTeamsEnterprisePlan ||
- !passwordVerificationAttemptReleased
- }
+ disabled={!canUpdateConfig || !isTeamsEnterprisePlan}
/>
- {!passwordVerificationAttemptReleased && (
-
- Coming soon!
-
- This hook is not available yet on your project.
-
-
- )}
{values.HOOK_PASSWORD_VERIFICATION_ATTEMPT_URI && (
)}
diff --git a/apps/studio/components/layouts/AuthLayout/AuthLayout.tsx b/apps/studio/components/layouts/AuthLayout/AuthLayout.tsx
index 4d3d62e1312..1a247684ec7 100644
--- a/apps/studio/components/layouts/AuthLayout/AuthLayout.tsx
+++ b/apps/studio/components/layouts/AuthLayout/AuthLayout.tsx
@@ -5,7 +5,7 @@ import { PropsWithChildren } from 'react'
import { useIsColumnLevelPrivilegesEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext'
import ProductMenu from 'components/ui/ProductMenu'
import { useAuthConfigPrefetch } from 'data/auth/auth-config-query'
-import { useFlag, withAuth } from 'hooks'
+import { withAuth } from 'hooks'
import ProjectLayout from '../'
import { generateAuthMenu } from './AuthLayout.utils'
@@ -15,7 +15,6 @@ export interface AuthLayoutProps {
const AuthLayout = ({ title, children }: PropsWithChildren) => {
const { ref: projectRef = 'default' } = useParams()
- const hooksReleased = useFlag('authHooksReleased')
const columnLevelPrivileges = useIsColumnLevelPrivilegesEnabled()
useAuthConfigPrefetch({ projectRef })
@@ -30,7 +29,7 @@ const AuthLayout = ({ title, children }: PropsWithChildren) =>
productMenu={
}
isBlocking={false}
diff --git a/apps/studio/components/layouts/AuthLayout/AuthLayout.utils.ts b/apps/studio/components/layouts/AuthLayout/AuthLayout.utils.ts
index e3bfdcfc5b4..4704150201f 100644
--- a/apps/studio/components/layouts/AuthLayout/AuthLayout.utils.ts
+++ b/apps/studio/components/layouts/AuthLayout/AuthLayout.utils.ts
@@ -3,7 +3,7 @@ import { IS_PLATFORM } from 'lib/constants'
export const generateAuthMenu = (
ref: string,
- options: { hooksReleased?: boolean; columnLevelPrivileges?: boolean } = {}
+ options: { columnLevelPrivileges?: boolean } = {}
): ProductMenuGroup[] => {
return [
{
@@ -56,17 +56,13 @@ export const generateAuthMenu = (
url: `/project/${ref}/auth/url-configuration`,
items: [],
},
- ...(options?.hooksReleased
- ? [
- {
- name: 'Hooks',
- key: 'hooks',
- url: `/project/${ref}/auth/hooks`,
- items: [],
- label: 'BETA',
- },
- ]
- : []),
+ {
+ name: 'Hooks',
+ key: 'hooks',
+ url: `/project/${ref}/auth/hooks`,
+ items: [],
+ label: 'BETA',
+ },
]
: []),
],