baohuixiao commited on
Commit
000f833
·
verified ·
1 Parent(s): 8c4d9ff

Upload 53 files

Browse files
warp2protobuf/.DS_Store ADDED
Binary file (6.15 kB). View file
 
warp2protobuf/core/auth.py CHANGED
@@ -6,18 +6,29 @@ JWT Authentication for Warp API
6
  Handles JWT token management, refresh, and validation.
7
  Integrates functionality from refresh_jwt.py.
8
  """
9
- import base64
10
- import json
11
- import os
12
- import time
13
- from pathlib import Path
14
- import httpx
15
- import asyncio
16
- from dotenv import load_dotenv, set_key
17
-
18
- from ..config.settings import REFRESH_TOKEN_B64, REFRESH_URL, CLIENT_VERSION, OS_CATEGORY, OS_NAME, OS_VERSION
19
  from .logging import logger, log
20
- from .proxy_manager import AsyncProxyManager # 新增: 导入代理管理器
 
 
 
 
 
 
 
 
 
 
 
21
 
22
 
23
  def decode_jwt_payload(token: str) -> dict:
@@ -137,26 +148,32 @@ async def refresh_jwt_token() -> dict:
137
  return {}
138
 
139
 
140
- def update_env_file(new_jwt: str) -> bool:
141
- env_path = Path(".env")
142
- try:
143
- set_key(str(env_path), "WARP_JWT", new_jwt)
144
- logger.info("Updated .env file with new JWT token")
145
- return True
146
- except Exception as e:
147
- logger.error(f"Error updating .env file: {e}")
148
- return False
149
-
150
-
151
- def update_env_refresh_token(refresh_token: str) -> bool:
152
- env_path = Path(".env")
153
- try:
154
- set_key(str(env_path), "WARP_REFRESH_TOKEN", refresh_token)
155
- logger.info("Updated .env with WARP_REFRESH_TOKEN")
156
- return True
157
- except Exception as e:
158
- logger.error(f"Error updating .env WARP_REFRESH_TOKEN: {e}")
159
- return False
 
 
 
 
 
 
160
 
161
 
162
  async def check_and_refresh_token() -> bool:
@@ -195,20 +212,29 @@ async def check_and_refresh_token() -> bool:
195
 
196
 
197
  async def get_valid_jwt() -> str:
198
- from dotenv import load_dotenv as _load
199
- _load(override=True)
 
 
 
200
  jwt = os.getenv("WARP_JWT")
201
  if not jwt:
202
  logger.info("No JWT token found, attempting to refresh...")
203
  if await check_and_refresh_token():
204
- _load(override=True)
 
 
 
205
  jwt = os.getenv("WARP_JWT")
206
  if not jwt:
207
  raise RuntimeError("WARP_JWT is not set and refresh failed")
208
  if is_token_expired(jwt, buffer_minutes=2):
209
  logger.info("JWT token is expired or expiring soon, attempting to refresh...")
210
  if await check_and_refresh_token():
211
- _load(override=True)
 
 
 
212
  jwt = os.getenv("WARP_JWT")
213
  if not jwt or is_token_expired(jwt, buffer_minutes=0):
214
  logger.warning("Warning: New token has short expiry but proceeding anyway")
 
6
  Handles JWT token management, refresh, and validation.
7
  Integrates functionality from refresh_jwt.py.
8
  """
9
+ import base64
10
+ import json
11
+ import os
12
+ import time
13
+ from pathlib import Path
14
+ import httpx
15
+ import asyncio
16
+ from dotenv import load_dotenv, set_key
17
+
18
+ from ..config.settings import REFRESH_TOKEN_B64, REFRESH_URL, CLIENT_VERSION, OS_CATEGORY, OS_NAME, OS_VERSION
19
  from .logging import logger, log
20
+ from .proxy_manager import AsyncProxyManager # 新增: 导入代理管理器
21
+
22
+
23
+ DEFAULT_DATA_DIR = os.getenv("DATA_DIR", "/data")
24
+ ENV_FILE_PATH = Path(os.getenv("ENV_FILE_PATH", os.path.join(DEFAULT_DATA_DIR, ".env")))
25
+
26
+ try:
27
+ ENV_FILE_PATH.parent.mkdir(parents=True, exist_ok=True)
28
+ except Exception:
29
+ pass
30
+
31
+ load_dotenv(dotenv_path=ENV_FILE_PATH if ENV_FILE_PATH.exists() else None, override=True)
32
 
33
 
34
  def decode_jwt_payload(token: str) -> dict:
 
148
  return {}
149
 
150
 
151
+ def update_env_file(new_jwt: str) -> bool:
152
+ os.environ["WARP_JWT"] = new_jwt
153
+ if ENV_FILE_PATH is None:
154
+ return True
155
+
156
+ try:
157
+ set_key(str(ENV_FILE_PATH), "WARP_JWT", new_jwt)
158
+ logger.info("Updated env file with new JWT token")
159
+ return True
160
+ except Exception as e:
161
+ logger.warning(f"Unable to persist JWT to env file {ENV_FILE_PATH}: {e}")
162
+ return True
163
+
164
+
165
+ def update_env_refresh_token(refresh_token: str) -> bool:
166
+ if refresh_token:
167
+ os.environ["WARP_REFRESH_TOKEN"] = refresh_token
168
+ if ENV_FILE_PATH is None:
169
+ return True
170
+ try:
171
+ set_key(str(ENV_FILE_PATH), "WARP_REFRESH_TOKEN", refresh_token)
172
+ logger.info("Updated env with WARP_REFRESH_TOKEN")
173
+ return True
174
+ except Exception as e:
175
+ logger.warning(f"Unable to persist refresh token to env file {ENV_FILE_PATH}: {e}")
176
+ return True
177
 
178
 
179
  async def check_and_refresh_token() -> bool:
 
212
 
213
 
214
  async def get_valid_jwt() -> str:
215
+ from dotenv import load_dotenv as _load
216
+ if ENV_FILE_PATH is not None:
217
+ _load(dotenv_path=ENV_FILE_PATH, override=True)
218
+ else:
219
+ _load(override=True)
220
  jwt = os.getenv("WARP_JWT")
221
  if not jwt:
222
  logger.info("No JWT token found, attempting to refresh...")
223
  if await check_and_refresh_token():
224
+ if ENV_FILE_PATH is not None:
225
+ _load(dotenv_path=ENV_FILE_PATH, override=True)
226
+ else:
227
+ _load(override=True)
228
  jwt = os.getenv("WARP_JWT")
229
  if not jwt:
230
  raise RuntimeError("WARP_JWT is not set and refresh failed")
231
  if is_token_expired(jwt, buffer_minutes=2):
232
  logger.info("JWT token is expired or expiring soon, attempting to refresh...")
233
  if await check_and_refresh_token():
234
+ if ENV_FILE_PATH is not None:
235
+ _load(dotenv_path=ENV_FILE_PATH, override=True)
236
+ else:
237
+ _load(override=True)
238
  jwt = os.getenv("WARP_JWT")
239
  if not jwt or is_token_expired(jwt, buffer_minutes=0):
240
  logger.warning("Warning: New token has short expiry but proceeding anyway")