Skip to content

Commit b1bc781

Browse files
authored
Merge pull request #2 from code-yeongyu/feature/replace-yt-dlp
Replace `yt-dlp` to `browser-cookie3` for cookie parsing
2 parents 2ac3ec3 + e8632f0 commit b1bc781

File tree

8 files changed

+129
-251
lines changed

8 files changed

+129
-251
lines changed

poetry.lock

Lines changed: 59 additions & 239 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ select = ["PLE", "PLW", "E", "W", "F", "I", "Q", "B"]
4242
[tool.poetry.dependencies]
4343
python = "^3.9"
4444
poetry = "^1.4.2"
45-
yt-dlp = "^2023.3.4"
4645
httpx = "^0.24.0"
46+
browser-cookie3 = "^0.17.1"
4747

4848
[tool.pyright.defineConstant]
4949
DEBUG = true

revChatGPTAuth/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
11
from .chatgpt_access_token_parser import ChatGPTAccessTokenParser as ChatGPTAccessTokenParser
22
from .chatgpt_access_token_parser import get_access_token as get_access_token
33
from .openai_cookie_parser import OpenAICookieParser as OpenAICookieParser
4+
from .supported_browser import SupportedBrowser as SupportedBrowser
5+
from .utils import get_cookie_loader as get_cookie_loader
6+
from .utils import load_cookies as load_cookies

revChatGPTAuth/chatgpt_access_token_parser.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
from typing import Union
2+
13
import httpx
24

5+
from revChatGPTAuth.supported_browser import SupportedBrowser
6+
37
from .openai_cookie_parser import OpenAICookieParser
48

59

610
class ChatGPTAccessTokenParser:
711

8-
def __init__(self, browser_name: str):
12+
def __init__(self, browser_name: SupportedBrowser):
913
self.openai_cookie_parser = OpenAICookieParser(browser_name)
1014

11-
def get_openai_chatgpt_access_token(self) -> str:
15+
def get_access_token(self) -> str:
1216
cookie = self._get_stringified_cookies()
1317
response = self._auth_openai(cookie)
1418
response.raise_for_status()
@@ -25,6 +29,8 @@ def _auth_openai(self, cookie: str) -> httpx.Response:
2529
return response
2630

2731

28-
def get_access_token(browser_name: str) -> str:
32+
def get_access_token(browser_name: Union[str, SupportedBrowser]) -> str:
33+
if isinstance(browser_name, str):
34+
browser_name = SupportedBrowser(browser_name)
2935
chatgpt_access_token_parser = ChatGPTAccessTokenParser(browser_name)
30-
return chatgpt_access_token_parser.get_openai_chatgpt_access_token()
36+
return chatgpt_access_token_parser.get_access_token()

revChatGPTAuth/openai_cookie_parser.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
from http.cookiejar import Cookie
22
from typing import Any, Optional
33

4-
from yt_dlp.cookies import SUPPORTED_BROWSERS, extract_cookies_from_browser
5-
from yt_dlp.utils import YoutubeDLCookieJar
4+
from revChatGPTAuth.supported_browser import SupportedBrowser
5+
from revChatGPTAuth.utils import load_cookies
66

77

88
class OpenAICookieParser:
99

10-
def __init__(self, browser_name: str):
11-
if browser_name not in SUPPORTED_BROWSERS:
12-
raise ValueError(f'Browser {browser_name} is not supported. Supported browsers are: {SUPPORTED_BROWSERS}')
10+
SUPPORTED_BROWSERS = [browser.value for browser in SupportedBrowser]
11+
12+
def __init__(self, browser_name: SupportedBrowser):
1313
self.BROWSER_NAME = browser_name
1414

1515
def parse_cookie(self):
16-
all_cookies: YoutubeDLCookieJar = extract_cookies_from_browser(self.BROWSER_NAME)
16+
all_cookies = load_cookies(self.BROWSER_NAME)
1717
openai_cookies = self._get_openai_cookies(all_cookies.__dict__)
1818
openai_cookies_dict: dict[str, Optional[str]] = {key: cookie.value for key, cookie in openai_cookies.items()}
1919
return openai_cookies_dict

revChatGPTAuth/supported_browser.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from enum import Enum
2+
3+
4+
class SupportedBrowser(Enum):
5+
'''Supported browsers for cookie extraction.'''
6+
CHROME = 'chrome'
7+
FIREFOX = 'firefox'
8+
OPERA = 'opera'
9+
OPERA_GX = 'opera gx'
10+
EDGE = 'edge'
11+
CHROMIUM = 'chromium'
12+
BRAVE = 'brave'
13+
VIVALDI = 'vivaldi'
14+
SAFARI = 'safari'

revChatGPTAuth/test/test_chatgpt_access_token_parser.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def test_get_openai_chatgpt_access_token(
2727
chatgpt_access_token_parser = ChatGPTAccessTokenParser('chrome')
2828

2929
# when
30-
access_token = chatgpt_access_token_parser.get_openai_chatgpt_access_token()
30+
access_token = chatgpt_access_token_parser.get_access_token()
3131

3232
# then
3333
mock_cookie_parser.parse_cookie.assert_called_once()

revChatGPTAuth/utils.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
from http.cookiejar import CookieJar
2+
from typing import Callable, Optional
3+
4+
import browser_cookie3
5+
6+
from revChatGPTAuth.supported_browser import SupportedBrowser
7+
8+
9+
def get_cookie_loader(browser_name: Optional[SupportedBrowser]) -> Callable[[str], CookieJar]:
10+
if not browser_name:
11+
return browser_cookie3.load
12+
if browser_name == SupportedBrowser.CHROME:
13+
return browser_cookie3.chrome
14+
if browser_name == SupportedBrowser.FIREFOX:
15+
return browser_cookie3.firefox
16+
if browser_name == SupportedBrowser.OPERA:
17+
return browser_cookie3.opera
18+
if browser_name == SupportedBrowser.OPERA_GX:
19+
return browser_cookie3.opera_gx
20+
if browser_name == SupportedBrowser.EDGE:
21+
return browser_cookie3.edge
22+
if browser_name == SupportedBrowser.CHROMIUM:
23+
return browser_cookie3.chromium
24+
if browser_name == SupportedBrowser.BRAVE:
25+
return browser_cookie3.brave
26+
if browser_name == SupportedBrowser.VIVALDI:
27+
return browser_cookie3.vivaldi
28+
if browser_name == SupportedBrowser.SAFARI:
29+
return browser_cookie3.safari
30+
raise ValueError(f'Unsupported browser: {browser_name}')
31+
32+
33+
def load_cookies(browser_name: Optional[SupportedBrowser] = None, domain: str = '') -> CookieJar:
34+
cookie_loader = get_cookie_loader(browser_name=browser_name)
35+
return cookie_loader(domain)

0 commit comments

Comments
 (0)