From 0ac2554545a32b4eb9cf383e9f1794ca99f0d26f Mon Sep 17 00:00:00 2001 From: Steven Date: Thu, 29 Aug 2024 20:13:10 +0800 Subject: [PATCH] feat: add more security settings --- bin/slash/main.go | 5 - .../setting/WorkspaceSecuritySection.tsx | 25 ++ frontend/web/src/pages/SignIn.tsx | 2 +- frontend/web/src/pages/SignUp.tsx | 2 +- .../web/src/pages/SubscriptionSetting.tsx | 14 +- proto/api/v1/workspace_service.proto | 16 +- proto/gen/api/v1/README.md | 6 +- proto/gen/api/v1/workspace_service.pb.go | 303 +++++++++--------- proto/gen/apidocs.swagger.yaml | 18 +- proto/gen/store/README.md | 1 + proto/gen/store/workspace_setting.pb.go | 119 +++---- proto/store/workspace_setting.proto | 1 + server/route/api/v1/auth_service.go | 25 +- server/route/api/v1/workspace_service.go | 21 +- store/workspace_setting.go | 1 + 15 files changed, 312 insertions(+), 247 deletions(-) diff --git a/bin/slash/main.go b/bin/slash/main.go index 2bfe8a9..6640447 100644 --- a/bin/slash/main.go +++ b/bin/slash/main.go @@ -54,11 +54,6 @@ var ( slog.Error("failed to migrate db", "error", err) return } - if err := storeInstance.MigrateWorkspaceSettings(ctx); err != nil { - cancel() - slog.Error("failed to migrate workspace settings", "error", err) - return - } s, err := server.NewServer(ctx, serverProfile, storeInstance) if err != nil { cancel() diff --git a/frontend/web/src/components/setting/WorkspaceSecuritySection.tsx b/frontend/web/src/components/setting/WorkspaceSecuritySection.tsx index d3b3a27..8a0eca1 100644 --- a/frontend/web/src/components/setting/WorkspaceSecuritySection.tsx +++ b/frontend/web/src/components/setting/WorkspaceSecuritySection.tsx @@ -26,6 +26,22 @@ const WorkspaceSecuritySection = () => { ); }; + const toggleDisallowPasswordAuth = async (on: boolean) => { + if (on) { + const confirmed = window.confirm("Are you sure to disallow password auth? This will prevent users from signing in with password."); + if (!confirmed) { + return; + } + } + + await updateWorkspaceSetting( + WorkspaceSetting.fromPartial({ + disallowPasswordAuth: on, + }), + ["disallow_password_auth"], + ); + }; + const updateWorkspaceSetting = async (workspaceSetting: WorkspaceSetting, updateMask: string[]) => { if (updateMask.length === 0) { toast.error("No changes made"); @@ -58,6 +74,15 @@ const WorkspaceSecuritySection = () => { endDecorator={{t("settings.workspace.disallow-user-registration.self")}} /> +
+ toggleDisallowPasswordAuth(event.target.checked)} + endDecorator={{"Disallow password auth"}} + /> +
); diff --git a/frontend/web/src/pages/SignIn.tsx b/frontend/web/src/pages/SignIn.tsx index 0deb715..48a5cf7 100644 --- a/frontend/web/src/pages/SignIn.tsx +++ b/frontend/web/src/pages/SignIn.tsx @@ -117,7 +117,7 @@ const SignIn: React.FC = () => { - {workspaceStore.profile.enableSignup && ( + {!workspaceStore.setting.disallowUserRegistration && (

{"Don't have an account yet?"} diff --git a/frontend/web/src/pages/SignUp.tsx b/frontend/web/src/pages/SignUp.tsx index e1ab923..4163b6b 100644 --- a/frontend/web/src/pages/SignUp.tsx +++ b/frontend/web/src/pages/SignUp.tsx @@ -21,7 +21,7 @@ const SignUp: React.FC = () => { const allowConfirm = email.length > 0 && nickname.length > 0 && password.length > 0; useEffect(() => { - if (!workspaceStore.profile.enableSignup) { + if (workspaceStore.setting.disallowUserRegistration) { return navigateTo("/auth", { replace: true, }); diff --git a/frontend/web/src/pages/SubscriptionSetting.tsx b/frontend/web/src/pages/SubscriptionSetting.tsx index 9ba5393..c8b0d35 100644 --- a/frontend/web/src/pages/SubscriptionSetting.tsx +++ b/frontend/web/src/pages/SubscriptionSetting.tsx @@ -162,11 +162,11 @@ const SubscriptionSetting: React.FC = () => {

  • - Advanced analytics + High-priority in roadmap
  • - High-priority in roadmap + Email support
  • @@ -190,16 +190,20 @@ const SubscriptionSetting: React.FC = () => {

    Everything in Pro, and