Skip to content

Commit 7007017

Browse files
authored
Merge pull request #83 from wimglenn/aocd.cookies.get_working_tokens
separate token extraction logic from cookies CLI
2 parents 8268aa3 + 1f40be2 commit 7007017

File tree

3 files changed

+66
-51
lines changed

3 files changed

+66
-51
lines changed

.github/workflows/tests.yml

+15-5
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,34 @@ jobs:
1414

1515
strategy:
1616
matrix:
17-
os: [ubuntu-latest, macos-latest, windows-latest]
18-
python-version: ["2.7", "3.10", "pypy-2.7", "pypy-3.7"]
17+
os:
18+
- ubuntu-latest
19+
- macos-latest
20+
- windows-latest
21+
python-version:
22+
- "2.7"
23+
- "3.11"
24+
- "pypy-2.7"
25+
- "pypy-3.9"
1926

2027
steps:
21-
- uses: "actions/checkout@v2"
22-
- uses: "actions/setup-python@v2"
28+
- uses: "actions/checkout@v3"
29+
30+
- uses: "actions/setup-python@v4"
2331
with:
2432
python-version: "${{ matrix.python-version }}"
2533
architecture: x64
34+
2635
- name: "Install"
2736
run: |
2837
python -VV
2938
python -m pip install -q -r tests/requirements.txt
3039
python -m pip freeze --all
40+
3141
- name: "Run tests for ${{ matrix.python-version }} on ${{ matrix.os }}"
3242
run: python -m pytest --durations=10
3343

3444
- name: Upload coverage to Codecov
35-
uses: "codecov/codecov-action@v1"
45+
uses: "codecov/codecov-action@v3"
3646
with:
3747
fail_ci_if_error: true

aocd/cookies.py

+50-45
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,55 @@
1616
log = logging.getLogger(__name__)
1717

1818

19+
def get_working_tokens():
20+
log.debug("checking for installation of browser-cookie3 package")
21+
try:
22+
import browser_cookie3 as bc3 # soft dependency
23+
except ImportError:
24+
sys.exit("To use this feature you must pip install browser-cookie3")
25+
26+
log.info("checking browser cookies storage for auth tokens, this might pop up an auth dialog!")
27+
log.info("checking chrome cookie jar...")
28+
cookie_files = glob.glob(os.path.expanduser("~/.config/google-chrome/*/Cookies")) + [None]
29+
chrome_cookies = []
30+
for cookie_file in cookie_files:
31+
try:
32+
chrome = bc3.chrome(cookie_file=cookie_file, domain_name=".adventofcode.com")
33+
except Exception as err:
34+
log.debug("Couldn't scrape chrome - %s: %s", type(err), err)
35+
else:
36+
chrome_cookies += [c for c in chrome if c.name == "session"]
37+
log.info("%d candidates from chrome", len(chrome_cookies))
38+
chrome = chrome_cookies
39+
40+
log.info("checking firefox cookie jar...")
41+
try:
42+
firefox = bc3.firefox(domain_name=".adventofcode.com")
43+
except Exception as err:
44+
log.debug("Couldn't scrape firefox - %s: %s", type(err), err)
45+
firefox = []
46+
else:
47+
firefox = [c for c in firefox if c.name == "session"]
48+
log.info("%d candidates from firefox", len(firefox))
49+
50+
# order preserving de-dupe
51+
tokens = list({}.fromkeys([c.value for c in chrome + firefox]))
52+
removed = len(chrome + firefox) - len(tokens)
53+
if removed:
54+
log.info("Removed %d duplicate%s", removed, "s"[:removed-1])
55+
56+
result = {} # map of {token: auth source}
57+
for token in tokens:
58+
try:
59+
owner = get_owner(token)
60+
except DeadTokenError:
61+
pass
62+
else:
63+
result[token] = owner
64+
65+
return result
66+
67+
1968
def scrape_session_tokens():
2069
aocd_token_file = os.path.join(AOCD_CONFIG_DIR, "token")
2170
aocd_tokens_file = os.path.join(AOCD_CONFIG_DIR, "tokens.json")
@@ -63,51 +112,7 @@ def scrape_session_tokens():
63112
log.info("{} ({}) is owned by {}".format(token, name, owner))
64113
sys.exit(0)
65114

66-
log.debug("checking for installation of browser-cookie3 package")
67-
try:
68-
import browser_cookie3 as bc3 # soft dependency
69-
except ImportError:
70-
sys.exit("To use this feature you must pip install browser-cookie3")
71-
72-
log.info("checking browser cookies storage for auth tokens, this might pop up an auth dialog!")
73-
log.info("checking chrome cookie jar...")
74-
cookie_files = glob.glob(os.path.expanduser("~/.config/google-chrome/*/Cookies")) + [None]
75-
chrome_cookies = []
76-
for cookie_file in cookie_files:
77-
try:
78-
chrome = bc3.chrome(cookie_file=cookie_file, domain_name=".adventofcode.com")
79-
except Exception as err:
80-
log.debug("Couldn't scrape chrome - %s: %s", type(err), err)
81-
else:
82-
chrome_cookies += [c for c in chrome if c.name == "session"]
83-
log.info("%d candidates from chrome", len(chrome_cookies))
84-
chrome = chrome_cookies
85-
86-
log.info("checking firefox cookie jar...")
87-
try:
88-
firefox = bc3.firefox(domain_name=".adventofcode.com")
89-
except Exception as err:
90-
log.debug("Couldn't scrape firefox - %s: %s", type(err), err)
91-
firefox = []
92-
else:
93-
firefox = [c for c in firefox if c.name == "session"]
94-
log.info("%d candidates from firefox", len(firefox))
95-
96-
# order preserving de-dupe
97-
tokens = list({}.fromkeys([c.value for c in chrome + firefox]))
98-
removed = len(chrome + firefox) - len(tokens)
99-
if removed:
100-
log.info("Removed %d duplicate%s", removed, "s"[:removed-1])
101-
102-
working = {} # map of {token: auth source}
103-
for token in tokens:
104-
try:
105-
owner = get_owner(token)
106-
except DeadTokenError:
107-
pass
108-
else:
109-
working[token] = owner
110-
115+
working = get_working_tokens()
111116
if not working:
112117
sys.exit("could not find any working tokens in browser cookies, sorry :(")
113118

aocd/version.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "1.1.4"
1+
__version__ = "1.2.0"

0 commit comments

Comments
 (0)