Files
xianyan/docs/toolsapi/scripts/deploy_ip_city_fix.py
Developer 283950ea07 chore: 批量代码优化与功能迭代更新
本次提交包含大量代码优化、功能新增与服务端配置更新:
1. 修复分析报告统计数据,调整CMake策略设置
2. 优化APP权限配置、编辑器与聊天界面组件
3. 更新依赖库版本与pubspec配置
4. 新增文件传输服务端、信令服务器相关配置与脚本
5. 完善用户注销功能与数据库迁移脚本
6. 优化多处动画效果、代码风格与日志输出
7. 新增多种调试与部署脚本,修复已知BUG
2026-05-12 06:28:04 +08:00

98 lines
2.8 KiB
Python

#!/usr/bin/env python3
"""
============================================================
闲言工具箱 — IP归属地修复部署脚本
创建时间: 2026-05-12
作用: 上传修复ip_city为空的UserSecurity.php到服务器
============================================================
"""
import paramiko
import time
HOST = '123.207.67.197'
PORT = 22
USER = 'root'
PASS = '520Kiss123'
REMOTE_APP_PATH = '/www/wwwroot/tools.wktyl.com/application'
LOCAL_FILE = r'e:\project\flutter\f\xianyan\docs\toolsapi\application\api\controller\UserSecurity.php'
REMOTE_FILE = f'{REMOTE_APP_PATH}/api/controller/UserSecurity.php'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(HOST, PORT, USER, PASS)
sftp = ssh.open_sftp()
# 备份
timestamp = time.strftime('%Y%m%d_%H%M%S')
backup = f"{REMOTE_FILE}.bak.{timestamp}"
try:
sftp.rename(REMOTE_FILE, backup)
print(f"✅ 备份: {backup}")
except:
print("⚠️ 无需备份")
# 上传
sftp.put(LOCAL_FILE, REMOTE_FILE)
sftp.chmod(REMOTE_FILE, 0o644)
print("✅ 上传: UserSecurity.php (含queryIpLocation修复)")
# 清理缓存
ssh.exec_command(f'rm -rf {REMOTE_APP_PATH}/../runtime/cache/* {REMOTE_APP_PATH}/../runtime/temp/*')
print("✅ 缓存已清理")
# 验证文件
stat = sftp.stat(REMOTE_FILE)
print(f"✅ 文件大小: {stat.st_size} bytes")
sftp.close()
# 测试: 登录后检查ip_city
print("\n--- 测试: 登录后ip_city是否自动填充 ---")
import requests as req
session = req.Session()
session.headers.update({
"Accept": "application/json",
"Content-Type": "application/x-www-form-urlencoded",
})
resp = session.post('https://tools.wktyl.com/api/user_security/login', data={
'account': 'apitest_user',
'password': '123456',
}, timeout=15)
login_data = resp.json()
if login_data.get('code') == 1:
token = login_data['data']['userinfo']['token']
user_id = login_data['data']['userinfo']['id']
print(f"✅ 登录成功 (user_id={user_id})")
# 查询设备列表
resp2 = session.get(
'https://tools.wktyl.com/api/user_center/myDevices',
headers={'token': token},
timeout=15,
)
devices_data = resp2.json()
if devices_data.get('code') == 1:
devices = devices_data.get('data', {}).get('devices', [])
for d in devices:
ip_city = d.get('ip_city', '')
ip_range = d.get('ip_range', '')
device_name = d.get('device_name', '')
print(f" 设备: {device_name} | ip_city={ip_city} | ip_range={ip_range}")
if ip_city:
print(" ✅ ip_city已自动填充!")
else:
print(" ⚠️ ip_city仍为空")
else:
print(f" ❌ 设备列表查询失败: {devices_data.get('msg')}")
else:
print(f"❌ 登录失败: {login_data.get('msg')}")
ssh.close()
print("\n部署完成!")