diff --git a/src/langbot/pkg/api/http/controller/groups/system.py b/src/langbot/pkg/api/http/controller/groups/system.py index ddbb2fda..03b45e35 100644 --- a/src/langbot/pkg/api/http/controller/groups/system.py +++ b/src/langbot/pkg/api/http/controller/groups/system.py @@ -23,8 +23,8 @@ class SystemRouterGroup(group.RouterGroup): if 'cloud_service_url' in self.ap.instance_config.data.get('plugin', {}) else 'https://space.langbot.app' ), - 'allow_change_password': self.ap.instance_config.data.get('system', {}).get( - 'allow_change_password', True + 'allow_modify_login_info': self.ap.instance_config.data.get('system', {}).get( + 'allow_modify_login_info', True ), } ) diff --git a/src/langbot/pkg/api/http/controller/groups/user.py b/src/langbot/pkg/api/http/controller/groups/user.py index 89fd6507..981b1bd8 100644 --- a/src/langbot/pkg/api/http/controller/groups/user.py +++ b/src/langbot/pkg/api/http/controller/groups/user.py @@ -73,9 +73,11 @@ class UserRouterGroup(group.RouterGroup): @self.route('/change-password', methods=['POST'], auth_type=group.AuthType.USER_TOKEN) async def _(user_email: str) -> str: # Check if password change is allowed - allow_change_password = self.ap.instance_config.data.get('system', {}).get('allow_change_password', True) - if not allow_change_password: - return self.http_status(403, -1, 'Password change is disabled') + allow_modify_login_info = self.ap.instance_config.data.get('system', {}).get( + 'allow_modify_login_info', True + ) + if not allow_modify_login_info: + return self.http_status(403, -1, 'Modifying login info is disabled') json_data = await quart.request.json @@ -199,6 +201,13 @@ class UserRouterGroup(group.RouterGroup): @self.route('/bind-space', methods=['POST'], auth_type=group.AuthType.NONE) async def _() -> str: """Bind Space account to existing local account""" + # Check if modifying login info is allowed + allow_modify_login_info = self.ap.instance_config.data.get('system', {}).get( + 'allow_modify_login_info', True + ) + if not allow_modify_login_info: + return self.http_status(403, -1, 'Modifying login info is disabled') + json_data = await quart.request.json code = json_data.get('code') state = json_data.get('state') # JWT token passed as state diff --git a/src/langbot/pkg/api/http/service/user.py b/src/langbot/pkg/api/http/service/user.py index 3996caad..6235ca1a 100644 --- a/src/langbot/pkg/api/http/service/user.py +++ b/src/langbot/pkg/api/http/service/user.py @@ -26,7 +26,7 @@ class UserService: space_config = self.ap.instance_config.data.get('space', {}) return { 'url': space_config.get('url', 'https://space.langbot.app'), - 'api_url': space_config.get('api_url', 'https://api.langbot.app'), + 'models_gateway_api_url': space_config.get('models_gateway_api_url', 'https://api.langbot.cloud'), 'oauth_authorize_url': space_config.get('oauth_authorize_url', 'https://space.langbot.app/auth/authorize'), } diff --git a/src/langbot/templates/config.yaml b/src/langbot/templates/config.yaml index bd0a2ff7..5925a95d 100644 --- a/src/langbot/templates/config.yaml +++ b/src/langbot/templates/config.yaml @@ -16,7 +16,7 @@ proxy: https: '' system: recovery_key: '' - allow_change_password: true + allow_modify_login_info: true jwt: expire: 604800 secret: '' @@ -75,6 +75,6 @@ space: # Space service URL for OAuth and API url: 'https://space.langbot.app' # Space API URL for model requests (MaaS) - api_url: 'https://api.langbot.app' + models_gateway_api_url: 'https://api.langbot.cloud' # OAuth authorization page URL (user will be redirected here) oauth_authorize_url: 'https://space.langbot.app/auth/authorize' diff --git a/web/src/app/home/components/account-settings-dialog/AccountSettingsDialog.tsx b/web/src/app/home/components/account-settings-dialog/AccountSettingsDialog.tsx index 8a82a0cd..aec4d2dc 100644 --- a/web/src/app/home/components/account-settings-dialog/AccountSettingsDialog.tsx +++ b/web/src/app/home/components/account-settings-dialog/AccountSettingsDialog.tsx @@ -21,6 +21,7 @@ import { ItemActions, } from '@/components/ui/item'; import { httpClient } from '@/app/infra/http/HttpClient'; +import { systemInfo } from '@/app/infra/http'; import { Loader2, ExternalLink, KeyRound } from 'lucide-react'; import PasswordChangeDialog from '../password-change-dialog/PasswordChangeDialog'; @@ -125,6 +126,7 @@ export default function AccountSettingsDialog({ variant="outline" size="sm" onClick={() => setPasswordDialogOpen(true)} + disabled={!systemInfo.allow_modify_login_info} > {hasPassword ? t('common.changePassword') @@ -179,7 +181,9 @@ export default function AccountSettingsDialog({ variant="outline" size="sm" onClick={handleBindSpace} - disabled={spaceBindLoading} + disabled={ + spaceBindLoading || !systemInfo.allow_modify_login_info + } > {spaceBindLoading ? ( diff --git a/web/src/app/infra/entities/api/index.ts b/web/src/app/infra/entities/api/index.ts index 407bb6fc..1c3b7b5c 100644 --- a/web/src/app/infra/entities/api/index.ts +++ b/web/src/app/infra/entities/api/index.ts @@ -241,7 +241,7 @@ export interface ApiRespSystemInfo { version: string; cloud_service_url: string; enable_marketplace: boolean; - allow_change_password: boolean; + allow_modify_login_info: boolean; } export interface ApiRespPluginSystemStatus { diff --git a/web/src/app/infra/http/index.ts b/web/src/app/infra/http/index.ts index f14188cc..aab696dc 100644 --- a/web/src/app/infra/http/index.ts +++ b/web/src/app/infra/http/index.ts @@ -8,7 +8,7 @@ export let systemInfo: ApiRespSystemInfo = { version: '', enable_marketplace: true, cloud_service_url: '', - allow_change_password: true, + allow_modify_login_info: true, }; /**