From 62ade5ecd311de08c91efa01a5675ce36d2e66ac Mon Sep 17 00:00:00 2001 From: ytqh Date: Mon, 5 May 2025 16:10:01 +0800 Subject: [PATCH] opt: opt debug demo --- api/configs/deploy/__init__.py | 5 ----- api/configs/school/__init__.py | 10 ++++++++++ api/services/account_service.py | 9 +++++---- docker/.env.example | 5 ++++- docker/docker-compose.yaml | 9 +++++---- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/api/configs/deploy/__init__.py b/api/configs/deploy/__init__.py index b321f8e425..cc5d4f8273 100644 --- a/api/configs/deploy/__init__.py +++ b/api/configs/deploy/__init__.py @@ -19,11 +19,6 @@ class DeploymentConfig(BaseSettings): default=False, ) - DEBUG_CODE_FOR_LOGIN: Optional[str] = Field( - description="Default code for login", - default=None, - ) - EDITION: str = Field( description="Deployment edition of the application (e.g., 'SELF_HOSTED', 'CLOUD')", default="SELF_HOSTED", diff --git a/api/configs/school/__init__.py b/api/configs/school/__init__.py index 1490d3919d..ee28077930 100644 --- a/api/configs/school/__init__.py +++ b/api/configs/school/__init__.py @@ -49,7 +49,17 @@ class SchoolConfig(BaseSettings): default=None, ) + DEBUG_ORG_EMAIL_DOMAIN: Optional[str] = Field( + description="Debug org email domain for DEMO school-level features.", + default=None, + ) + DEBUG_ADMIN_PHONE: Optional[str] = Field( description="Debug admin phone for DEMO school-level features.", default=None, ) + + DEBUG_CODE_FOR_LOGIN: Optional[str] = Field( + description="Default code for login", + default=None, + ) \ No newline at end of file diff --git a/api/services/account_service.py b/api/services/account_service.py index 90fabf8496..67e8c9f5e7 100644 --- a/api/services/account_service.py +++ b/api/services/account_service.py @@ -492,7 +492,7 @@ class AccountService: if email is None: raise ValueError("Email must be provided.") - if dify_config.DEBUG_CODE_FOR_LOGIN: + if dify_config.DEBUG_ORG_EMAIL_DOMAIN and email.endswith(dify_config.DEBUG_ORG_EMAIL_DOMAIN): code = dify_config.DEBUG_CODE_FOR_LOGIN elif cls.email_code_login_rate_limiter.is_rate_limited(email): from controllers.console.auth.error import EmailCodeLoginRateLimitExceededError @@ -507,6 +507,7 @@ class AccountService: token_type="email_code_login", additional_data={"code": code}, ) + send_email_code_login_mail_task.delay( language=language, to=account.email if account else email, @@ -734,7 +735,7 @@ class AccountService: Returns a token that can be used to verify the code. """ - if dify_config.DEBUG_CODE_FOR_LOGIN: + if phone == dify_config.DEBUG_ADMIN_PHONE and dify_config.DEBUG_CODE_FOR_LOGIN: code = dify_config.DEBUG_CODE_FOR_LOGIN elif cls.phone_code_login_rate_limiter.is_rate_limited(phone): raise Exception("Phone verification code rate limit exceeded") @@ -749,13 +750,13 @@ class AccountService: additional_data={"code": code, "phone": phone}, ) - if dify_config.DEBUG_CODE_FOR_LOGIN: + if phone == dify_config.DEBUG_ADMIN_PHONE and dify_config.DEBUG_CODE_FOR_LOGIN: logging.info(f"Mock Code, Skip sending phone verification code to {phone}") else: send_phone_sms_code_login_task.delay(phone=phone, code=code) + cls.phone_code_login_rate_limiter.increment_rate_limit(phone) logging.info(f"Phone verification code sent to {phone}") - cls.phone_code_login_rate_limiter.increment_rate_limit(phone) return token @classmethod diff --git a/docker/.env.example b/docker/.env.example index b3163f327b..0c70986dae 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -1056,7 +1056,6 @@ NO_PROXY= ALLOW_REGISTER=true DEFAULT_APP_ID= DEFAULT_TENANT_ID= -DEBUG_CODE_FOR_LOGIN= PHONE_CODE_LOGIN_TOKEN_EXPIRY_MINUTES=5 # User memory generate task interval in minutes @@ -1075,6 +1074,10 @@ ALIYUN_TEMPLATE_CODE= IMAGE_GENERATION_DAILY_LIMIT=5 IMAGE_GENERATION_MIN_CONVERSATION_ROUNDS=10 IMAGE_GENERATION_APP_ID= + +# DEBUG ORG +DEBUG_ORG_DOMAIN=test.edu +DEBUG_CODE_FOR_LOGIN= DEBUG_ADMIN_PHONE= PLUGIN_PYTHON_ENV_INIT_TIMEOUT=120 diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index f08684f06d..dd1ad4585f 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -461,7 +461,6 @@ x-shared-env: &shared-api-worker-env ALLOW_REGISTER: ${ALLOW_REGISTER:-true} DEFAULT_APP_ID: ${DEFAULT_APP_ID:-} DEFAULT_TENANT_ID: ${DEFAULT_TENANT_ID:-} - DEBUG_CODE_FOR_LOGIN: ${DEBUG_CODE_FOR_LOGIN:-} PHONE_CODE_LOGIN_TOKEN_EXPIRY_MINUTES: ${PHONE_CODE_LOGIN_TOKEN_EXPIRY_MINUTES:-5} NEED_USER_PROFILE_GENERATION_APP_IDS: ${NEED_USER_PROFILE_GENERATION_APP_IDS:-} USER_PROFILE_GENERATE_TASK_INTERVAL: ${USER_PROFILE_GENERATE_TASK_INTERVAL:-5} @@ -474,6 +473,8 @@ x-shared-env: &shared-api-worker-env IMAGE_GENERATION_DAILY_LIMIT: ${IMAGE_GENERATION_DAILY_LIMIT:-5} IMAGE_GENERATION_MIN_CONVERSATION_ROUNDS: ${IMAGE_GENERATION_MIN_CONVERSATION_ROUNDS:-10} IMAGE_GENERATION_APP_ID: ${IMAGE_GENERATION_APP_ID:-} + DEBUG_ORG_DOMAIN: ${DEBUG_ORG_DOMAIN:-test.edu} + DEBUG_CODE_FOR_LOGIN: ${DEBUG_CODE_FOR_LOGIN:-} DEBUG_ADMIN_PHONE: ${DEBUG_ADMIN_PHONE:-} PLUGIN_PYTHON_ENV_INIT_TIMEOUT: ${PLUGIN_PYTHON_ENV_INIT_TIMEOUT:-120} PLUGIN_MAX_EXECUTION_TIMEOUT: ${PLUGIN_MAX_EXECUTION_TIMEOUT:-600} @@ -537,7 +538,7 @@ services: # Mount the storage directory to the container, for storing user files. - ./volumes/app/storage:/app/api/storage # Mount the log directory from the container to the host - - ./volumes/app/logs:/app/logs + - ./volumes/app/logs:/app/logs networks: - ssrf_proxy_network - default @@ -568,7 +569,7 @@ services: # Mount the storage directory to the container, for storing user files. - ./volumes/app/storage:/app/api/storage # Mount the log directory from the container to the host - - ./volumes/app/logs:/app/logs + - ./volumes/app/logs:/app/logs networks: - ssrf_proxy_network - default @@ -593,7 +594,7 @@ services: # Mount the storage directory to the container, for storing user files. - ./volumes/app/storage:/app/api/storage # Mount the log directory from the container to the host - - ./volumes/app/logs:/app/logs + - ./volumes/app/logs:/app/logs networks: - ssrf_proxy_network - default