XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet
公开
关注 0 Fork 0 Star 1
返回提交历史

XFEstudio/gpt4free

stytch auth udpdate for provider

8add819c
abc <98614666+xtekky@users.noreply.github.com>
提交于

代码差异

2 个文件 +87 -5
Modified g4f/Provider/You.py +5 -3
@@ -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"],
Modified g4f/Provider/you/har_file.py +82 -2
@@ -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)