@@ -169,8 +173,12 @@ export default function Login() {
Continue with Google
-
-
+ {isCredentialsEnabled ? (
+ <>
+
+
+ >
+ ) : null}
diff --git a/apps/web/app/routes/auth/signup.tsx b/apps/web/app/routes/auth/signup.tsx
index dfe06f3bf..12a6b9572 100644
--- a/apps/web/app/routes/auth/signup.tsx
+++ b/apps/web/app/routes/auth/signup.tsx
@@ -3,6 +3,7 @@ import { useForm } from "react-hook-form";
import { z } from "zod";
import { authClient } from "~/api/auth-client";
+import { useAuthConfig } from "~/api/auth-config";
import { Button } from "~/components/ui/button";
import {
Card,
@@ -101,6 +102,9 @@ function SignupForm() {
}
export default function Signup() {
+ const authConfig = useAuthConfig();
+ const credentialsEnabled = authConfig?.credentialsEnabled;
+
return (
@@ -134,7 +138,17 @@ export default function Signup() {
-
+ {credentialsEnabled === true ? (
+
+ ) : credentialsEnabled === false ? (
+
+ Email and password sign-up is disabled.
+
+ ) : (
+
+ Checking available sign-up options...
+
+ )}
diff --git a/packages/auth/src/better/config.ts b/packages/auth/src/better/config.ts
index 6808a11bf..507fc9e5b 100644
--- a/packages/auth/src/better/config.ts
+++ b/packages/auth/src/better/config.ts
@@ -13,12 +13,16 @@ export const isGoogleAuthEnabled =
env.AUTH_GOOGLE_CLIENT_SECRET != null &&
env.AUTH_GOOGLE_CLIENT_SECRET !== "";
-export const isOIDCAuthEnabled = false;
-// env.AUTH_OIDC_CLIENT_ID != null && env.AUTH_OIDC_ISSUER !== "";
-export const isCredentialsAuthEnabled = false;
-// env.AUTH_CREDENTIALS_ENABLED === "auto"
-// ? !isGoogleAuthEnabled && !isOIDCAuthEnabled
-// : env.AUTH_CREDENTIALS_ENABLED === "true";
+export const isOIDCAuthEnabled =
+ env.AUTH_OIDC_CLIENT_ID != null &&
+ env.AUTH_OIDC_CLIENT_ID !== "" &&
+ env.AUTH_OIDC_ISSUER != null &&
+ env.AUTH_OIDC_ISSUER !== "";
+
+export const isCredentialsAuthEnabled =
+ env.AUTH_CREDENTIALS_ENABLED === "auto"
+ ? !isGoogleAuthEnabled && !isOIDCAuthEnabled
+ : env.AUTH_CREDENTIALS_ENABLED === "true";
export const auth = betterAuth({
database: drizzleAdapter(db, {
@@ -39,7 +43,7 @@ export const auth = betterAuth({
},
},
emailAndPassword: {
- enabled: true,
+ enabled: isCredentialsAuthEnabled,
},
trustedOrigins: [env.BASE_URL, "http://localhost:5173"],
advanced: {
diff --git a/packages/trpc/src/root.ts b/packages/trpc/src/root.ts
index 7f6796dbb..e97b5c1d4 100644
--- a/packages/trpc/src/root.ts
+++ b/packages/trpc/src/root.ts
@@ -1,3 +1,4 @@
+import { authRouter } from "./routes/auth.js";
import { deploymentTracesRouter } from "./routes/deployment-traces.js";
import { deploymentVersionsRouter } from "./routes/deployment-versions.js";
import { deploymentsRouter } from "./routes/deployments.js";
@@ -18,6 +19,7 @@ import { workspaceRouter } from "./routes/workspace.js";
import { router } from "./trpc.js";
export const appRouter = router({
+ auth: authRouter,
user: userRouter,
resource: resourcesRouter,
workspace: workspaceRouter,
diff --git a/packages/trpc/src/routes/auth.ts b/packages/trpc/src/routes/auth.ts
new file mode 100644
index 000000000..6a789a3a4
--- /dev/null
+++ b/packages/trpc/src/routes/auth.ts
@@ -0,0 +1,15 @@
+import {
+ isCredentialsAuthEnabled,
+ isGoogleAuthEnabled,
+ isOIDCAuthEnabled,
+} from "@ctrlplane/auth/server";
+
+import { publicProcedure, router } from "../trpc.js";
+
+export const authRouter = router({
+ config: publicProcedure.query(() => ({
+ credentialsEnabled: isCredentialsAuthEnabled,
+ googleEnabled: isGoogleAuthEnabled,
+ oidcEnabled: isOIDCAuthEnabled,
+ })),
+});