frist
This commit is contained in:
159
get_cloudmail_token.py
Normal file
159
get_cloudmail_token.py
Normal file
@@ -0,0 +1,159 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Cloud Mail Token 生成脚本
|
||||
|
||||
使用方法:
|
||||
python get_cloudmail_token.py
|
||||
|
||||
注意:生成新 Token 会使之前的 Token 失效!
|
||||
"""
|
||||
|
||||
import httpx
|
||||
import json
|
||||
import getpass
|
||||
|
||||
|
||||
def get_cloudmail_token(api_url: str, admin_email: str, admin_password: str):
|
||||
"""
|
||||
调用 Cloud Mail API 生成 Token
|
||||
|
||||
参数:
|
||||
api_url: Cloud Mail API 基础 URL (例如: https://mygoband.com)
|
||||
admin_email: 管理员邮箱
|
||||
admin_password: 管理员密码
|
||||
|
||||
返回:
|
||||
生成的 Token 字符串
|
||||
"""
|
||||
url = f"{api_url.rstrip('/')}/api/public/genToken"
|
||||
|
||||
payload = {
|
||||
"email": admin_email,
|
||||
"password": admin_password
|
||||
}
|
||||
|
||||
print(f"\n正在请求: {url}")
|
||||
print(f"管理员邮箱: {admin_email}")
|
||||
print("-" * 60)
|
||||
|
||||
try:
|
||||
response = httpx.post(
|
||||
url,
|
||||
json=payload,
|
||||
headers={"Content-Type": "application/json"},
|
||||
timeout=30.0
|
||||
)
|
||||
|
||||
print(f"HTTP 状态码: {response.status_code}")
|
||||
print(f"响应内容: {response.text}\n")
|
||||
|
||||
if response.status_code != 200:
|
||||
print(f"❌ 请求失败: HTTP {response.status_code}")
|
||||
return None
|
||||
|
||||
data = response.json()
|
||||
|
||||
if data.get("code") != 200:
|
||||
print(f"❌ API 错误: {data.get('message', 'Unknown error')}")
|
||||
return None
|
||||
|
||||
token = data.get("data", {}).get("token")
|
||||
|
||||
if not token:
|
||||
print("❌ 响应中没有找到 token")
|
||||
return None
|
||||
|
||||
print("✅ Token 生成成功!")
|
||||
print("=" * 60)
|
||||
print(f"Token: {token}")
|
||||
print("=" * 60)
|
||||
print("\n请将此 Token 复制到 .env 文件中的 MAIL_CLOUDMAIL_TOKEN")
|
||||
print("\n⚠️ 警告:此 Token 会使之前生成的所有 Token 失效!")
|
||||
|
||||
return token
|
||||
|
||||
except httpx.TimeoutException:
|
||||
print("❌ 请求超时,请检查网络连接和 API URL")
|
||||
return None
|
||||
except httpx.NetworkError as e:
|
||||
print(f"❌ 网络错误: {e}")
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"❌ 发生错误: {e}")
|
||||
return None
|
||||
|
||||
|
||||
def main():
|
||||
print("=" * 60)
|
||||
print("Cloud Mail Token 生成器")
|
||||
print("=" * 60)
|
||||
|
||||
# 获取用户输入
|
||||
api_url = input("\n请输入 Cloud Mail API URL (例如 https://mygoband.com): ").strip()
|
||||
|
||||
if not api_url:
|
||||
print("❌ API URL 不能为空")
|
||||
return
|
||||
|
||||
admin_email = input("请输入管理员邮箱: ").strip()
|
||||
|
||||
if not admin_email:
|
||||
print("❌ 管理员邮箱不能为空")
|
||||
return
|
||||
|
||||
admin_password = getpass.getpass("请输入管理员密码: ")
|
||||
|
||||
if not admin_password:
|
||||
print("❌ 管理员密码不能为空")
|
||||
return
|
||||
|
||||
# 生成 Token
|
||||
token = get_cloudmail_token(api_url, admin_email, admin_password)
|
||||
|
||||
if token:
|
||||
# 询问是否自动更新 .env 文件
|
||||
update_env = input("\n是否自动更新 .env 文件?(y/N): ").lower()
|
||||
|
||||
if update_env == 'y':
|
||||
try:
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
env_file = Path(".env")
|
||||
|
||||
if env_file.exists():
|
||||
# 读取现有内容
|
||||
content = env_file.read_text()
|
||||
|
||||
# 检查是否已有 MAIL_CLOUDMAIL_TOKEN
|
||||
if "MAIL_CLOUDMAIL_TOKEN" in content:
|
||||
# 替换现有值
|
||||
import re
|
||||
content = re.sub(
|
||||
r'MAIL_CLOUDMAIL_TOKEN=.*',
|
||||
f'MAIL_CLOUDMAIL_TOKEN={token}',
|
||||
content
|
||||
)
|
||||
print("✅ 已更新 .env 文件中的 MAIL_CLOUDMAIL_TOKEN")
|
||||
else:
|
||||
# 添加新行
|
||||
content += f"\nMAIL_CLOUDMAIL_TOKEN={token}\n"
|
||||
print("✅ 已添加 MAIL_CLOUDMAIL_TOKEN 到 .env 文件")
|
||||
|
||||
# 写回文件
|
||||
env_file.write_text(content)
|
||||
else:
|
||||
print("⚠️ .env 文件不存在,请手动创建")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ 更新 .env 文件失败: {e}")
|
||||
print("请手动复制 Token 到 .env 文件")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
print("\n\n⚠️ 操作已取消")
|
||||
except Exception as e:
|
||||
print(f"\n❌ 程序错误: {e}")
|
||||
Reference in New Issue
Block a user