| |
| """ |
| 自动读取Kiro token的脚本 |
| 在Docker容器启动时自动读取宿主机的token文件 |
| """ |
|
|
| import os |
| import json |
| import sys |
| from pathlib import Path |
|
|
| def get_token_file_path(): |
| """获取token文件路径""" |
| home = Path.home() |
| return home / ".aws" / "sso" / "cache" / "kiro-auth-token.json" |
|
|
| def read_tokens(): |
| """读取token文件""" |
| token_file = get_token_file_path() |
| |
| if not token_file.exists(): |
| print(f"❌ Token文件不存在: {token_file}") |
| print("请确保已登录Kiro,或手动创建token文件") |
| return None, None |
| |
| try: |
| with open(token_file, 'r', encoding='utf-8') as f: |
| data = json.load(f) |
| |
| access_token = data.get('accessToken') |
| refresh_token = data.get('refreshToken') |
| |
| if not access_token or not refresh_token: |
| print("❌ Token文件格式错误,缺少accessToken或refreshToken") |
| return None, None |
| |
| return access_token, refresh_token |
| |
| except json.JSONDecodeError: |
| print("❌ Token文件JSON格式错误") |
| return None, None |
| except Exception as e: |
| print(f"❌ 读取token文件失败: {e}") |
| return None, None |
|
|
| def create_env_file(access_token, refresh_token): |
| """创建.env文件""" |
| env_content = f"""# Kiro Token配置 |
| # 自动生成于 {os.path.basename(__file__)} |
| KIRO_ACCESS_TOKEN={access_token} |
| KIRO_REFRESH_TOKEN={refresh_token} |
| """ |
| |
| with open('.env', 'w', encoding='utf-8') as f: |
| f.write(env_content) |
| |
| print("✅ .env文件已创建/更新") |
|
|
| def main(): |
| """主函数""" |
| print("🔍 正在读取Kiro token...") |
| |
| access_token, refresh_token = read_tokens() |
| |
| if access_token and refresh_token: |
| create_env_file(access_token, refresh_token) |
| print("✅ Token读取成功,服务即将启动...") |
| return 0 |
| else: |
| print("❌ 无法获取token,请检查:") |
| print("1. 是否已登录Kiro (https://kiro.dev)") |
| print("2. token文件是否存在: ~/.aws/sso/cache/kiro-auth-token.json") |
| print("3. 或手动创建.env文件并设置token") |
| return 1 |
|
|
| if __name__ == "__main__": |
| sys.exit(main()) |