@@ -20,12 +20,16 @@ class AuthBackend:
2020 username : str
2121 password : str
2222 cookies : list [Cookie ]
23+ cookies_path : str | None
24+ cookies_str : str | None
25+ cookies_list : list [Cookie ]
26+ sessionid : str | None
2327
2428 def __init__ (
2529 self ,
2630 username : str = "" ,
2731 password : str = "" ,
28- cookies_list : list [Cookie ] = [] ,
32+ cookies_list : list [Cookie ] | None = None ,
2933 cookies : str | None = None ,
3034 cookies_str : str | None = None ,
3135 sessionid : str | None = None ,
@@ -42,12 +46,16 @@ def __init__(
4246 if (username and not password ) or (password and not username ):
4347 raise InsufficientAuth ()
4448
45- self .cookies = self .get_cookies (path = cookies ) if cookies else []
46- self .cookies += self .get_cookies (cookies_str = cookies_str ) if cookies_str else []
47- self .cookies += cookies_list
48- self .cookies += [{"name" : "sessionid" , "value" : sessionid }] if sessionid else []
49+ self .cookies_path = cookies
50+ self .cookies_str = cookies_str
51+ self .cookies_list = list (cookies_list ) if cookies_list else []
52+ self .sessionid = sessionid
53+ self .cookies = []
4954
50- if not (self .cookies or (username and password )):
55+ has_cookie_input = bool (
56+ self .cookies_path or self .cookies_str or self .cookies_list or self .sessionid
57+ )
58+ if not (has_cookie_input or (username and password )):
5159 raise InsufficientAuth ()
5260
5361 self .username = username
@@ -59,17 +67,24 @@ def __init__(
5967 logger .debug (green ("Authenticating browser with username and password" ))
6068 elif sessionid :
6169 logger .debug (green ("Authenticating browser with sessionid" ))
62- elif cookies_list :
70+ elif self . cookies_list :
6371 logger .debug (green ("Authenticating browser with cookies_list" ))
6472
6573 def authenticate_agent (self , page : Page ) -> Page :
6674 """
6775 Authenticates the agent using the browser backend
6876 """
69- # tries to use cookies
77+ if not self .cookies :
78+ self .cookies = self ._resolve_cookies ()
79+
7080 if not self .cookies and self .username and self .password :
7181 self .cookies = login (page , username = self .username , password = self .password )
7282
83+ if not self .cookies :
84+ raise InsufficientAuth (
85+ "No valid authentication source found. Provide a valid cookies file, cookies list/string, sessionid, or username/password."
86+ )
87+
7388 logger .debug (green ("Authenticating browser with cookies" ))
7489
7590 # Fix cookie keys for Playwright
@@ -128,6 +143,30 @@ def authenticate_agent(self, page: Page) -> Page:
128143
129144 return page
130145
146+ def _resolve_cookies (self ) -> list [Cookie ]:
147+ resolved_cookies : list [Cookie ] = []
148+
149+ if self .cookies_path :
150+ try :
151+ resolved_cookies .extend (self .get_cookies (path = self .cookies_path ))
152+ except OSError as error :
153+ logger .warning (
154+ "Could not read cookies file '%s': %s" ,
155+ self .cookies_path ,
156+ error ,
157+ )
158+
159+ if self .cookies_str :
160+ resolved_cookies .extend (self .get_cookies (cookies_str = self .cookies_str ))
161+
162+ if self .cookies_list :
163+ resolved_cookies .extend (self .cookies_list )
164+
165+ if self .sessionid :
166+ resolved_cookies .append ({"name" : "sessionid" , "value" : self .sessionid })
167+
168+ return resolved_cookies
169+
131170 def get_cookies (
132171 self , path : str | None = None , cookies_str : str | None = None
133172 ) -> list [Cookie ]:
0 commit comments