+
+
Sender details
+
+ Configure the sender information for your emails.
+
-
-
-
-
-
-
SMTP Provider Settings
-
- Your SMTP Credentials will always be encrypted in our database.
-
-
-
- {form.watch('SMTP_HOST')?.endsWith('.gmail.com') && (
-
-
- Check your SMTP provider
-
- Not all SMTP providers are designed for the email sending required by
- Supabase Auth. It looks like the SMTP provider you entered is designed
- for sending personal email messages and not for sending transactional
- messages. Although you can ignore this warning, email deliverability
- may be impacted.
-
-
+
+ (
+
+
+
+
+
)}
+ />
- (
-
-
-
-
-
- )}
- />
+ (
+
+
+
+
+
+ )}
+ />
+
+
+
-
(
-
-
- Port used by your SMTP server. Common ports include 25, 465, and
- 587.{' '}
-
-
- Avoid using port 25 as modern SMTP email clients shouldn't use
- this port, it is traditionally blocked by residential ISPs and
- Cloud Hosting Providers, to curb the amount of spam.
-
- >
- }
- >
-
+
+
+
+
SMTP Provider Settings
+
+ Your SMTP Credentials will always be encrypted in our database.
+
+
+
+ {form.watch('SMTP_HOST')?.endsWith('.gmail.com') && (
+
+
+ Check your SMTP provider
+
+ Not all SMTP providers are designed for the email sending required by
+ Supabase Auth. It looks like the SMTP provider you entered is designed
+ for sending personal email messages and not for sending transactional
+ messages. Although you can ignore this warning, email deliverability may
+ be impacted.
+
+
+ )}
+
+
(
+
+
+
+
+
+ )}
+ />
+
+ (
+
+
+ Port used by your SMTP server. Common ports include 25, 465, and
+ 587.{' '}
+
+
+ Avoid using port 25 as modern SMTP email clients shouldn't use
+ this port, it is traditionally blocked by residential ISPs and
+ Cloud Hosting Providers, to curb the amount of spam.
+
+ >
+ }
+ >
+
+ field.onChange(Number(e.target.value))}
+ placeholder="587"
+ disabled={!canUpdateConfig}
+ />
+
+
+ )}
+ />
+
+ (
+
+
+
field.onChange(Number(e.target.value))}
- placeholder="587"
disabled={!canUpdateConfig}
/>
-
-
- )}
- />
+
+
+
+ )}
+ />
- (
-
-
-
- field.onChange(Number(e.target.value))}
- disabled={!canUpdateConfig}
+ (
+
+
+
+
+
+ )}
+ />
+
+ (
+
+
+ setHidden(!hidden)}
+ icon={hidden ? : }
/>
-
-
-
- )}
- />
-
- (
-
-
+ }
+ >
-
-
- )}
- />
-
- (
-
-
- setHidden(!hidden)}
- icon={hidden ? : }
- />
- }
- >
-
-
-
-
- )}
- />
-
+
+
+
+ )}
+ />
-
- >
- )}
+
+
+ >
+ )}
-
- {form.formState.isDirty && (
-
- )}
-
+
+
+
+
)
}
-
-export default SmtpForm
diff --git a/apps/studio/components/interfaces/Auth/index.tsx b/apps/studio/components/interfaces/Auth/index.tsx
deleted file mode 100644
index 4762496196c..00000000000
--- a/apps/studio/components/interfaces/Auth/index.tsx
+++ /dev/null
@@ -1,9 +0,0 @@
-export { AdvancedAuthSettingsForm } from './AdvancedAuthSettingsForm'
-export { AuthProvidersForm } from './AuthProvidersForm/AuthProvidersForm'
-export { default as BasicAuthSettingsForm } from './BasicAuthSettingsForm/BasicAuthSettingsForm'
-export { default as EmailTemplates } from './EmailTemplates/EmailTemplates'
-export { default as MfaAuthSettingsForm } from './MfaAuthSettingsForm/MfaAuthSettingsForm'
-export { default as ProtectionAuthSettingsForm } from './ProtectionAuthSettingsForm/ProtectionAuthSettingsForm'
-export { default as SessionsAuthSettingsForm } from './SessionsAuthSettingsForm/SessionsAuthSettingsForm'
-export { default as SmtpForm } from './SmtpForm/SmtpForm'
-export { ThirdPartyAuthForm } from './ThirdPartyAuthForm'
diff --git a/apps/studio/pages/project/[ref]/auth/advanced.tsx b/apps/studio/pages/project/[ref]/auth/advanced.tsx
index 1524a38b690..254e8c0721d 100644
--- a/apps/studio/pages/project/[ref]/auth/advanced.tsx
+++ b/apps/studio/pages/project/[ref]/auth/advanced.tsx
@@ -9,7 +9,7 @@ import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
import { UnknownInterface } from 'components/ui/UnknownInterface'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import type { NextPageWithLayout } from 'types'
@@ -17,35 +17,37 @@ const AdvancedPage: NextPageWithLayout = () => {
const { ref } = useParams()
const showAdvanced = useIsFeatureEnabled('authentication:advanced')
- const isPermissionsLoaded = usePermissionsLoaded()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (!showAdvanced) {
return
}
+ if (isPermissionsLoaded && !canReadAuthSettings) {
+ return
+ }
+
return (
-
- {isPermissionsLoaded && !canReadAuthSettings ? (
-
+
+ {!isPermissionsLoaded ? (
+
+
+
) : (
-
- {!isPermissionsLoaded ? (
-
-
-
- ) : (
-
- )}
-
+
)}
-
+
)
}
AdvancedPage.getLayout = (page) => (
- {page}
+
+
+ {page}
+
+
)
diff --git a/apps/studio/pages/project/[ref]/auth/hooks.tsx b/apps/studio/pages/project/[ref]/auth/hooks.tsx
index 69db07029b0..ebea0d189d3 100644
--- a/apps/studio/pages/project/[ref]/auth/hooks.tsx
+++ b/apps/studio/pages/project/[ref]/auth/hooks.tsx
@@ -4,15 +4,16 @@ import { HooksListing } from 'components/interfaces/Auth/Hooks/HooksListing'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
-import { ScaffoldContainer } from 'components/layouts/Scaffold'
-import NoPermission from 'components/ui/NoPermission'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
-import type { NextPageWithLayout } from 'types'
+import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import { DocsButton } from 'components/ui/DocsButton'
+import NoPermission from 'components/ui/NoPermission'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
+import type { NextPageWithLayout } from 'types'
+import { GenericSkeletonLoader } from 'ui-patterns'
const Hooks: NextPageWithLayout = () => {
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
- const isPermissionsLoaded = usePermissionsLoaded()
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (isPermissionsLoaded && !canReadAuthSettings) {
return
@@ -20,7 +21,13 @@ const Hooks: NextPageWithLayout = () => {
return (
-
+ {!isPermissionsLoaded ? (
+
+
+
+ ) : (
+
+ )}
)
}
diff --git a/apps/studio/pages/project/[ref]/auth/mfa.tsx b/apps/studio/pages/project/[ref]/auth/mfa.tsx
index 84d75511655..30844c34b80 100644
--- a/apps/studio/pages/project/[ref]/auth/mfa.tsx
+++ b/apps/studio/pages/project/[ref]/auth/mfa.tsx
@@ -1,7 +1,7 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useParams } from 'common'
-import { MfaAuthSettingsForm } from 'components/interfaces/Auth'
+import { MfaAuthSettingsForm } from 'components/interfaces/Auth/MfaAuthSettingsForm/MfaAuthSettingsForm'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
@@ -9,7 +9,7 @@ import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
import { UnknownInterface } from 'components/ui/UnknownInterface'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import type { NextPageWithLayout } from 'types'
@@ -17,38 +17,40 @@ const MfaPage: NextPageWithLayout = () => {
const { ref } = useParams()
const showMFA = useIsFeatureEnabled('authentication:multi_factor')
- const isPermissionsLoaded = usePermissionsLoaded()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (!showMFA) {
return
}
+ if (isPermissionsLoaded && !canReadAuthSettings) {
+ return
+ }
+
return (
-
- {isPermissionsLoaded && !canReadAuthSettings ? (
-
+
+ {!isPermissionsLoaded ? (
+
+
+
) : (
-
- {!isPermissionsLoaded ? (
-
-
-
- ) : (
-
- )}
-
+
)}
-
+
)
}
MfaPage.getLayout = (page) => (
- {page}
+
+
+ {page}
+
+
)
diff --git a/apps/studio/pages/project/[ref]/auth/policies.tsx b/apps/studio/pages/project/[ref]/auth/policies.tsx
index e5e73f13189..c66c3b62ae9 100644
--- a/apps/studio/pages/project/[ref]/auth/policies.tsx
+++ b/apps/studio/pages/project/[ref]/auth/policies.tsx
@@ -20,7 +20,7 @@ import SchemaSelector from 'components/ui/SchemaSelector'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
import { useDatabasePoliciesQuery } from 'data/database-policies/database-policies-query'
import { useTablesQuery } from 'data/tables/tables-query'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject'
import { useUrlState } from 'hooks/ui/useUrlState'
import { useIsProtectedSchema } from 'hooks/useProtectedSchemas'
@@ -98,8 +98,10 @@ const AuthPoliciesPage: NextPageWithLayout = () => {
})
const filteredTables = onFilterTables(tables ?? [], policies ?? [], searchString)
- const canReadPolicies = useCheckPermissions(PermissionAction.TENANT_SQL_ADMIN_READ, 'policies')
- const isPermissionsLoaded = usePermissionsLoaded()
+ const { can: canReadPolicies, isSuccess: isPermissionsLoaded } = useAsyncCheckProjectPermissions(
+ PermissionAction.TENANT_SQL_ADMIN_READ,
+ 'policies'
+ )
if (isPermissionsLoaded && !canReadPolicies) {
return
diff --git a/apps/studio/pages/project/[ref]/auth/protection.tsx b/apps/studio/pages/project/[ref]/auth/protection.tsx
index 2e621551171..6a18dee5f60 100644
--- a/apps/studio/pages/project/[ref]/auth/protection.tsx
+++ b/apps/studio/pages/project/[ref]/auth/protection.tsx
@@ -1,7 +1,7 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useParams } from 'common'
-import { ProtectionAuthSettingsForm } from 'components/interfaces/Auth'
+import { ProtectionAuthSettingsForm } from 'components/interfaces/Auth/ProtectionAuthSettingsForm/ProtectionAuthSettingsForm'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
@@ -9,7 +9,7 @@ import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
import { UnknownInterface } from 'components/ui/UnknownInterface'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import type { NextPageWithLayout } from 'types'
@@ -17,38 +17,40 @@ const ProtectionPage: NextPageWithLayout = () => {
const { ref } = useParams()
const showAttackProtection = useIsFeatureEnabled('authentication:attack_protection')
- const isPermissionsLoaded = usePermissionsLoaded()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (!showAttackProtection) {
return
}
+ if (isPermissionsLoaded && !canReadAuthSettings) {
+ return
+ }
+
return (
-
- {isPermissionsLoaded && !canReadAuthSettings ? (
-
+
+ {!isPermissionsLoaded ? (
+
+
+
) : (
-
- {!isPermissionsLoaded ? (
-
-
-
- ) : (
-
- )}
-
+
)}
-
+
)
}
ProtectionPage.getLayout = (page) => (
- {page}
+
+
+ {page}
+
+
)
diff --git a/apps/studio/pages/project/[ref]/auth/providers.tsx b/apps/studio/pages/project/[ref]/auth/providers.tsx
index 8c3db26924e..e4f2dfd6a99 100644
--- a/apps/studio/pages/project/[ref]/auth/providers.tsx
+++ b/apps/studio/pages/project/[ref]/auth/providers.tsx
@@ -1,4 +1,5 @@
-import { AuthProvidersForm, BasicAuthSettingsForm } from 'components/interfaces/Auth'
+import { AuthProvidersForm } from 'components/interfaces/Auth/AuthProvidersForm/AuthProvidersForm'
+import { BasicAuthSettingsForm } from 'components/interfaces/Auth/BasicAuthSettingsForm/BasicAuthSettingsForm'
import { AuthProvidersLayout } from 'components/layouts/AuthLayout/AuthProvidersLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { ScaffoldContainer } from 'components/layouts/Scaffold'
diff --git a/apps/studio/pages/project/[ref]/auth/rate-limits.tsx b/apps/studio/pages/project/[ref]/auth/rate-limits.tsx
index 185c000bd4c..9c736babb4d 100644
--- a/apps/studio/pages/project/[ref]/auth/rate-limits.tsx
+++ b/apps/studio/pages/project/[ref]/auth/rate-limits.tsx
@@ -1,7 +1,7 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useParams } from 'common'
-import RateLimits from 'components/interfaces/Auth/RateLimits/RateLimits'
+import { RateLimits } from 'components/interfaces/Auth/RateLimits/RateLimits'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
@@ -10,7 +10,7 @@ import { DocsButton } from 'components/ui/DocsButton'
import NoPermission from 'components/ui/NoPermission'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
import { UnknownInterface } from 'components/ui/UnknownInterface'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import type { NextPageWithLayout } from 'types'
@@ -18,41 +18,43 @@ const RateLimitsPage: NextPageWithLayout = () => {
const { ref } = useParams()
const showRateLimits = useIsFeatureEnabled('authentication:rate_limits')
- const isPermissionsLoaded = usePermissionsLoaded()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (!showRateLimits) {
return
}
+ if (isPermissionsLoaded && !canReadAuthSettings) {
+ return
+ }
+
return (
-
- }
- >
- {isPermissionsLoaded && !canReadAuthSettings ? (
-
+
+ {!isPermissionsLoaded ? (
+
+
+
) : (
-
- {!isPermissionsLoaded ? (
-
-
-
- ) : (
-
- )}
-
+
)}
-
+
)
}
RateLimitsPage.getLayout = (page) => (
- {page}
+
+
+ }
+ >
+ {page}
+
+
)
diff --git a/apps/studio/pages/project/[ref]/auth/sessions.tsx b/apps/studio/pages/project/[ref]/auth/sessions.tsx
index 4c2fc2e834a..683b111196f 100644
--- a/apps/studio/pages/project/[ref]/auth/sessions.tsx
+++ b/apps/studio/pages/project/[ref]/auth/sessions.tsx
@@ -1,18 +1,18 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
-import { SessionsAuthSettingsForm } from 'components/interfaces/Auth'
+import { SessionsAuthSettingsForm } from 'components/interfaces/Auth/SessionsAuthSettingsForm/SessionsAuthSettingsForm'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
-import { ScaffoldContainer } from 'components/layouts/Scaffold'
+import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import type { NextPageWithLayout } from 'types'
const SessionsPage: NextPageWithLayout = () => {
- const isPermissionsLoaded = usePermissionsLoaded()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (isPermissionsLoaded && !canReadAuthSettings) {
return
@@ -21,9 +21,9 @@ const SessionsPage: NextPageWithLayout = () => {
return (
{!isPermissionsLoaded ? (
-
+
-
+
) : (
)}
diff --git a/apps/studio/pages/project/[ref]/auth/smtp.tsx b/apps/studio/pages/project/[ref]/auth/smtp.tsx
index 96175fb6298..b6bd764a908 100644
--- a/apps/studio/pages/project/[ref]/auth/smtp.tsx
+++ b/apps/studio/pages/project/[ref]/auth/smtp.tsx
@@ -1,21 +1,33 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
-import { SmtpForm } from 'components/interfaces/Auth'
+import { SmtpForm } from 'components/interfaces/Auth/SmtpForm/SmtpForm'
import { AuthEmailsLayout } from 'components/layouts/AuthLayout/AuthEmailsLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
+import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import type { NextPageWithLayout } from 'types'
+import { GenericSkeletonLoader } from 'ui-patterns'
const SmtpPage: NextPageWithLayout = () => {
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
- const isPermissionsLoaded = usePermissionsLoaded()
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (isPermissionsLoaded && !canReadAuthSettings) {
return
}
- return
+ return (
+
+ {!isPermissionsLoaded ? (
+
+
+
+ ) : (
+
+ )}
+
+ )
}
SmtpPage.getLayout = (page) => (
diff --git a/apps/studio/pages/project/[ref]/auth/templates.tsx b/apps/studio/pages/project/[ref]/auth/templates.tsx
index 35468f065c6..8ac5ec3aacd 100644
--- a/apps/studio/pages/project/[ref]/auth/templates.tsx
+++ b/apps/studio/pages/project/[ref]/auth/templates.tsx
@@ -1,15 +1,17 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
-import { EmailTemplates } from 'components/interfaces/Auth'
+
+import { EmailTemplates } from 'components/interfaces/Auth/EmailTemplates/EmailTemplates'
import { AuthEmailsLayout } from 'components/layouts/AuthLayout/AuthEmailsLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
-import { ScaffoldContainer } from 'components/layouts/Scaffold'
+import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import type { NextPageWithLayout } from 'types'
+import { GenericSkeletonLoader } from 'ui-patterns'
const TemplatesPage: NextPageWithLayout = () => {
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
- const isPermissionsLoaded = usePermissionsLoaded()
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (isPermissionsLoaded && !canReadAuthSettings) {
return
@@ -17,7 +19,13 @@ const TemplatesPage: NextPageWithLayout = () => {
return (
-
+ {!isPermissionsLoaded ? (
+
+
+
+ ) : (
+
+ )}
)
}
diff --git a/apps/studio/pages/project/[ref]/auth/third-party.tsx b/apps/studio/pages/project/[ref]/auth/third-party.tsx
index fdfbcc79f4c..fac8db8e2a3 100644
--- a/apps/studio/pages/project/[ref]/auth/third-party.tsx
+++ b/apps/studio/pages/project/[ref]/auth/third-party.tsx
@@ -1,21 +1,21 @@
import { PermissionAction } from '@supabase/shared-types/out/constants'
import { useParams } from 'common'
-import { ThirdPartyAuthForm } from 'components/interfaces/Auth'
+import { ThirdPartyAuthForm } from 'components/interfaces/Auth/ThirdPartyAuthForm'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import { AuthProvidersLayout } from 'components/layouts/AuthLayout/AuthProvidersLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { ScaffoldContainer } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
import { UnknownInterface } from 'components/ui/UnknownInterface'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled'
import type { NextPageWithLayout } from 'types'
const ThirdPartyPage: NextPageWithLayout = () => {
const { ref } = useParams()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
- const isPermissionsLoaded = usePermissionsLoaded()
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
const showThirdPartyAuth = useIsFeatureEnabled('authentication:third_party_auth')
diff --git a/apps/studio/pages/project/[ref]/auth/url-configuration.tsx b/apps/studio/pages/project/[ref]/auth/url-configuration.tsx
index 04c97180f56..81df0a87cd9 100644
--- a/apps/studio/pages/project/[ref]/auth/url-configuration.tsx
+++ b/apps/studio/pages/project/[ref]/auth/url-configuration.tsx
@@ -5,15 +5,15 @@ import SiteUrl from 'components/interfaces/Auth/SiteUrl/SiteUrl'
import AuthLayout from 'components/layouts/AuthLayout/AuthLayout'
import DefaultLayout from 'components/layouts/DefaultLayout'
import { PageLayout } from 'components/layouts/PageLayout/PageLayout'
-import { ScaffoldContainer } from 'components/layouts/Scaffold'
+import { ScaffoldContainer, ScaffoldSection } from 'components/layouts/Scaffold'
import NoPermission from 'components/ui/NoPermission'
import { GenericSkeletonLoader } from 'components/ui/ShimmeringLoader'
-import { useCheckPermissions, usePermissionsLoaded } from 'hooks/misc/useCheckPermissions'
+import { useAsyncCheckProjectPermissions } from 'hooks/misc/useCheckPermissions'
import type { NextPageWithLayout } from 'types'
const URLConfiguration: NextPageWithLayout = () => {
- const isPermissionsLoaded = usePermissionsLoaded()
- const canReadAuthSettings = useCheckPermissions(PermissionAction.READ, 'custom_config_gotrue')
+ const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } =
+ useAsyncCheckProjectPermissions(PermissionAction.READ, 'custom_config_gotrue')
if (isPermissionsLoaded && !canReadAuthSettings) {
return
@@ -22,9 +22,9 @@ const URLConfiguration: NextPageWithLayout = () => {
return (
{!isPermissionsLoaded ? (
-
+
-
+
) : (
<>