返回提交历史
Modified
g4f/Provider/You.py
+5
-3
Modified
g4f/Provider/you/har_file.py
+82
-2
XFEstudio/gpt4free
stytch auth udpdate for provider
8add819c
代码差异
2 个文件
+87
-5
@@ -65,6 +65,7 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
65
65
timeout=(30, timeout)
66
66
) as session:
67
67
cookies = await cls.get_cookies(session) if chat_mode != "default" else None
68
68
69
upload = json.dumps([await cls.upload_file(session, cookies, to_bytes(image), image_name)]) if image else ""
69
70
headers = {
70
71
"Accept": "text/event-stream",
@@ -131,6 +132,7 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
131
132
132
133
@classmethod
133
134
async def get_cookies(cls, client: StreamSession) -> Cookies:
135
134
136
if not cls._cookies or cls._cookies_used >= 5:
135
137
cls._cookies = await cls.create_cookies(client)
136
138
cls._cookies_used = 0
@@ -151,8 +153,8 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
151
153
}}).encode()).decode()
152
154
153
155
def get_auth() -> str:
154
auth_uuid = "507a52ad-7e69-496b-aee0-1c9863c7c8"
155
auth_token = f"public-token-live-{auth_uuid}bb:public-token-live-{auth_uuid}19"
156
auth_uuid = "507a52ad-7e69-496b-aee0-1c9863c7c819"
157
auth_token = f"public-token-live-{auth_uuid}:public-token-live-{auth_uuid}"
156
158
auth = base64.standard_b64encode(auth_token.encode()).decode()
157
159
return f"Basic {auth}"
158
160
@@ -172,12 +174,12 @@ class You(AsyncGeneratorProvider, ProviderModelMixin):
172
174
"dfp_telemetry_id": await get_dfp_telemetry_id(),
173
175
"email": f"{user_uuid}@gmail.com",
174
176
"password": f"{user_uuid}#{user_uuid}",
175
"dfp_telemetry_id": f"{uuid.uuid4()}",
176
177
"session_duration_minutes": 129600
177
178
}
178
179
) as response:
179
180
await raise_for_status(response)
180
181
session = (await response.json())["data"]
182
181
183
return {
182
184
"stytch_session": session["session_token"],
183
185
'stytch_session_jwt': session["session_jwt"],
@@ -4,6 +4,8 @@ import json
4
4
import os
5
5
import random
6
6
import uuid
7
import asyncio
8
import requests
7
9
8
10
from ...requests import StreamSession, raise_for_status
9
11
@@ -65,8 +67,86 @@ async def sendRequest(tmpArk: arkReq, proxy: str = None):
65
67
return await response.text()
66
68
67
69
async def get_dfp_telemetry_id(proxy: str = None):
68
return str(uuid.uuid4())
70
return await telemetry_id_with_driver(proxy)
69
71
global chatArks
70
72
if chatArks is None:
71
73
chatArks = readHAR()
72
return await sendRequest(random.choice(chatArks), proxy)
74
return await sendRequest(random.choice(chatArks), proxy)
75
76
async def telemetry_id_with_driver(proxy: str = None):
77
from ...debug import logging
78
if logging:
79
print('getting telemetry_id for you.com with nodriver')
80
try:
81
import nodriver as uc
82
from nodriver import start, cdp, loop
83
except ImportError:
84
if logging:
85
print('nodriver not found, random uuid (may fail)')
86
return str(uuid.uuid4())
87
88
CAN_EVAL = False
89
payload_received = False
90
payload = None
91
92
try:
93
browser = await start()
94
tab = browser.main_tab
95
96
async def send_handler(event: cdp.network.RequestWillBeSent):
97
nonlocal CAN_EVAL, payload_received, payload
98
if 'telemetry.js' in event.request.url:
99
CAN_EVAL = True
100
if "/submit" in event.request.url:
101
payload = event.request.post_data
102
payload_received = True
103
104
tab.add_handler(cdp.network.RequestWillBeSent, send_handler)
105
await browser.get("https://you.com")
106
107
while not CAN_EVAL:
108
await tab.sleep(1)
109
110
await tab.evaluate('window.GetTelemetryID("public-token-live-507a52ad-7e69-496b-aee0-1c9863c7c819", "https://telemetry.stytch.com/submit");')
111
112
while not payload_received:
113
await tab.sleep(.1)
114
115
except Exception as e:
116
print(f"Error occurred: {str(e)}")
117
118
finally:
119
try:
120
await tab.close()
121
except Exception as e:
122
print(f"Error occurred while closing tab: {str(e)}")
123
124
try:
125
await browser.stop()
126
except Exception as e:
127
pass
128
129
headers = {
130
'Accept': '*/*',
131
'Accept-Language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
132
'Connection': 'keep-alive',
133
'Content-type': 'application/x-www-form-urlencoded',
134
'Origin': 'https://you.com',
135
'Referer': 'https://you.com/',
136
'Sec-Fetch-Dest': 'empty',
137
'Sec-Fetch-Mode': 'cors',
138
'Sec-Fetch-Site': 'cross-site',
139
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
140
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
141
'sec-ch-ua-mobile': '?0',
142
'sec-ch-ua-platform': '"macOS"',
143
}
144
145
proxies = {
146
'http': proxy,
147
'https': proxy} if proxy else None
148
149
response = requests.post('https://telemetry.stytch.com/submit',
150
headers=headers, data=payload, proxies=proxies)
151
152
return (response.text)