
    1xh                     |   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZd dlZd dlmZ d dlmZ d dlmZmZmZ ej                            d          sdej                                        v r	 d dlZd dlmZ dZn# e$ r	 d dlZd	ZY nw xY wdZej        d
k    r	 d dlZn# e$ r Y nw xY wd dl Z!d dl"m#Z# d dl$m%Z% d dl&m'Z' dZ(dZ) G d de*          Z+d Z,	 dWdZ-d Z.dee/e0f         fdZ1de2de0fdZ3de2de0fdZ4dXdee0e2f         dee0e2f         fdZ5dXdee0e2f         dee0e2f         fdZ6dXdee0e2f         dee0e2f         fdZ7d  Z8 G d! d"          Z9 G d# d$          Z: G d% d&          Z; G d' d(          Z< G d) d*e<          Z= G d+ d,e<          Z> G d- d.e<          Z? G d/ d0e<          Z@ G d1 d2e<          ZA G d3 d4e<          ZB G d5 d6e<          ZC G d7 d8e<          ZD G d9 d:          ZE G d; d<eE          ZF G d= d>eE          ZG G d? d@          ZH G dA dB          ZI G dC dD          ZJdE ZKdYdGZLdYdHZMdYdIZNdYdJZOdYdKZPdYdLZQdYdMZRdYdNZSdYdOZTdYdPZUdYdQZVdZdRZWdZdSZXeLeNeOePeQeReSeTeUeVeWeXeMgZYd[dTZZg dUeYz   Z[e\dVk    r e] eZ                       dS dS )\    N)BytesIO)Path)DictListUnionlinuxbsd)open_dbus_connectionFTwin32)AES)PBKDF2)unpadz%Load browser cookies into a cookiejars   peanutsc                       e Zd ZdS )BrowserCookieErrorN)__name__
__module____qualname__     T/home/visionen/capture/venv/lib/python3.11/site-packages/browser_cookie3/__init__.pyr   r   2   s        Dr   r   c                  4   ddl m} m}m}m}m}m} 	  |d |           } ||d          } ||d          \  }}	|	|k    r t          j        	                    |          }n|	|k    rd S n# t          $ r Y d S w xY wt          j                            |dd          S )Nr   )HKEY_LOCAL_MACHINEREG_EXPAND_SZREG_SZConnectRegistry	OpenKeyExQueryValueExzSOFTWARE\Policies\Google\ChromeUserDataDirDefaultCookies)winregr   r   r   r   r   r   ospath
expandvarsOSErrorjoin)
r   r   r   r   r   r   root
policy_keyuser_data_dirtype_s
             r   _windows_group_policy_pathr+   6   s   B B B B B B B B B B B B B B B B	t%788Yt%GHH
+|JFFuM!!G..}==MMf__4   tt7<<y)<<<s   AA( (
A65A6r   c                    dd l dd l G fddj                  t          fd| |dg          \  }}}                                }d}	j        j                                                |                              |                              |          |||	                    |                    st          d          |j
        }
                    t          |j                            }                    ||j        |j                   t          j        j        j        ||j        g           |r	|
|j        fS |
|j
        fS )Nr   c                   d    e Zd Zd j        j        fd                      j                  fgZdS )'_crypt_unprotect_data.<locals>.DataBlobcbDatapbDataN)r   r   r   wintypesDWORDPOINTERc_char_fields_)ctypess   r   DataBlobr.   O   s9        v,-v~~fm445
r   r7   c                 \     t          |                               |                     S N)lencreate_string_buffer)xr7   r6   s    r   <lambda>z'_crypt_unprotect_data.<locals>.<lambda>V   s'    ((3q666#>#>q#A#ABB r   r      z,Failed to decrypt the cipher text with DPAPI)r6   ctypes.wintypes	Structuremap	c_wchar_pwindllcrypt32CryptUnprotectDatabyrefRuntimeErrorvaluer;   intr/   memmover0   kernel32	LocalFreeraw)cipher_textentropyreservedprompt_structis_keyblob_inblob_entropyblob_outdescCRYPTPROTECT_UI_FORBIDDENdescription
buffer_outr7   r6   s               @@r   _crypt_unprotect_datarZ   H   s    MMM
 
 
 
 
 
 
6# 
 
 
 '*BBBBB	gs#' '#G\8 D $= 33LL!!6<<$ $||L11m%>A A  K IJJJ*K,,S-A-ABBJ
NN:x@@@(4*ABBB -JN**J,,,r   c                     ddddd|d| g}t          j        |t           j        t           j                  }|                                \  }}|j        dk    rt
          S |                                S )	z;Retrieve password used to encrypt cookies from OSX Keychainz/usr/bin/securityz-qzfind-generic-passwordz-wz-az-s)stdoutstderrr   )
subprocessPopenPIPEcommunicate
returncodeCHROMIUM_DEFAULT_PASSWORDstrip)osx_key_serviceosx_key_usercmdprocouterrs         r   _get_osx_keychain_passwordrk   o   sv     &=|T?<CC
#-?4 4 4D!!HC!((99;;r   r#   c                     t          | t                    s| dd} t          j                            t          j        | d         d          | d                   S )NAPPDATA)r#   envrn    r#   )
isinstancedictr"   r#   r&   getenv)r#   s    r   _expand_win_pathrs   |   sK    dD!! 0Y//7<<	$u+r22DLAAAr   pathsos_namec              #   >  K   |                                 }|dv sJ t          | t                    s| g} |dk    rt          t          |           } nt          t
          j        j        |           } | D ]*}t          t          j	        |                    D ]}|V  +dS )z-Expands user paths on Linux, OSX, and windows)windowsosxr   rw   N)
lowerrp   listrA   rs   r"   r#   
expandusersortedglob)rt   ru   r#   is       r   _expand_paths_implr      s       mmooG11111eT"" )$e,,BG&..  	$(( 	 	AGGGG	 r   c                 >    t          t          | |          d           S r9   )nextr   )rt   ru   s     r   _expand_pathsr      s    "5'22D999r   channelc                 t    |pdg}t          |t                    s|g}t          | t                    s| g} | |fS Nro   )rp   rz   )rt   r   s     r   "_normalize_genarate_paths_chromiumr      sI    o"Ggt$$ )eT"" '>r   c                     t          | |          \  } }g }|D ]0}| D ]+}|                    |                    |                     ,1|S )z;Generate paths for chromium based browsers on *nix systems.r   r   appendformatrt   r   genararated_pathschanr#   s        r   _genarate_nix_paths_chromiumr      sp     8wGGNE7 @ @ 	@ 	@D$$T[[[%>%>????	@r   c           	      R   t          | |          \  } }g }|D ]}| D ]}|                    dd|                    |          z   d           |                    d|                    |          d           |                    d|                    |          d           |S )z5Generate paths for chromium based browsers on windowsrm   z	..\Local\r   rn   r#   LOCALAPPDATAr   r   s        r   _genarate_win_paths_chromiumr      s     8wGGNE7 G G 	G 	GD$$!=4;;t;;T;T+TUUW W W$$&D0I0IJJL L L$$!4;;t;+D+DEEG G G G	G r   c                 R    	 |                      d          S # t          $ r | cY S w xY w)Nutf-8)decodeUnicodeDecodeError)datas    r   _text_factoryr      s=    {{7###   s    &&c                   .    e Zd Zd Zd Zd Zd ZddZdS )_JeepneyConnectionc                 <    t          j        |||          | _        d S r9   )jeepneyDBusAddress _JeepneyConnection__dbus_address)selfobject_pathbus_name	interfaces       r   __init__z_JeepneyConnection.__init__   s$    %19. .r   c                 ,    t                      | _        | S r9   )r
   _JeepneyConnection__connectionr   s    r   	__enter__z_JeepneyConnection.__enter__   s    022r   c                 8    | j                                          d S r9   r   closer   exc_type	exc_value	tracebacks       r   __exit__z_JeepneyConnection.__exit__       !!!!!r   c                 8    | j                                          d S r9   r   r   s    r   r   z_JeepneyConnection.close   r   r   Nc                 8   t          j        | j        |||          }| j                            |          }|j        j        t           j        j        k    rt          |j
        d                   t          |j
                  dk    r|j
        d         n|j
        S )Nr   r>   )r   new_method_callr   r   send_and_get_replyheadermessage_typeMessageTypeerrorrG   bodyr:   )r   method_name	signatureargsmethodresponses         r   call_methodz_JeepneyConnection.call_method   s    (i? ?$77???'7+>+DDDx}Q/000#&x}#5#5#:#:x}QMr   r9   )r   r   r   r   r   r   r   r   r   r   r   r   r      sj        . . .  " " "" " "N N N N N Nr   r   c                   J    e Zd ZdZdZd Zd Zd ZdedefdZ	d	 Z
d
 Zd ZdS )_LinuxPasswordManagerzJRetrieve password used to encrypt cookies from KDE Wallet or SecretServicezbrowser-cookie3c                 ^    |r| j         | j        d| _        d S | j        | j        d| _        d S )N)kwalletsecretstorage)2_LinuxPasswordManager__get_kdewallet_password_dbus2_LinuxPasswordManager__get_secretstorage_item_dbus"_LinuxPasswordManager__methods_map5_LinuxPasswordManager__get_kdewallet_password_jeepney5_LinuxPasswordManager__get_secretstorage_item_jeepney)r   use_dbuss     r   r   z_LinuxPasswordManager.__init__   sN     		=!%!C" "D  @!%!F" "Dr   c                     	 |                      |          S # t          $ r Y nw xY w	  | j                            d          |          S # t          $ r Y nw xY wt          S )Nr   )1_LinuxPasswordManager__get_secretstorage_passwordrG   r   getrc   )r   os_crypt_names     r   get_passwordz"_LinuxPasswordManager.get_password   s    	44]CCC 	 	 	D		44%)))44]CCC 	 	 	D	 )(s    
$$"A 
AAc                     ddg}|D ]8}	  | j                             d          ||          c S # t          $ r Y 5w xY wt          d|           )N%chrome_libsecret_os_crypt_password_v2%chrome_libsecret_os_crypt_password_v1r   Can not find secret for )r   r   rG   )r   r   schemasschemas       r   __get_secretstorage_passwordz2_LinuxPasswordManager.__get_secretstorage_password   s    ::< 	 	F>t)--o>>v}UUUUU   EmEEFFFs   #0
==r   applicationc                    t          j        t          j                              5 }	 t          j        |                    ddd          d          }n'# t          j        j        $ r t          d          w xY w|	                    ||d          }t          t          d |                    }t          |          dk    rt          d	|           |d         d         }|                    |g           |                    d
t          j        dd                    \  }}|                    |g|          |         \  }}}}t#          |          cd d d            S # 1 swxY w Y   d S )Norg.freedesktop.secrets/org/freedesktop/secretsForg.freedesktop.Secret.ServicezGThe name org.freedesktop.secrets was not provided by any .service filesz
xdg:schemar   c                      t          |           S r9   r:   r<   s    r   r=   zE_LinuxPasswordManager.__get_secretstorage_item_dbus.<locals>.<lambda>      A r   r   r   plainro   r>   )variant_level)
contextlibclosingdbus
SessionBus	Interface
get_object
exceptionsDBusExceptionrG   SearchItemsrz   filterr:   UnlockOpenSessionString
GetSecretsbytes)	r   r   r   
connectionsecret_servicer   _sessionsecrets	            r   __get_secretstorage_item_dbusz3_LinuxPasswordManager.__get_secretstorage_item_dbus  s    1 122 	!j_!%))13MuV V4" "
 ?0 _ _ _"]_ _ __ )44$*6 6  K v&6&6DDEEK;1$$"#Kk#K#KLLL%a.+K!!;-000'33Rq999; ;JAw,77w( ((35OAq&!==1	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s)   E#*AE#$A77CE##E'*E'c                 8   |                                  d}|                                  d}t          j        t          j                              5 }	 |                    ddd          }n'# t          j        j        $ r t          d          w xY wt          j	        |d          }|
                    |                                t          j        d          | j                  }|                    ||| j                  s/|                    |d| j                   t          d	| d
          |                    |||| j                  }|                    |d| j                   |                    d          cd d d            S # 1 swxY w Y   d S )N Keys Safe Storageorg.kde.kwalletd5/modules/kwalletd5FzAThe name org.kde.kwalletd5 was not provided by any .service filesorg.kde.KWalletr   KDE Wallet folder  not found.r   )
capitalizer   r   r   r   r   r   r   rG   r   opennetworkWalletInt64_APP_ID	hasFolderr   readPasswordencode)	r   r   folderkeyr   kwalletd5_object	kwalletd5handlepasswords	            r   __get_kdewallet_password_dbusz3_LinuxPasswordManager.__get_kdewallet_password_dbus!  s   !,,..555))++::: 1 122 	,jY#-#8#8')=u$F $F  ?0 Y Y Y"WY Y YY '79JKKI^^''))4:a==$,H HF&&vvt|DD Mt|<<<"#K#K#K#KLLL --T\3 3HOOFE4<888??7++!	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s+   FA.-F.$BC0FFFc                    g d}t          | 5 }|                    dd||d          }t          t          d |                    }t	          |          dk    rt          d|           |d         d         }|                    dd	|g           |                    d
ddd          \  }}|                    dd|g|          |         \  }}}}|cd d d            S # 1 swxY w Y   d S )N)r   r   r   r   za{ss}r   c                      t          |           S r9   r   r   s    r   r=   zH_LinuxPasswordManager.__get_secretstorage_item_jeepney.<locals>.<lambda><  r   r   r   r   r   aor   svr   )sro   r   aoo)r   r   rz   r   r:   rG   )	r   r   r   r   r   r   r   r   r   s	            r    __get_secretstorage_item_jeepneyz6_LinuxPasswordManager.__get_secretstorage_item_jeepney6  sh   2 2 2& 	*$00wvk(Z(Z\ \Kv&6&6DDEEK;1$$"#Kk#K#KLLL%a.+K""8TK=AAA#//tWi9 9JAw(44ek]G= ==HJOAq&!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   CCC#&C#c           	      `   |                                  d}|                                  d}t          ddd          5 }|                    d          }|                    dd|d	| j                  }|                    d
d||| j                  }|s1|                    dd|d| j                   t	          d| d          |                    dd|||| j                  }|                    dd|d| j                   |                    d          cd d d            S # 1 swxY w Y   d S )Nr   r   r   r   r   r  r  sxsr   r  issr   ibsFr   r   r  isssr   )r  r   r   r  rG   r  )	r   r   r	  r
  r   network_walletr  
has_folderr  s	            r    __get_kdewallet_password_jeepneyz6_LinuxPasswordManager.__get_kdewallet_password_jeepneyG  s   !,,..555))++::: 46IK\]] 	,ak'33ODDN++~q$,@ @F#//UFFDLB BJ M&&UFE4<A A A"#K#K#K#KLLL!--T\K KH""7E65$,OOO??7++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,s    CD##D'*D'N)r   r   r   __doc__r  r   r   r   strr   r   r   r   r   r   r   r   r      s        TTG
 
 

) 
) 
)G G G!C !c ! ! ! !6, , ,*  ", , , , ,r   r   c                   `    e Zd Zddej        defdZd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd ZdS )_DatabaseConnetionFdatabase_filetry_legacy_firstc                    || _         d | _        d | _        | j        g| _        |r!| j                            d| j                   n| j                            | j                   t          r!| j                            | j	                   d S d S Nr   )
!_DatabaseConnetion__database_file$_DatabaseConnetion__temp_cookie_file_DatabaseConnetion__connection,_DatabaseConnetion__sqlite3_connect_readonly_DatabaseConnetion__methodsinsert)_DatabaseConnetion__get_connection_legacyr   
shadowcopy-_DatabaseConnetion__get_connection_shadowcopy)r   r#  r$  s      r   r   z_DatabaseConnetion.__init__[  s    ,"& +
  	@N!!!T%ABBBBN!!$">??? 	DN!!$"BCCCCC	D 	Dr   c                 *    |                                  S r9   )get_connectionr   s    r   r   z_DatabaseConnetion.__enter__k  s    ""$$$r   c                 .    |                                   d S r9   )r   r   s       r   r   z_DatabaseConnetion.__exit__n  s    

r   c                     	 |                                                     d           dS # t          j        $ r Y dS w xY w)Nzselect 1 from sqlite_masterTF)cursorexecutesqlite3OperationalError)r   r   s     r   __check_connection_okz(_DatabaseConnetion.__check_connection_okq  sR    	''(EFFF4' 	 	 	55	s   '+ >>c                    t          | j                                                                                  }dD ]K}	 t	          j        ||z   d          }n# t          j        $ r Y .w xY w|                     |          r|c S Ld S )N)z?mode=roz?mode=ro&nolock=1z?mode=ro&immutable=1T)uri)r   r'  absoluteas_urir6  connectr7  '_DatabaseConnetion__check_connection_ok)r   r:  optionscons       r   __sqlite3_connect_readonlyz-_DatabaseConnetion.__sqlite3_connect_readonlyx  s    4'((1133::<<P 	 	GocGm>>>+   ))#.. 


	 	s   AA*)A*c                 <   t          j        d          5 }|j        | _        d d d            n# 1 swxY w Y   	 t	          j        | j        | j                   n# t          $ r Y d S w xY wt          j	        | j                  }| 
                    |          r|S d S )N.sqlitesuffix)tempfileNamedTemporaryFilenamer(  shutilcopyfiler'  PermissionErrorr6  r=  r>  )r   tfr@  s      r   __get_connection_legacyz*_DatabaseConnetion.__get_connection_legacy  s    (	::: 	.b&(gD#	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.	OD0$2IJJJJ 	 	 	FF	od566%%c** 	J	 	s   /33A 
A)(A)c                    t           st          d          t          j        d          j        | _        t          j        | j        | j                   t          j	        | j                  }| 
                    |          r|S d S )Nzshadowcopy is not availablerC  rD  )r.  rG   rF  rG  rH  r(  shadow_copyr'  r6  r=  r>  )r   r@  s     r   __get_connection_shadowcopyz._DatabaseConnetion.__get_connection_shadowcopy  s     	><==="*"=# # #" 	t3T5LMMMod566%%c** 	J	 	r   c                 ~    | j         r| j         S | j        D ]} |            }||| _         |c S t          d          )NzUnable to read database file)r)  r+  r   )r   r   r@  s      r   r1  z!_DatabaseConnetion.get_connection  s^     	%$$n 	 	F&((C$'!


  !!?@@@r   c                 N    |                                                                  S r9   )r   r4  r   s    r   r4  z_DatabaseConnetion.cursor  s      '')))r   c                     | j         r| j                                          | j        r-	 t          j        | j                   d S # t
          $ r Y d S w xY wd S r9   )r)  r   r(  r"   remove	Exceptionr   s    r   r   z_DatabaseConnetion.close  sw     	&##%%%" 		$122222   	 	s   A 
AANF)r   r   r   r"   PathLikeboolr   r   r   r>  r*  r-  r/  r1  r4  r   r   r   r   r"  r"  Z  s        D Dbk DT D D D D % % %      	 	 		 	 	A A A* * *    r   r"  c                   p    e Zd ZdZdZddefdZ	 	 ddZd Zd	 Z	e
d
             Ze
d             ZddZdS )ChromiumBasedz+Super class for all Chromium based browsersl    !l
 Nro   browserc                     d| _         d| _        d| _        || _        || _        || _        || _         | j        di | d S )Ns	   saltysalts                      r   )saltivlengthr[  cookie_filedomain_namekey_file'_ChromiumBased__add_key_and_cookie_file)r   r[  ra  rb  rc  kwargss         r   r   zChromiumBased.__init__  sT     	&& &&0000000r   c                 >   t           j        dk    rLt          ||          }d}	t          || j        | j        |	          | _        | j        pt          |d          }
nt           j        	                    d          s dt           j        
                                v rt          t                                        |          }d}	t          t          | j        | j        |	          | _        t          || j        | j        |	          | _        t          d| j        | j        |	          | _        | j        pt          |d          }
n't           j        dk    r| j        pt          |d	          }|rt%          |d
          5 }t'          j        |          }|d         d                             d          }t-          j        |          dd          }t1          |d          \  }| _        d d d            n# 1 swxY w Y   nd | _        | j        }
|
sJ| j        
                                dk    rt5                      rt5                      }
n t          |d	          }
nt7          d          |
s't7          d                    | j                            |
| _        d S )Ndarwini  rx   r   r	   r>   r   r   rw   rbos_cryptencrypted_keyr      T)rR   chromez4OS not recognized. Works on OSX, Windows, and Linux.z%Failed to find cookies for {} browser)sysplatformrk   r   r^  r`  v10_keyra  r   
startswithry   r   USE_DBUS_LINUXr   rc   v11_keyv11_empty_keyrc  r  jsonloadr  base64standard_b64decoderZ   r[  r+   r   r   )r   linux_cookieswindows_cookiesosx_cookieswindows_keysr   re   rf   r  
iterationsra  rc  fkey_file_jsonkey64keydpapir   s                    r   __add_key_and_cookie_filez'ChromiumBased.__add_key_and_cookie_file  s    <8##1/ /HJ!(DIt{JOODL*OmK.O.OKK\$$W-- -	H#,:L:L:N:N1N1N,    ,] ; ; J!";"&)T[*F FDL!(DIt{JOODL
 "(TYZ"9 "9D * (mw/( /(KK \W$$}NlI(N(NH $(D)) /Q$(IaLLM)*5oFMM! !E  &8??CH&; '/ '/ '/OAt|/ / / / / / / / / / / / / / /  $ *K L<%%''8338R8T8T3"<">">KK"/"K"KK %FH H H  	N$7>>t|LLN N N 's    A+G77G;>G;c                     | j         S r9   )r[  r   s    r   __str__zChromiumBased.__str__  s
    |r   c                    t           j                                        }t          | j                  5 }t
          |_        |                                }|                     |          }	 |	                    dd
                    | j                  f           n# t          j        $ r 	 |	                    dd
                    | j                  f           nc# t          j        $ rQ}|j        d                             d          r't!          d
                    | j                            Y d}~nd}~ww xY wY nw xY w|                                D ]d}|\  }}}	}
}}}}|
dk    rd}n|
dz  | j        z
  }|                     |||          }t+          |||	||||          }|                    |           e	 ddd           n# 1 swxY w Y   |S )	z$Load sqlite cookies into a cookiejarzySELECT host_key, path, secure, expires_utc, name, value, encrypted_value, is_httponly FROM cookies WHERE host_key like ?;%{}%z|SELECT host_key, path, is_secure, expires_utc, name, value, encrypted_value, is_httponly FROM cookies WHERE host_key like ?;r   zno such table: zfile is not a databasez3File {} is not a Chromium-based browser cookie fileNi@B )http	cookiejar	CookieJarr"  ra  r   text_factoryr4  &_has_integrity_check_for_cookie_domainr5  r   rb  r6  r7  r   rp  r   tmp_cookie_filefetchallUNIX_TO_NT_EPOCH_OFFSET_decryptcreate_cookie
set_cookie)r   cjr@  cur%has_integrity_check_for_cookie_domaineitemhostr#   secureexpires_nt_time_epochrH  rH   	enc_value	http_onlyexpirescs                    r   ru  zChromiumBased.load  s   ^%%'' 011 #	!S,C**,,C484_4_`c4d4d1E BDJMMRVRbDcDcCeg g g g+ E E EEKK !FHNVZVfHgHgGik k k k/ E E Evay++,YZZ E01f1m1mnr  oC  2D  2D  E  E  EE E E E EEE  ! ! `d\dF$94	S\)Q.."GG4w>45G eY8]^^!$fg"&y: :a    #!%#	! #	! #	! #	! #	! #	! #	! #	! #	! #	! #	! #	! #	! #	! #	!H 	sa   6G	*/BG	E */CE D:)AD50E 5D::E =G	?E  A<G		GGc                     	 |                      d                                          \  }n# t          j        $ r Y dS w xY w	 t	          |          }n# t
          $ r Y dS w xY w|dk    S )a  Starting from version 24, the sha256 of the domain is prepended to the encrypted value
        of the cookie.

        See:
            - https://issues.chromium.org/issues/40185252
            - https://chromium-review.googlesource.com/c/chromium/src/+/5792044
            - https://chromium.googlesource.com/chromium/src/net/+/master/extras/sqlite/sqlite_persistent_cookie_store.cc#193
        z-SELECT value FROM meta WHERE key = "version";F   )r5  fetchoner6  r7  rI   
ValueError)r@  rH   versions      r   r  z4ChromiumBased._has_integrity_check_for_cookie_domain,  s    	[[!PQQZZ\\FEE' 	 	 	55		%jjGG 	 	 	55	 "}s   ), ??A 
A! A!c                     t          |           dk    r| S |dk    rdS t          |          \  }}t          |t                    sJ |                                S )Nr   r   ro   )r:   rZ   rp   r   r   )rH   encrypted_valuer   r   s       r   _decrypt_windows_chromiumz'ChromiumBased._decrypt_windows_chromiumB  s]     u::??Lc!!2'884$&&&&&{{}}r   Fc                    t           j        dk    r	 |                     ||          S # t          $ r | j        st          d          |dd         }|dd         |dd         }}t          j        | j        t
          j        |          }	 |                    |dd         |          }n# t          $ r t          d          w xY w|r
|d	d         }|                                cY S w xY w|s|dd         d
vr|S t          | d          s|dd         dk    s
J d            |dd         dk    r| j        | j        fn| j        f}|dd         }|D ]}	t          j        |	t
          j        | j                  }
	 t#          |
                    |          t
          j                  }|r
|d	d         }|                    d          c S # t          $ r Y w xY wt          d          )zDecrypt encoded cookiesr   z<Failed to decrypt the cipher text with DPAPI and no AES key.   N   i)noncez'Unable to get key for cookie decryption    )   v11s   v10rr  r  z%v11 keys should only appear on Linux.r   )rm  rn  r  rG   ro  r   newMODE_GCMdecrypt_and_verifyr  r   r   hasattrrr  rs  MODE_CBCr_  r   decrypt
block_size)r   rH   r  r  r  tagaesr   keysr
  cipher	decrypteds               r   r  zChromiumBased._decryptO  s    <7""%55e_MMM   % % %| X&VX X X #2!"""5,SbS1?3443HsgdlCLFFFC11/"S&2I3OODD! C C C,AC C CC 9 %9D{{}}$$$'%*  	_RaR(0@@@L tY'' 	Z"2A2&&0002Y0005DRaR5HF5R5Rd011LY)!""- 	 	CWS#,88F!&..##% #%&)n6 6	8 / )"##I ''00000    !JKKKs;   ( A$C,B,+C,,C#C,+C,?AG
GGNro   N)NNNNNNNrV  )r   r   r   r  r  r   r   rd  r  ru  staticmethodr  r  r  r   r   r   rZ  rZ    s        55 *1 1 1 1 1 1 Y]lp>' >' >' >'@  ( ( (T   \* 
 
 \
7L 7L 7L 7L 7L 7Lr   rZ  c                   $     e Zd ZdZd fd	Z xZS )ChromezClass for Google ChromeNro   c                     t          g dg d          t          g dg d          t          ddgg d          t          dg d          d	d
dd} t                      j        dd|||d| d S )N)z0~/.config/google-chrome{channel}/Default/Cookiesz2~/.config/google-chrome{channel}/Profile */CookieszJ~/.var/app/com.google.Chrome/config/google-chrome{channel}/Default/CookieszL~/.var/app/com.google.Chrome/config/google-chrome{channel}/Profile */Cookies)ro   -betaz	-unstabler   )z0Google\Chrome{channel}\User Data\Default\Cookiesz8Google\Chrome{channel}\User Data\Default\Network\Cookiesz2Google\Chrome{channel}\User Data\Profile *\Cookiesz:Google\Chrome{channel}\User Data\Profile *\Network\Cookies)ro    Beta DevzD~/Library/Application Support/Google/Chrome{channel}/Default/CookieszF~/Library/Application Support/Google/Chrome{channel}/Profile */Cookiesz,Google\Chrome{channel}\User Data\Local Staterl  zChrome Safe Storager  rx  ry  rz  r{  r   re   rf   r[  ra  rb  rc  r   r   r   superr   r   ra  rb  rc  r   	__class__s        r   r   zChrome.__init__  s
   9   322    <   .--      8Z\ .--   9A---   &4$A!
 !
D 	 	M{%08	M 	MGK	M 	M 	M 	M 	Mr   r  r   r   r   r  r   __classcell__r  s   @r   r  r    sM        !!$M $M $M $M $M $M $M $M $M $Mr   r  c                   $     e Zd ZdZd fd	Z xZS )ArczClass for ArcNro   c                 v    t          ddgdg          dddd} t                      j        d
d|||d	| d S )Nz;~/Library/Application Support/Arc/User Data/Default/Cookiesz=~/Library/Application Support/Arc/User Data/Profile */Cookiesro   r   rl  zArc Safe Storager  )rz  r   re   rf   r  r   )r   r  r   r  s        r   r   zArc.__init__  s    7QS    &1!
 
 	 	MK%08	M 	MGK	M 	M 	M 	M 	Mr   r  r  r  s   @r   r  r    sM        M M M M M M M M M Mr   r  c                   $     e Zd ZdZd fd	Z xZS )ChromiumzClass for ChromiumNro   c                     g dt          g d          ddgt          d          dddd	} t                      j        dd|||d
| d S )N)z"~/.config/chromium/Default/Cookiesz$~/.config/chromium/Profile */Cookiesz@~/.var/app/org.chromium.Chromium/config/chromium/Default/CookieszB~/.var/app/org.chromium.Chromium/config/chromium/Profile */Cookies)z"Chromium\User Data\Default\Cookiesz*Chromium\User Data\Default\Network\Cookiesz$Chromium\User Data\Profile *\Cookiesz,Chromium\User Data\Profile *\Network\Cookiesz6~/Library/Application Support/Chromium/Default/Cookiesz8~/Library/Application Support/Chromium/Profile */CookieszChromium\User Data\Local StatechromiumzChromium Safe Storager  r  r  r   r   r  r   r  s        r   r   zChromium.__init__  s        <      IJ 92  (6&1
 
4 	 	M%08	M 	MGK	M 	M 	M 	M 	Mr   r  r  r  s   @r   r  r    sM        M M M M M M M M M Mr   r  c                   $     e Zd ZdZd fd	Z xZS )OperazClass for OperaNro   c                     g dt          ddgg d          g dt          dg d          dd	d
d} t                      j        dd
|||d| d S )N)z~/.config/opera/Cookiesz~/.config/opera-beta/Cookiesz!~/.config/opera-developer/Cookiesz~/.var/app/com.opera.Opera/config/opera/Cookies~/.var/app/com.opera.Opera/config/opera-beta/Cookies~/.var/app/com.opera.Opera/config/opera-developer/Cookiesz&Opera Software\Opera {channel}\Cookiesz.Opera Software\Opera {channel}\Network\Cookies)StableNext	Developerr   )z=~/Library/Application Support/com.operasoftware.Opera/CookieszA~/Library/Application Support/com.operasoftware.OperaNext/CookieszF~/Library/Application Support/com.operasoftware.OperaDeveloper/Cookiesz*Opera Software\Opera {channel}\Local Stater  Opera Safe Storager  r  r  r   r  r  s        r   r   zOpera.__init__  s        <>G 877       
 9>777   (3#7
 
: 	 	Mk%08	M 	MGK	M 	M 	M 	M 	Mr   r  r  r  s   @r   r  r    sM        M M M M M M M M M Mr   r  c                   $     e Zd ZdZd fd	Z xZS )OperaGXzClass for Opera GXNro   c                     g t          ddgdg          dgt          ddg          ddd	d
} t                      j        dd|||d| d S )Nz)Opera Software\Opera GX {channel}\Cookiesz1Opera Software\Opera GX {channel}\Network\Cookiesr  r   z?~/Library/Application Support/com.operasoftware.OperaGX/Cookiesz-Opera Software\Opera GX {channel}\Local Stater  r  r  r  zOpera GXr  r   r  r  s        r   r   zOperaGX.__init__  s    ;AJ "
      ^^8A!
   (3#!
 
$ 	 	M%08	M 	MGK	M 	M 	M 	M 	Mr   r  r  r  s   @r   r  r    sM        M M M M M M M M M Mr   r  c                         e Zd Zd fd	Z xZS )BraveNro   c                     t          g dg d          t          g dg d          t          ddgg d          t          dg d          dd	d
d} t                      j        dd
|||d| d S )N)z>~/.config/BraveSoftware/Brave-Browser{channel}/Default/Cookiesz@~/.config/BraveSoftware/Brave-Browser{channel}/Profile */CookieszX~/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser{channel}/Default/CookieszZ~/.var/app/com.brave.Browser/config/BraveSoftware/Brave-Browser{channel}/Profile */Cookies)ro   z-Betaz-Devz-Nightlyr   )z>BraveSoftware\Brave-Browser{channel}\User Data\Default\CookieszFBraveSoftware\Brave-Browser{channel}\User Data\Default\Network\Cookiesz@BraveSoftware\Brave-Browser{channel}\User Data\Profile *\CookieszHBraveSoftware\Brave-Browser{channel}\User Data\Profile *\Network\CookieszR~/Library/Application Support/BraveSoftware/Brave-Browser{channel}/Default/CookieszT~/Library/Application Support/BraveSoftware/Brave-Browser{channel}/Profile */Cookiesz:BraveSoftware\Brave-Browser{channel}\User Data\Local StatebravezBrave Safe Storager  r  r  r   r  r  s        r   r   zBrave.__init__)  s
   9   :99    <   :99      8hj :99   9O999   %3#A!
 !
D 	 	Mk%08	M 	MGK	M 	M 	M 	M 	Mr   r  )r   r   r   r   r  r  s   @r   r  r  (  sG        $M $M $M $M $M $M $M $M $M $Mr   r  c                   $     e Zd ZdZd fd	Z xZS )EdgezClass for Microsoft EdgeNro   c                     t          g dg d          t          g dg d          t          ddgg d          t          d	g d          d
ddd} t                      j        dd|||d| d S )N)z1~/.config/microsoft-edge{channel}/Default/Cookiesz3~/.config/microsoft-edge{channel}/Profile */CookieszL~/.var/app/com.microsoft.Edge/config/microsoft-edge{channel}/Default/CookieszN~/.var/app/com.microsoft.Edge/config/microsoft-edge{channel}/Profile */Cookies)ro   r  z-devr   )z1Microsoft\Edge{channel}\User Data\Default\Cookiesz9Microsoft\Edge{channel}\User Data\Default\Network\Cookiesz3Microsoft\Edge{channel}\User Data\Profile *\Cookiesz;Microsoft\Edge{channel}\User Data\Profile *\Network\Cookies)ro   r  r  z SxSzE~/Library/Application Support/Microsoft Edge{channel}/Default/CookieszG~/Library/Application Support/Microsoft Edge{channel}/Profile */Cookies)ro   r  r  z Canaryz-Microsoft\Edge{channel}\User Data\Local Stater  zMicrosoft Edge Safe StoragezMicrosoft Edger  r  r  r   r  r  s        r   r   zEdge.__init__S  s
   9   .--    <   655      8[] 988   9B555   (<,A!
 !
D 	 	M[%08	M 	MGK	M 	M 	M 	M 	Mr   r  r  r  s   @r   r  r  P  sM        ""$M $M $M $M $M $M $M $M $M $Mr   r  c                   $     e Zd ZdZd fd	Z xZS )VivaldizClass for Vivaldi BrowserNro   c                     g dt          g d          ddgt          d          dddd	} t                      j        dd|||d
| d S )N)z!~/.config/vivaldi/Default/Cookiesz#~/.config/vivaldi/Profile */Cookiesz*~/.config/vivaldi-snapshot/Default/Cookiesz,~/.config/vivaldi-snapshot/Profile */Cookiesz=~/.var/app/com.vivaldi.Vivaldi/config/vivaldi/Default/Cookiesz?~/.var/app/com.vivaldi.Vivaldi/config/vivaldi/Profile */Cookies)z!Vivaldi\User Data\Default\Cookiesz)Vivaldi\User Data\Default\Network\Cookiesz#Vivaldi\User Data\Profile *\Cookiesz+Vivaldi\User Data\Profile *\Network\Cookiesz5~/Library/Application Support/Vivaldi/Default/Cookiesz7~/Library/Application Support/Vivaldi/Profile */CookieszVivaldi\User Data\Local Staterl  zVivaldi Safe Storager  r  r  r   r  r  s        r   r   zVivaldi.__init__}  s        <      HI 91  &5%5
 
8 	 	M%08	M 	MGK	M 	M 	M 	M 	Mr   r  r  r  s   @r   r  r  z  sM        ##M M M M M M M M M Mr   r  c            	           e Zd ZdZddZd Zed             Zdee	e
e	         ee	e	f         e
ee	e	f                  f         de	fd	Zdd
Zed             Zd Zd Zd ZdS )FirefoxBasedz%Superclass for Firefox based browsersNro   c                 h   || _         |p | j        di || _        t          j                            t          j                            | j                  d          | _        t          j                            t          j                            | j                  dd          | _        || _	        d S )Nzsessionstore.jszsessionstore-backupszrecovery.jsonlz4r   )
browser_name_FirefoxBased__find_cookie_filera  r"   r#   r&   dirnamesession_filesession_file_lz4rb  )r   r  ra  rb  rc  re  s         r   r   zFirefoxBased.__init__  s    (&K*A$*A*K*KF*K*KGLLGOOD,--/@B B "RW__. .57I!K !K 'r   c                     | j         S r9   )r  r   s    r   r  zFirefoxBased.__str__  s      r   c                 $   t          j                    }t          j        t          j                            | dz   d                    }| dz   }|s|S |d         }|                    |d           d }|                                D ]p}|                    d          r||         	                    d          } n=||         	                    d          dk    r|s||         	                    d	          }q|                                D ]}||         	                    d	          |k    rb||         	                    d
          dk    }|r|n<t          j                            t          j        
                    |          |          c S |S )Nz**zprofiles.inir   utf8)encodingInstallr   1r   
IsRelative0)configparserConfigParserr}   r"   r#   r&   readsectionsrp  r   r  )user_data_pathconfigprofiles_ini_pathfallback_pathprofile_pathsectionr;  s          r   get_default_profilez FirefoxBased.get_default_profile  s   *,, IbgllT!>'3 '3 4 4&-  	!  -a0%777(( 	; 	;G!!),, ;%g229==$$Y//366|6%g226::(( 	t 	tGg""6**l::!'?..|<<C'/s||RW\\"'//RcBdBdfr5s5ssss ; r   rt   returnc                 :   t          |t                    s|g}|D ]i}t          |t                    rt          |          }nt          j                            |          }t          j                            |          r|c S jt          d| j	         d          )zGExpands a path to a list of paths and returns the first one that existszCould not find z profile directory)
rp   rz   rq   rs   r"   r#   r{   isdirr   r  )r   rt   r#   expandeds       r   __expand_and_check_pathz$FirefoxBased.__expand_and_check_path  s    %&& 	GE 	  	 D$%% 4+D117--d33w}}X&&    Cd/CCCE E 	Er   c                 \   g }t           j        dk    r|                     |          }nt           j                            d          s dt           j                                        v r|                     |          }nBt           j        dk    r|                     |          }nt          dt           j        z             t          j        t          j        	                    t                              |          d                    p|}|r|d         S t          d| j         d	          )
Nrg  r   r	   r   zUnsupported operating system: zcookies.sqliter   zFailed to find z cookie file)rm  rn  $_FirefoxBased__expand_and_check_pathrp  ry   r   r}   r"   r#   r&   r  r  r  )r   linux_data_dirswindows_data_dirsosx_data_dirscookie_filesr  s         r   __find_cookie_filezFirefoxBased.__find_cookie_file  s'   <8##!99-HHNN\$$W-- 	A#,:L:L:N:N1N1N!99/JJNN\W$$!99:KLLNN$03<?A A A yl.N.N~.^.^`p!q!qrr  	  	C?"$A$"3AAAC C Cr   c                    t          |                     dd          |                     dd          |                     dd          d |                     dd          |                     dd          |                     dd                    S )	Nr  ro   r#   r  FrH  rH   httponly)r  r   )cookie_jsons    r   __create_session_cookiez$FirefoxBased.__create_session_cookie  s    [__VR88+//&RT:U:U(__Xu==t(__VR88+//!(";. ;.(__Z??	A A 	Ar   c                 `   t           j                            | j                  sd S 	 t	          | j        d          5 }t          j        |          }d d d            n# 1 swxY w Y   |                    dg           D ]p}|                    dg           D ]W}| j        dk    s| j        |                    dd          v r-|	                    t                              |                     Xqd S # t          $ r1}t          d| j         dt          |                     Y d }~d S d }~ww xY w)Nrh  rw   cookiesro   r  Error parsing z session JSON:)r"   r#   existsr  r  rt  ru  r   rb  r  r  $_FirefoxBased__create_session_cookier  printr  r   )r   r  file_obj	json_datawindowcookier  s          r   __add_session_cookiesz"FirefoxBased.__add_session_cookies  s   w~~d/00 	F
	Jd'.. 0( Ih//	0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 $--	266 J J$jjB77 J JF'2--1AVZZPVXZE[E[1[1[(@@HHJ J JJJ J  	N 	N 	ND4#4DDDc!ffMMMMMMMMM	Ns:   C2 AC2 A""C2 %A"&C2 2
D-<&D((D-c                    t           j                            | j                  sd S 	 t	          | j        d          5 }|                    d           t          j        t          j	        
                    |                                                    }d d d            n# 1 swxY w Y   |                    dg           D ]W}| j        dk    s| j        |                    dd          v r-|                    t                              |                     Xd S # t           $ r1}t#          d| j         dt'          |                     Y d }~d S d }~ww xY w)Nrh     r  ro   r  r  z session JSON LZ4:)r"   r#   r  r  r  r  rt  loadslz4block
decompressr   rb  r  r  r  r  r  r  r   )r   r  r  r  r  r  s         r   __add_session_cookies_lz4z&FirefoxBased.__add_session_cookies_lz4  s   w~~d344 	F
	Pd+T22 Nha    Jsy';';HMMOO'L'LMM	N N N N N N N N N N N N N N N $--	266 P P#r))T-=FTVAWAW-W-WMM,"F"Fv"N"NOOOP P	  	P 	P 	PF!2FFFAP P P P P P P P P	Ps;   D AB"D "B&&D )B&*D 
E'&EEc                    t           j                                        }t          | j        d          5 }|                                }	 |                    dd                    | j                  f           n_# t          j
        $ rM}|j        d                             d          r't          d                    | j                             d }~ww xY w|                                D ]6}|\  }}}}	}
}}t!          ||||	|
||          }|                    |           7	 d d d            n# 1 swxY w Y   |                     |           |                     |           |S )NTz_select host, path, isSecure, expiry, name, value, isHttpOnly from moz_cookies where host like ?r  r   r  z$File {} is not a Firefox cookie file)r  r  r  r"  ra  r4  r5  r   rb  r6  DatabaseErrorr   rp  r   r  r  r  r  "_FirefoxBased__add_session_cookies&_FirefoxBased__add_session_cookies_lz4)r   r  r@  r  r  r  r  r#   r  r  rH  rH   r  r  s                 r   ru  zFirefoxBased.load  s   ^%%'' 0$77 	!3**,,C 028--@P2Q2Q1SU U U U(   6!9''(UVV r,-S-Z-Z[_[o-p-pqqq
  ! !FJCdFGT5)!$fg"&y: :a    	!	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!  	""2&&&&&r***	s7   D1
/A:9D1:C	ACCAD11D58D5r  )NNN)r   r   r   r  r   r  r  r  r   r   r   r   r  r  r  r$  r%  ru  r   r   r   r  r    s       //	' 	' 	' 	'! ! !   \:EU3S	4S>SWX\]`be]eXfSg3g-h Emp E E E EC C C C, A A \AJ J JP P P    r   r  c                   $     e Zd ZdZd fd	Z xZS )FirefoxzClass for FirefoxNro   c                 d    ddgddddddgdgd} t                      j        d	|||fi | d S )
Nz&~/snap/firefox/common/.mozilla/firefoxz~/.mozilla/firefoxrm   zMozilla\Firefoxr   r   z%~/Library/Application Support/Firefoxr  r  r	  r'  r  r   r  s        r   r   zFirefox.__init__3  sr     9$ 
 "+=>>&0BCC"
 8
 
 	KhOO$OOOOOr   r  r  r  s   @r   r'  r'  0  sM        P P P P P P P P P Pr   r'  c                   $     e Zd ZdZd fd	Z xZS )	LibreWolfzClass for LibreWolfNro   c                 d    ddgddddddgdgd} t                      j        d	|||fi | d S )
Nz"~/snap/librewolf/common/.librewolfz~/.librewolfrm   	librewolfr   r   z'~/Library/Application Support/librewolfr)  r,  r*  r  s        r   r   zLibreWolf.__init__G  sp     5 
 ";77&<<"
 :
 
 	k;QQDQQQQQr   r  r  r  s   @r   r,  r,  D  sM        R R R R R R R R R Rr   r,  c                       e Zd ZdZdZdZde ZddgZddd
Zd Z	d Z
ddedefdZd Zed dedefd            ZdedefdZdej        j        fdZdefdZd ZdS )!SafarizClass for SafariiO:z8https://github.com/borisbabic/browser_cookie3/issues/newz3Page format changed.
Please create a new issue on: zP~/Library/Containers/com.apple.Safari/Data/Library/Cookies/Cookies.binarycookiesz'~/Library/Cookies/Cookies.binarycookiesNro   r   c                     d| _         || _        d | _        |                     |           |                                  d S r&  )_Safari__offset_Safari__domain_name_Safari__buffer_Safari__open_file_Safari__parse_header)r   ra  rb  rc  s       r   r   zSafari.__init__c  sD    (%%%r   c                 J    | j         r| j                                          d S d S r9   )r4  r   r   s    r   __del__zSafari.__del__j  s0    = 	"M!!!!!	" 	"r   c                     |pt          | j        d          }|st          d          t          |d          | _        d S )Nrx   zCan not find Safari cookie filerh  )r   safari_cookiesr   r  r4  )r   ra  s     r   __open_filezSafari.__open_filen  sF    !N]43F%N%N 	H$%FGGG[$//r   sizeoffsetc                     ||| _         | j                            | j                    | xj         |z  c_         t          | j                            |                    S r9   )r2  r4  seekr   r  )r   r<  r=  s      r   __read_filezSafari.__read_filet  sU    "DM4=)))t}))$//000r   c           	         | j                             d          dk    s
J d            t          j        d| j                             d                    d         | _        g | _        t          | j                  D ]M}| j                            t          j        d| j                             d                    d                    Nd S )N   s   cookzNot a safari cookie filez>Ir   )r4  r  structunpack_Safari__total_page_Safari__page_sizesranger   )r   r   s     r   __parse_headerzSafari.__parse_header{  s    }!!!$$///1K///"M$0B0B10E0EFFqIt()) 	1 	1A$$V]dm((++&- &--.&0 1 1 1 1	1 	1r   Tfiler   c                     g }	 |                      d          }|dk    rn|                    |           2d                    |          }|r|                    d          }|S )NTr>       r   r   )r  r   r&   r   )rI  r   r   bytes       r   __read_until_nullzSafari.__read_until_null  sm    	99Q<<DwKK		
 xx~~ 	(;;w''Dr   pagecookie_offsetc           	         |                     |           t          j        d|                    d                    d         }|                     dd           t          j        d|                    d                    d         }|                     dd           t	          |dz            }t	          |dz            }t          j        d|                    d                    d         }t          j        d|                    d                    d         }t          j        d|                    d                    d         }	t          j        d|                    d                    d         }
t          j        d|                    d                    d         }|                    d          dk    sJ | j                    t          t          j        d|                    d                    d         | j        z             }t          t          j        d|                    d                    d         | j        z             }|                     ||z   d           |                     |          }|                     ||z   d           |                     |          }|                     ||	z   d           |                     |          }|                     ||
z   d           |                     |          }|r.|                     ||z   d           |                     |          }t          |||||||          S )N<IrB  r   r>          z<dr  )
r?  rC  rD  r  rX  NEW_ISSUE_MESSAGErI   APPLE_TO_UNIX_TIME_Safari__read_until_nullr  )r   rN  rO  r   flags	is_secureis_httponlyhost_offsetname_offsetpath_offsetvalue_offsetcomment_offsetexpiry_dater  rH  r#   rH   s                    r   __parse_cookiezSafari.__parse_cookie  s   		-   M$		!--a0		!QdDIIaLL11!4		!Q%%	53;''mD$))A,,77:mD$))A,,77:mD$))A,,77:}T499Q<<88;tTYYq\\::1=yy||2222D4J222&-diill;;#67 8 8 dDIIaLL11() * * 			-+-q111%%d++		-+-q111%%d++		-+-q111%%d++		-,.222&&t,, 	-IImn4a888&&t,,AT4KukZZZr   r  c                 0    | j         sdS | j         |j        v S )NT)r3  domain)r   r  s     r   __domain_filterzSafari.__domain_filter  s"    ! 	4!V]22r   
page_indexc           	   #     K   d| j         dz  z   t          | j        d |                   z   }|                     | j        |         |          }|                    d          dk    sJ | j                    t          j        d|                    d                    d         }g }t          |          D ]C}|	                    t          j        d|                    d                    d                    D|                    d          dk    sJ | j                    |D ]}| 
                    ||          V  d S )Nr  rB  s      rQ  r   rR  )rE  sumrF  _Safari__read_filer  rS  rC  rD  rG  r   _Safari__parse_cookie)r   rc  r=  rN  	n_cookiescookie_offsetsr   s          r   __parse_pagezSafari.__parse_page  sG     T&**!+:+.//0 1* =vFFyy||2222D4J222M$		!55a8	y!! 	H 	HA!!&-diill"C"CA"FGGGGyy||2222D4J222$ 	4 	4F%%dF333333	4 	4r   c                     t           j                                        }t          | j                  D ]D}|                     |          D ],}|                     |          r|                    |           -E|S r9   )r  r  r  rG  rE  _Safari__parse_page_Safari__domain_filterr  )r   r  r~   r  s       r   ru  zSafari.load  s    ^%%''t()) 	* 	*A++A.. * *''// *MM&)))* 	r   r  )r   Nr9   )T)r   r   r   r  rT  NEW_ISSUE_URLrS  r:  r   r8  r5  rI   rf  r6  r  r   rX  rU  rg  r  r  Cookierm  rl  ru  r   r   r   r0  r0  X  sS       "NM^}^^Z1N
    " " "0 0 01 1 1S 1 1 1 11 1 1 
 
 
 
 
 
 \
$[7 $[3 $[ $[ $[ $[L3dn&; 3 3 3 3
4s 4 4 4 4    r   r0  c                   (    e Zd ZdZddgZddZd ZdS )	LynxzClass for Lynxz~/.lynx_cookiesz	~/cookiesNro   c                 L    t          |p| j        d          | _        || _        d S Nr   )r   lynx_cookiesra  rb  r   ra  rb  s      r   r   zLynx.__init__  s*    ()I8I7SS&r   c                    t           j                                        }| j        st	          d          t          | j                  5 }|                                                                D ]}}d |                    d          D             \  }}}}}}	}
|dk    }|dk    }|	                    | j
                  dk    r*t          |||||	|
d          }|                    |           ~	 d d d            n# 1 swxY w Y   |S )NzCannot find Lynx cookie filec                 "    g | ]}|d k    rdn|S ro   Nr   .0words     r   
<listcomp>zLynx.load.<locals>.<listcomp>  $    SSS$SSSr   	TRUEr   F)r  r  r  ra  r   r  r  
splitlinessplitfindrb  r  r  )r   r  r}  linera  domain_specifiedr#   r  r  rH  rH   r  s               r   ru  z	Lynx.load  sW   ^%%'' 	E$%CDDD$"## 
	*q++-- 	* 	* TS$**TBRBRSSS M($u#3v#= 6);;t/00A55*64$!5* *FMM&)))	*
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 
	* 	s   	B%C;;C?C?r   )r   r   r   r  rt  r   ru  r   r   r   rq  rq    sL         	L
' ' ' '    r   rq  c                   >    e Zd ZdZdZdZdZdZdZdZ	dgZ
ddZd Zd	S )W3mzClass for W3mr>      rB  r  r]  r  z~/.w3m/cookieNro   c                 L    t          |p| j        d          | _        || _        d S rs  )r   w3m_cookiesra  rb  ru  s      r   r   zW3m.__init__  s*    ()H8H'RR&r   c                 j   t           j                                        }| j        st	          d          t          | j                  5 }|                                                                D ])}d |                    d          D             \  }}}}}}	}
}}}}t          |
          }
t          |          }t          |
| j        z            }t          |
| j        z            }t          |
| j        z            }t          |
| j        z            }|                    | j                  dk    rct           j                            ||||t          |          |||                    d          |	||||||i           }|                    |           +	 d d d            n# 1 swxY w Y   |S )NzCannot find W3m cookie filec                 "    g | ]}|d k    rdn|S rx  r   ry  s     r   r|  zW3m.load.<locals>.<listcomp>  r}  r   r~  r   .)r  r  r  ra  r   r  r  r  r  rI   rX  
COO_SECURE
COO_DOMAINCOO_PATHCOO_DISCARDr  rb  ro  rp  r  )r   r  r}  r  urlrH  rH   r  ra  r#   flagr  commentportcomment_urlr  r  path_specifieddiscardr  s                       r   ru  zW3m.load  s   ^%%'' 	D$%BCCC$"## 	*q++-- * * TS$**TBRBRSSS*T5'64wk4yyg,,dT_455#'t(>#?#? !%dT]&:!;!;td&6677;;t/00A55!^227D% JJ0@"--c22D.&#Wg{BH HF MM&)))!*	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*$ 	s   	EF((F,/F,r   )r   r   r   r  COO_USEr  r  r  r  COO_OVERRIDEr  r   ru  r   r   r   r  r    sg         GJJHKLK' ' ' '    r   r  c                     t           j                            d||dd| |                     d          |                     d          |d||ddd|rddini           S )z$Shortcut function to create a cookier   NFr  THTTPOnlyro   )r  r  ro  rp  )r  r#   r  r  rH  rH   r  s          r   r  r    sp     >  D%udDOOTWDXDXZ^ZiZijmZnZnpt!%vwtT5>!F*b!1!1BH H Hr   ro   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Chrome. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  ra  rb  rc  s      r   rl  rl  $  "     +{H55::<<<r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Arc. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  r  s      r   arcr  +  s"     {K2277999r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Chromium. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  r  s      r   r  r  2  s"     Kh77<<>>>r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Opera. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  r  s      r   operar  9  "     k84499;;;r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Opera GX. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  r  s      r   opera_gxr  @  "     ;X66;;===r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies and sessions used by Brave. Optionally
    pass in a domain name to only load cookies from the specified domain
    )r  ru  r  s      r   r  r  G  r  r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Microsoft Edge. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  r  s      r   edger  N  s"     [(3388:::r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies used by Vivaldi Browser. Optionally pass in a
    domain name to only load cookies from the specified domain
    )r  ru  r  s      r   vivaldir  U  r  r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies and sessions used by Firefox. Optionally
    pass in a domain name to only load cookies from the specified domain
    )r'  ru  r  s      r   firefoxr  \  r  r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies and sessions used by LibreWolf. Optionally
    pass in a domain name to only load cookies from the specified domain
    )r,  ru  r  s      r   r.  r.  c  s"     [+x88==???r   c                 H    t          | ||                                          S )zReturns a cookiejar of the cookies and sessions used by Safari. Optionally
    pass in a domain name to only load cookies from the specified domain
    )r0  ru  r  s      r   safarir  j  r  r   c                 F    t          | |                                          S )zReturns a cookiejar of the cookies and sessions used by Lynx. Optionally
    pass in a domain name to only load cookies from the specified domain
    )rq  ru  ra  rb  s     r   lynxr  p  s      [))..000r   c                 F    t          | |                                          S )zReturns a cookiejar of the cookies and sessions used by W3m. Optionally
    pass in a domain name to only load cookies from the specified domain
    )r  ru  r  s     r   w3mr  w  s      {K((--///r   c                     t           j                                        }t          D ]7}	  ||           D ]}|                    |           (# t
          $ r Y 4w xY w|S )zTry to load cookies from all supported browsers and return combined cookiejar
    Optionally pass in a domain name to only load cookies from the specified domain
    )rb  )r  r  r  all_browsersr  r   )rb  r  	cookie_fnr  s       r   ru  ru    s     
	!	!	#	#B!  		#)<<< & &f%%%%&! 	 	 	D	Is   $A
AA)r   ru  r  __main__)r   r   NNFr9   r  r   )ro   )^rv  r  r   r}   http.cookiejarr  rt  r"   rI  r6  rC  r^   rm  rF  ior   pathlibr   typingr   r   r   rn  rp  ry   r   jeepney.io.blockingr
   rq  ImportErrorr   r.  	lz4.blockr  Cryptodome.Cipherr   Cryptodome.Protocol.KDFr   Cryptodome.Util.Paddingr   r  rc   rU  r   r+   rZ   rk   rq   r   rs   rz   r   r   r   r   r   r   r   r   r"  rZ  r  r  r  r  r  r  r  r  r  r'  r,  r0  rq  r  r  rl  r  r  r  r  r  r  r  r  r.  r  r  r  r  ru  __all__r   r  r   r   r   <module>r     s~                  				        



              $ $ $ $ $ $ $ $ $ $ <7## u0B0B0D0D'D'D<<<<<<   
 
<7   
     ! ! ! ! ! ! * * * * * * ) ) ) ) ) )
1& 	 	 	 	 	 	 	 	= = =& QV$- $- $- $-N
 
 
B5s+ B B B Bd S    ,: : : : : : eCI.> sTXyIY     c4i(8 5dCS     c4i(8 5dCS       N N N N N N N N0x, x, x, x, x, x, x, x,vR R R R R R R RjWL WL WL WL WL WL WL WLt'M 'M 'M 'M 'M] 'M 'M 'MTM M M M M- M M M(M M M M M} M M MD"M "M "M "M "MM "M "M "MJM M M M Mm M M M4%M %M %M %M %MM %M %M %MP'M 'M 'M 'M 'M= 'M 'M 'MT!M !M !M !M !Mm !M !M !MHO O O O O O O OdP P P P Pl P P P(R R R R R R R R(x x x x x x x xv       <( ( ( ( ( ( ( (VH H H= = = =: : : :? ? ? ?< < < <> > > >< < < <; ; ; ;> > > >> > > >@ @ @ @= = = =1 1 1 10 0 0 0 %5$R[]ceiknpst    9
8
8<
G z	E$$&&MMMMM s$   B BB-B2 2B:9B: