40 lines
3.2 KiB
Python

"""Actionable presentation of permission checks, without starting any action."""
def next_step(diagnostic, copy_ready=False):
if not diagnostic:
return None
code = diagnostic.get('code')
attempted = diagnostic.get('task_for_pid_code') is not None
if code == 'no_process':
return dict(level='info', title='先打开并登录微信',
description='保持知微运行,在微信中登录本人账号并打开目标聊天,然后回来检查。',
action='permissions', button='我已登录,重新检查')
if code == 'multiple_processes':
return dict(level='warning', title='请只保留一个微信进程',
description='退出多余的原版或副本,仅保留本次要读取的微信,再重新检查。',
action='permissions', button='我已处理,重新检查')
if code == 'target_restricted' and copy_ready:
return dict(level='warning', title='临时副本已准备,请切换到副本',
description='当前检查仍发现签名限制。先正常退出原版,再启动已准备的副本;在副本中登录、打开聊天后读取。不会自动退出或替你登录。',
action='launch_copy', button='启动已准备的临时副本')
if code == 'target_restricted' and not attempted:
return dict(level='warning', title='检查已完成,尚未实际读取',
description='签名检查提示可能受限,这不等于已经取钥失败。先点击下面的按钮读取一次;系统若拒绝,再选择管理员读取或临时副本。',
action='capture', button='尝试读取一次')
if code in ('target_restricted', 'access_denied') and not diagnostic.get('administrator'):
return dict(level='warning', title='普通读取被拒,可选择管理员读取',
description='这是普通进程的实际拒绝结果。你可以主动授权管理员读取一次;这不会改变微信签名,若仍拒绝,页面会给出临时副本入口。',
action='capture_admin', button='授权管理员读取一次')
if code == 'target_restricted':
return dict(level='warning', title='管理员读取仍被拒,下一步可预览临时副本',
description='继续输入相同密码通常没有帮助。先预览完整备份位置和副本操作影响;预览不会修改微信,只有你勾选同意后才创建副本。',
action='preview_copy', button='预览备份与临时副本方案')
if code == 'access_denied':
return dict(level='warning', title='系统仍拒绝访问,请核对终端授权',
description='请在 macOS“隐私与安全性 → 开发者工具”检查运行知微的终端授权;已有本地密钥文件也可直接导入。授权不保证解除其他系统限制。',
action='key_file', button='选择已有的本地密钥文件')
return dict(level='info', title='可以尝试读取密钥',
description='目前未检查到明确的签名阻塞。打开目标聊天后点击读取,是否成功以实际结果为准。',
action='capture', button='尝试读取一次')