{"record":{"id":"82e6ba7bea1abaef","repo":"infiniflow/ragflow","slug":"invalid-activate-status-activate-status","errorCode":null,"errorMessage":"Invalid activate_status: {activate_status}","messagePattern":"Invalid activate_status: (.+?)","errorType":"http","errorClass":"AdminException","httpStatus":400,"severity":"error","filePath":"admin/server/services.py","lineNumber":146,"sourceCode":"\n    @staticmethod\n    def update_user_activate_status(username, activate_status: str):\n        # use email to find user. check exist and unique.\n        user_list = UserService.query_user_by_email(username)\n        if not user_list:\n            raise UserNotFoundError(username)\n        elif len(user_list) > 1:\n            raise AdminException(f\"Exist more than 1 user: {username}!\")\n        # check activate status different from new\n        usr = user_list[0]\n        # format activate_status before handle\n        _activate_status = activate_status.lower()\n        target_status = {\n            \"on\": ActiveEnum.ACTIVE.value,\n            \"off\": ActiveEnum.INACTIVE.value,\n        }.get(_activate_status)\n        if not target_status:\n            raise AdminException(f\"Invalid activate_status: {activate_status}\")\n        if target_status == usr.is_active:\n            return f\"User activate status is already {_activate_status}!\"\n        # update is_active\n        update_dict = {\"is_active\": target_status}\n        if target_status == ActiveEnum.INACTIVE.value:\n            update_dict[\"access_token\"] = f\"INVALID_{secrets.token_hex(16)}\"\n        UserService.update_user(usr.id, update_dict)\n        return f\"Turn {_activate_status} user activate status successfully!\"\n\n    @staticmethod\n    def get_user_api_key(username: str) -> list[dict[str, Any]]:\n        # use email to find user. check exist and unique.\n        user_list: list[Any] = UserService.query_user_by_email(username)\n        if not user_list:\n            raise UserNotFoundError(username)\n        elif len(user_list) > 1:\n            raise AdminException(f\"More than one user with username '{username}' found!\")\n","sourceCodeStart":128,"sourceCodeEnd":164,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/admin/server/services.py#L128-L164","documentation":"AdminException (HTTP 400) raised by UserMgr.update_user_activate_status (admin/server/services.py:146) when activate_status.lower() is neither 'on' nor 'off'. The mapping table only accepts those two exact strings; anything else has no target ActiveEnum value and is rejected before the user record is touched.","triggerScenarios":"Passing 'true'/'false', '1'/'0', 'active'/'inactive', 'enable'/'disable', or an empty string as activate_status; uppercase is fine because the value is lowercased first, but synonyms are not translated.","commonSituations":"Automation written against a different API's vocabulary; boolean flags stringified as 'True'; unset environment variables defaulting to empty string; CLI flags mapped incorrectly.","solutions":["Use exactly 'on' or 'off' (any case) for activate_status.","Map your script's booleans explicitly: str(flag).lower() in {'true','1','yes'} -> 'on', else 'off'.","Validate the parameter client-side before calling and fail with a clear message.","Check for typos or shell-quoting issues that pass an empty/garbled value."],"exampleFix":"# before\nUserMgr.update_user_activate_status(email, 'true')  # 400 Invalid activate_status\n\n# after\nstatus = 'on' if ENABLED else 'off'\nassert status in ('on', 'off')\nUserMgr.update_user_activate_status(email, status)","handlingStrategy":"validation","validationCode":"def normalize_activate_status(value: str) -> str:\n    v = str(value).strip().lower()\n    mapping = {'true': 'on', '1': 'on', 'yes': 'on', 'active': 'on',\n               'false': 'off', '0': 'off', 'no': 'off', 'inactive': 'off'}\n    status = mapping.get(v, v)\n    if status not in ('on', 'off'):\n        raise ValueError(f'activate_status must be on/off, got {value!r}')\n    return status","typeGuard":"def is_valid_activate_status(value: str) -> bool:\n    return isinstance(value, str) and value.strip().lower() in ('on', 'off')","tryCatchPattern":"from admin.server.exceptions import AdminException\ntry:\n    UserMgr.update_user_activate_status(email, status)\nexcept AdminException as e:\n    if e.message.startswith('Invalid activate_status'):\n        raise ValueError('use exactly \"on\" or \"off\"') from e\n    raise","preventionTips":["Whitelist the parameter client-side to {'on','off'} before calling.","Map booleans explicitly instead of str(bool) which yields 'True'.","Fail fast on empty-string values that usually indicate an unset env var."],"tags":["validation","admin-api","activation","enum"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}