
    i                        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,                  j/                  d      sdej,                  j1                         v r	 d dlZd dlmZ dZdZej,                  d
k(  r	 d dlZ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,	 dUdZ-d Z.dee/e0f   fdZ1de2de0fdZ3de2de0fdZ4dVdee0e2f   dee0e2f   fdZ5dVdee0e2f   dee0e2f   fdZ6dVd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. d/e<      Z@ G d0 d1e<      ZA G d2 d3e<      ZB G d4 d5e<      ZC G d6 d7e<      ZD G d8 d9      ZE G d: d;eE      ZF G d< d=eE      ZG G d> d?      ZH G d@ dA      ZI G dB dC      ZJdD ZKdWdEZLdWdFZMdWdGZNdWdHZOdWdIZPdWdJZQdWdKZRdWdLZSdWdMZTdWdNZUdWdOZVdXdPZWdXdQZXeLeNeOePeQeReSeTeUeVeWeXeMgZYdYdRZZg dSeYz   Z[e\dTk(  r e] eZ              yy# e$ r
 d dlZd	ZY w xY w# e$ r Y w xY w)Z    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y)BrowserCookieErrorN)__name__
__module____qualname__     Q/home/work/apex_v16/venv/lib/python3.12/site-packages/browser_cookie3/__init__.pyr   r   2   s    r   r   c                     ddl m} m}m}m}m}m} 	  |d |       } ||d      } ||d      \  }}	|	|k(  r t        j                  j                  |      }n|	|k7  ry t        j                  j                  |dd      S # t        $ r Y y w xY w)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	t%78t%GH
+JFuM!GG..}=Mf_ 77<<y)<<  s   AA< <	BBc                    dd l dd l G fddj                        t        fd| |dg      \  }}}j	                         }d}	j
                  j                  j                  j                  |      j                  |      j                  |      |||	j                  |            st        d      |j                  }
j                  t        |j                              }j                  ||j                  |j                         t        j
                  j                   j"                  ||j                  g       |r|
|j$                  fS |
|j                  fS )Nr   c                   ~    e Zd ZdW  j                  j                  fdW  j                  W  j                        fgZy)'_crypt_unprotect_data.<locals>.DataBlobcbDatapbDataN)r   r   r   wintypesDWORDPOINTERc_char_fields_)ctypess   r   DataBlobr.   O   s1    v,,-v~~fmm45
r   r7   c                 F     t        |       j                  |             S N)lencreate_string_buffer)xr7   r6   s    r   <lambda>z'_crypt_unprotect_data.<locals>.<lambda>V   s    (3q66#>#>q#A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   s6    
6## 
 '*B	gs#'#G\8 D $==  33LL!6<<$||L1m%>A IJJ**K,,S-ABJ
NN:x@((4*ABJNN**J,,,,r   c                     ddddd|d| g}t        j                  |t         j                  t         j                        }|j                         \  }}|j                  dk7  rt
        S |j                         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   sm     &=|T?<CC
#-??4D!HC!((99;r   r#   c                     t        | t              s| dd} t        j                  j	                  t        j
                  | d   d      | d         S )NAPPDATA)r#   envrn    r#   )
isinstancedictr"   r#   r&   getenv)r#   s    r   _expand_win_pathrs   |   s>    dD!Y/77<<		$u+r2DLAAr   pathsos_namec              #   .  K   |j                         }|dv sJ t        | t              s| g} |dk(  rt        t        |       } n$t        t
        j                  j                  |       } | D ])  }t        t        j                  |            D ]  }|  + yw)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      mmoG1111eT")$e,BGG&&. 		$( 	AG	s   BBc                 .    t        t        | |      d       S r9   )nextr   )rt   ru   s     r   _expand_pathsr      s    "5'2D99r   channelc                 d    |xs dg}t        |t              s|g}t        | t              s| g} | |fS Nro   )rp   rz   )rt   r   s     r   "_normalize_genarate_paths_chromiumr      s9    o"Ggt$)eT"'>r   c                     t        | |      \  } }g }|D ]*  }| D ]#  }|j                  |j                  |             % , |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      s]     8wGNE7 @ 	@D$$T[[[%>?	@@ r   c           	      "   t        | |      \  } }g }|D ]x  }| D ]q  }|j                  dd|j                  |      z   d       |j                  d|j                  |      d       |j                  d|j                  |      d       s z |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GNE7 G 	GD$$!=4;;t;;T+TUW$$&D0IJL$$!4;;t;+DEG	GG r   c                 H    	 | j                  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y)_JeepneyConnectionc                 <    t        j                  |||      | _        y r9   )jeepneyDBusAddress _JeepneyConnection__dbus_address)selfobject_pathbus_name	interfaces       r   __init__z_JeepneyConnection.__init__   s    %119.r   c                 $    t               | _        | S r9   )r
   _JeepneyConnection__connectionr   s    r   	__enter__z_JeepneyConnection.__enter__   s    02r   c                 8    | j                   j                          y r9   r   closer   exc_type	exc_value	tracebacks       r   __exit__z_JeepneyConnection.__exit__       !r   c                 8    | j                   j                          y r9   r   r   s    r   r   z_JeepneyConnection.close   r   r   Nc                 t   t        j                  | j                  |||      }| j                  j	                  |      }|j
                  j                  t         j                  j                  k(  rt        |j                  d         t        |j                        dk(  r|j                  d   S |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#&x}}#5#:x}}QMMr   r9   )r   r   r   r   r   r   r   r   r   r   r   r   r      s    .""Nr   r   c                   H    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y)_LinuxPasswordManagerzJRetrieve password used to encrypt cookies from KDE Wallet or SecretServicezbrowser-cookie3c                     |r| j                   | j                  d| _        y | j                  | j                  d| _        y )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__   s?    ==!%!C!C"D  @@!%!F!F"Dr   c                     	 | j                  |      S # t        $ r Y nw xY w	  | j                  j                  d      |      S # t        $ r Y t        S w xY w)Nr   )1_LinuxPasswordManager__get_secretstorage_passwordrG   r   getrc   )r   os_crypt_names     r   get_passwordz"_LinuxPasswordManager.get_password   se    	44]CC 			44%%)))4]CC 	((	s    	 A 	AAc                     ddg}|D ]&  }	  | j                   j                  d      ||      c S  t        d|       # t        $ r Y Bw xY w)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   sl    ::< 	F>t))--o>v}UU	
 5m_EFF   s   !>	A
	A
r   applicationc                    t        j                  t        j                               5 }	 t        j                  |j                  ddd      d      }|j                  ||d      }t        t        d |            }t        |      dk(  rt        d	|       |d   d   }|j                  |g       |j                  d
t        j                  dd            \  }}|j!                  |g|      |   \  }}}}t#        |      cd d d        S # t        j                  j                  $ r t        d      w xY w# 1 sw Y   y xY w)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  sQ    12 	!j_!%))13MuV4" )44$*6 K v&6DEK;1$"%=k]#KLL%a.+K!!;-0'33Rq9;JAw,77w((35OAq&!=1	! 	! ??00 _"]_ __	! 	!s#   D6'D
B/D6
)D33D66D?c                    |j                          d}|j                          d}t        j                  t        j                               5 }	 |j                  ddd      }t        j                  |d      }|j                  |j                         t        j                  d      | j                        }|j                  ||| j                        s,|j                  |d| j                         t        d	| d
      |j!                  |||| j                        }|j                  |d| j                         |j#                  d      cd d d        S # t        j                  j                  $ r t        d      w xY w# 1 sw Y   y xY w)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!  si   !,,./u5))+,M: 12 	,jY#-#8#8')=u$F 
 '79JKI^^'')4::a=$,,HF&&vvt||Dt||<"%7x{#KLL --T\\3HOOFE4<<8??7+!	, 	, ??00 Y"WY YY		, 	,s%   FE#C(F)E>>FF
c                 z   g d}t        | 5 }|j                  dd||d      }t        t        d |            }t	        |      dk(  rt        d|       |d   d   }|j                  dd	|g       |j                  d
ddd      \  }}|j                  dd|g|      |   \  }}}}|cd d d        S # 1 sw Y   y xY w)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  s    2& 	*$00wvk(Z\Kv&6DEK;1$"%=k]#KLL%a.+K""8TK=A#//tWi9JAw(44ek]G==HJOAq&!	 	 	s   BB11B:c           	      2   |j                          d}|j                          d}t        ddd      5 }|j                  d      }|j                  dd|d	| j                        }|j                  d
d||| j                        }|s.|j                  dd|d| j                         t	        d| d      |j                  dd|||| j                        }|j                  dd|d| j                         |j                  d      cd d d        S # 1 sw Y   y xY w)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#   !,,./u5))+,M: 46IK\] 	,ak'33ODN++~q$,,@F#//UFFDLLBJ&&UFE4<<A"%7x{#KLL!--T\\KH""7E65$,,O??7+	, 	, 	,s   CDDN)r   r   r   __doc__r  r   r   r   strr   r   r   r   r   r   r   r   r      s<    TG

)G!C !c !6,*",r   r   c                   h    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y)_DatabaseConnetiondatabase_filetry_legacy_firstc                 F   || _         d | _        d | _        | j                  g| _        |r'| j                  j                  d| j                         n%| j                  j                  | j                         t        r&| j                  j                  | j                         y y 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    ,"& ++
 NN!!!T%A%ABNN!!$">">?NN!!$"B"BC r   c                 "    | j                         S r9   )get_connectionr   s    r   r   z_DatabaseConnetion.__enter__k  s    ""$$r   c                 $    | j                          y r9   )r   r   s       r   r   z_DatabaseConnetion.__exit__n  s    

r   c                 v    	 |j                         j                  d       y# t        j                  $ r Y y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  s:    	''(EF'' 		s   " 88c                    t        | j                        j                         j                         }dD ]2  }	 t	        j
                  ||z   d      }| j                  |      s0|c S  y # t        j                  $ r Y Kw xY w)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::<P 	GoocGm> ))#.
	 ++ s   A**B ?B c                 T   t        j                  d      5 }|j                  | _        d d d        	 t	        j
                  | j                  | j                         t        j                  | j                        }| j                  |      r|S y # 1 sw Y   gxY w# t        $ r Y y w xY w)N.sqlitesuffix)tempfileNamedTemporaryFilenamer(  shutilcopyfiler'  PermissionErrorr6  r=  r>  )r   tfr@  s      r   __get_connection_legacyz*_DatabaseConnetion.__get_connection_legacy  s    ((	: 	.b&(ggD#	.	OOD00$2I2IJ ood556%%c*J +	. 	.  		s   B*B B	B'&B'c                 (   t         st        d      t        j                  d      j                  | _        t        j                  | j                  | j
                         t        j                  | j
                        }| j                  |      r|S y )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  sw    <=="*"="=#"d 	t33T5L5LMood55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  sQ    $$$nn 	F(C$'!
		
 !!?@@r   c                 >    | j                         j                         S r9   )r   r4  r   s    r   r4  z_DatabaseConnetion.cursor  s     ''))r   c                     | j                   r| j                   j                          | j                  r!	 t        j                  | j                         y y # t
        $ r Y y w xY wr9   )r)  r   r(  r"   remove	Exceptionr   s    r   r   z_DatabaseConnetion.close  sV    ##%""		$11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  sJ    Dbkk DT D %		A*r   r"  c                   b    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y)ChromiumBasedz+Super class for all Chromium based browsersl    !l
 Nbrowserc                     d| _         d| _        d| _        || _        || _        || _        || _         | j                  di | y )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__  sH     	&& &&&00r   c                    t         j                  dk(  rQt        ||      }d}	t        || j                  | j
                  |	      | _        | j                  xs t        |d      }
nt         j                  j                  d      s dt         j                  j                         v rt        t              j                  |      }d}	t        t        | j                  | j
                  |	      | _        t        || j                  | j
                  |	      | _        t        d| j                  | j
                  |	      | _        | j                  xs t        |d      }
nt         j                  dk(  r| j"                  xs t        |d	      }|rot%        |d
      5 }t'        j(                  |      }|d   d   j+                  d      }t-        j.                  |      dd  }t1        |d      \  }| _        d d d        nd | _        | j                  }
|
sJ| j2                  j                         dk(  rt5               rt5               }
nt        |d	      }
nt7        d      |
s$t7        dj9                  | j2                              |
| _        y # 1 sw Y   xY w)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  sA    <<8#1/HJ!(DIIt{{JODL**OmK.OK\\$$W-#,,:L:L:N1N,  ,] ; J!";"&))T[[*FDL!(DIIt{{JODL
 "(TYYZ"9D ** (mw/(K \\W$}}NlI(NH(D) /Q$(IIaLM)*5oFMM!E  &88?CH&; '/OAt|/ /  $ **K<<%%'838R8T"<">K"/"KK %FH H $7>>t||LN N '=/ /s   AJJc                     | j                   S r9   )r[  r   s    r   __str__zChromiumBased.__str__  s    ||r   c                 ~   t         j                  j                         }t        | j                        5 }t
        |_        |j                         }| j                  |      }	 |j                  ddj                  | j                        f       |j%                         D ]\  }|\  }}}	}
}}}}|
dk(  rd}n|
dz  | j&                  z
  }| j)                  |||      }t+        |||	||||      }|j-                  |       ^ 	 ddd       |S # t        j                  $ r 	 |j                  ddj                  | j                        f       nb# t        j                  $ rL}|j                  d   j                  d      r$t!        dj                  | j"                              Y d}~nd}~ww xY wY  w xY w# 1 sw Y   |S xY w)	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 01 #	!S,C**,C484_4_`c4d1E BDJMMRVRbRbDcCeg  ! `d\dF$94	S\)Q."G4w>445G eY8]^!$fg"&y:a #!%#	!H 	9 ++ EEKK !FHNVZVfVfHgGik// Evvay++,YZ01f1m1mnr  oC  oC  2D  E  E [EE#	!H 	s[   -F2",DA/F2F/,E	F/	F(AF#F/#F((F/+F2.F//F22F<c                     	 | j                  d      j                         \  }	 t	        |      }|dk\  S # t        j                  $ r Y yw xY w# t
        $ r Y yw xY w)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,  sh    	[[!PQZZ\FE	%jG "} '' 		
  		s    !4 A A
	A
	AAc                     t        |       dk7  r| S |dk(  ryt        |      \  }}t        |t              sJ |j	                         S )Nr   r   ro   )r:   rZ   rp   r   r   )rH   encrypted_valuer   r   s       r   _decrypt_windows_chromiumz'ChromiumBased._decrypt_windows_chromiumB  sI     u:?Lc!'84$&&&{{}r   c                 |   t         j                  dk(  r	 | j                  ||      S |s|dd d
vr|S t        | d      s|dd dk7  sJ d       |dd dk(  r| j                  | j                  fn| j                  f}|dd }|D ]t  }	t        j                  |	t
        j                  | j                         }
	 t#        |
j%                  |      t
        j&                        }|r|d	d }|j                  d      c S  t        d      # t        $ r | j                  st        d      |dd }|dd |dd }}t        j                  | j                  t
        j                  |      }	 |j                  |dd |      }n# t        $ r t        d      w xY w|r|d	d }|j                         cY S w xY w# t        $ r Y 9w xY w)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M0 _Ra(0@@L tY'"2A&&0Y2YY05DRa5HF5Rd001LLY)!"- 	CWWS#,,8F!&..##%&)nn6	8 )"#I ''00	 !!JKK_   %||&VX X #2!""5,Sb1?343HsggdllCLLFC11/"S2I3OD! C,AC CC 99D{{}$'%Z  s=   D 4A F.AF+#E98F+9FF+*F+.	F;:F;Nro   N)NNNNNNNrV  )r   r   r   r  r  r   r   rd  r  ru  staticmethodr  r  r  r   r   r   rZ  rZ    sb    5 *1 1 Y]lp>'@(T  * 
 
7Lr   rZ  c                   $     e Zd ZdZd fd	Z xZS )ChromezClass for Google Chromec                     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        |   dd|||d| y )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  < .  8Z\ . 9A- &4$A!
D 	 	M{%08	MGK	Mr   r  r   r   r   r  r   __classcell__r  s   @r   r  r    s    !$M $Mr   r  c                   $     e Zd ZdZd fd	Z xZS )ArczClass for Arcc                 X    t        ddgdg      dddd}t        |   d
d|||d	| y )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__  sW    7QS  &1!
 	 	MK%08	MGK	Mr   r  r  r  s   @r   r  r    s    M Mr   r  c                   $     e Zd ZdZd fd	Z xZS )ChromiumzClass for Chromiumc                 r    g dt        g d      ddgt        d      dddd	}t        |   dd|||d
| y )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__  sl      <  IJ 92 (6&1
4 	 	M%08	MGK	Mr   r  r  r  s   @r   r  r    s    M Mr   r  c                   $     e Zd ZdZd fd	Z xZS )OperazClass for Operac                     g dt        ddgg d      g dt        dg d      dd	d
d}t        |   dd
|||d| y )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__  sq      <>G 8 
 9>7 (3#7
: 	 	Mk%08	MGK	Mr   r  r  r  s   @r   r  r    s    M Mr   r  c                   $     e Zd ZdZd fd	Z xZS )OperaGXzClass for Opera GXc                 x    g t        ddgdg      dgt        ddg      ddd	d
}t        |   dd|||d| y )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__  ss    ;AJ "
  ^^8A!
 (3#!
$ 	 	M%08	MGK	Mr   r  r  r  s   @r   r  r    s    M Mr   r  c                         e Zd Zd fd	Z xZS )Bravec                     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        |   dd
|||d| y )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 :  < :  8hj : 9O9 %3#A!
D 	 	Mk%08	MGK	Mr   r  )r   r   r   r   r  r  s   @r   r  r  (  s    $M $Mr   r  c                   $     e Zd ZdZd fd	Z xZS )EdgezClass for Microsoft Edgec                     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        |   dd|||d| y )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  8[] 9 9B5 (<,A!
D 	 	M[%08	MGK	Mr   r  r  r  s   @r   r  r  P  s    "$M $Mr   r  c                   $     e Zd ZdZd fd	Z xZS )VivaldizClass for Vivaldi Browserc                 r    g dt        g d      ddgt        d      dddd	}t        |   dd|||d
| y )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__}  sl      <  HI 91 &5%5
8 	 	M%08	MGK	Mr   r  r  r  s   @r   r  r  z  s    #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y)FirefoxBasedz%Superclass for Firefox based browsersNc                    || _         |xs  | j                  di || _        t        j                  j                  t        j                  j                  | j                        d      | _        t        j                  j                  t        j                  j                  | j                        dd      | _        || _	        y )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*A*KF*KGGLLGGOOD,,-/@B "RWW__.57I!K 'r   c                     | j                   S r9   )r  r   s    r   r  zFirefoxBased.__str__  s       r   c                    t        j                         }t        j                  t        j                  j                  | dz   d            }| dz   }|s|S |d   }|j                  |d       d }|j                         D ]X  }|j                  d      r||   j                  d      } n1||   j                  d      dk(  sB|rE||   j                  d	      }Z |j                         D ]u  }||   j                  d	      |k(  s||   j                  d
      dk(  }|r|c S t        j                  j                  t        j                  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  sQ   **, IIbggllT!>'3 4&-   -a0%7( 	;G!!),%g229=$$Y/36|%g226:	; ( 	tGg""6*l:!'?..|<C'/|sRWW\\"''//RcBdfr5ss		t r   rt   returnc                 $   t        |t              s|g}|D ]`  }t        |t              rt        |      }nt        j
                  j                  |      }t        j
                  j                  |      s^|c S  t        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$%+D177--d3ww}}X&	  !d//00BCE 	Er   c                 H   g }t         j                  dk(  r| j                  |      }nt         j                  j                  d      s dt         j                  j	                         v r| j                  |      }nAt         j                  dk(  r| j                  |      }nt        dt         j                  z         t        j                  t        j                  j                  t        j                  |      d            xs |}|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-HN\\$$W-#,,:L:L:N1N!99/JN\\W$!99:KLN$03<<?A A yyl.N.N~.^`p!qr  	 ?"$!$"3"3!4LAC Cr   c                     t        | j                  dd      | j                  dd      | j                  dd      d | j                  dd      | j                  dd      | j                  dd            S )	Nr  ro   r#   r  FrH  rH   httponly)r  r   )cookie_jsons    r   __create_session_cookiez$FirefoxBased.__create_session_cookie  sh    [__VR8+//&RT:U(__Xu=t(__VR8+//!(";.(__Z?	A 	Ar   c                 L   t         j                  j                  | j                        sy 	 t	        | j                  d      5 }t        j                  |      }d d d        j                  dg       D ]k  }|j                  dg       D ]T  }| j                  dk(  s| j                  |j                  dd      v s1|j                  t        j                  |             V m y # 1 sw Y   xY w# t        $ r-}t        d| j                   dt        |             Y d }~y 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   ww~~d//0
	Jd''. 0( IIh/	0
 $--	26 J$jjB7 JF''2-1A1AVZZPVXZE[1[(@@HJJJ0 0 	NN4#4#4"5^Dc!fMM	Ns/   C- C!C- !C*&C- -	D#6#DD#c                    t         j                  j                  | j                        sy 	 t	        | j                  d      5 }|j                  d       t        j                  t        j                  j                  |j                                     }d d d        j                  dg       D ]T  }| j                  dk(  s| j                  |j                  dd      v s1|j                  t        j                  |             V y # 1 sw Y   sxY w# t         $ r-}t#        d| j$                   dt'        |             Y d }~y 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   ww~~d334
	Pd++T2 Nha  JJsyy';';HMMO'LM	N $--	26 P##r)T-=-=FTVAW-WMM,"F"Fv"NOPN N  	P !2!2 33EFAP P	Ps0   D ADD DD 	E#EEc                    t         j                  j                         }t        | j                  d      5 }|j                         }	 |j                  ddj                  | j                        f       |j                         D ].  }|\  }}}}	}
}}t!        ||||	|
||      }|j#                  |       0 	 d d d        | j%                  |       | j'                  |       |S # t        j                  $ rH}|j                  d   j                  d      r$t        dj                  | j                               d }~ww xY w# 1 sw Y   xY w)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  s5   ^^%%' 0 0$7 	!3**,C 028--@P@P2Q1SU  !FJCdFGT5)!$fg"&y:a 	!	!  	""2&&&r*	 (( 66!9''(UV,-S-Z-Z[_[o[o-pqq	! 	!s1   D?,C!3AD?!D<4AD77D<<D??E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C, A AJPr   r  c                   $     e Zd ZdZd fd	Z xZS )FirefoxzClass for Firefoxc                 N    ddgddddddgdgd}t        |   d	|||fi | y )
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  sT     9$ 
 "+=>&0BC"
 8
 	KhO$Or   r  r  r  s   @r   r'  r'  0  s    P Pr   r'  c                   $     e Zd ZdZd fd	Z xZS )	LibreWolfzClass for LibreWolfc                 N    ddgddddddgdgd}t        |   d	|||fi | y )
Nz"~/snap/librewolf/common/.librewolfz~/.librewolfrm   	librewolfr   r   z'~/Library/Application Support/librewolfr)  r,  r*  r  s        r   r   zLibreWolf.__init__G  sR     5 
 ";7&<"
 :
 	k;QDQr   r  r  r  s   @r   r,  r,  D  s    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y)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.binarycookiesNc                 p    d| _         || _        d | _        | j                  |       | j	                          y 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  s2    (%r   c                 R    | j                   r| j                   j                          y y r9   )r4  r   r   s    r   __del__zSafari.__del__j  s    ==MM! r   c                 t    |xs t        | j                  d      }|st        d      t        |d      | _        y )Nrx   zCan not find Safari cookie filerh  )r   safari_cookiesr   r  r4  )r   ra  s     r   __open_filezSafari.__open_filen  s6    !N]43F3F%N$%FGG[$/r   sizeoffsetc                     ||| _         | j                  j                  | j                          | xj                   |z  c_         t        | j                  j	                  |            S r9   )r2  r4  seekr   r  )r   r<  r=  s      r   __read_filezSafari.__read_filet  sM    "DM4==)t}}))$/00r   c           	         | j                   j                  d      dk(  sJ d       t        j                  d| j                   j                  d            d   | _        g | _        t        | j                        D ]M  }| j
                  j                  t        j                  d| j                   j                  d            d          O y )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    }}!!!$/K1KK/"MM$0B0B10EFqIt(() 	1A$$V]]dmm((+&--.&0 1	1r   filer   c                     g }	 | j                  d      }|dk(  rn|j                  |       )dj                  |      }|r|j                  d      }|S )Nr>       r   r   )r  r   r&   r   )rI  r   r   bytes       r   __read_until_nullzSafari.__read_until_null  sW    99Q<DwKK	 
 xx~;;w'Dr   pagecookie_offsetc           	         |j                  |       t        j                  d|j                  d            d   }|j                  dd       t        j                  d|j                  d            d   }|j                  dd       t	        |dz        }t	        |dz        }t        j                  d|j                  d            d   }t        j                  d|j                  d            d   }t        j                  d|j                  d            d   }	t        j                  d|j                  d            d   }
t        j                  d|j                  d            d   }|j                  d      dk(  sJ | j
                         t        t        j                  d|j                  d            d   | j                  z         }t        t        j                  d|j                  d            d   | j                  z         }|j                  ||z   d       | j                  |      }|j                  ||z   d       | j                  |      }|j                  ||	z   d       | j                  |      }|j                  ||
z   d       | j                  |      }|r&|j                  ||z   d       | j                  |      }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  sh   		- MM$		!-a0		!QdDIIaL1!4		!Q%	53;'mmD$))A,7:mmD$))A,7:mmD$))A,7:}}T499Q<8;tTYYq\:1=yy|22JD4J4JJ2&--diil;#667 8 dDIIaL1(() * 			-+-q1%%d+		-+-q1%%d+		-+-q1%%d+		-,.2&&t,IImn4a8&&t,AT4KukZZr   r  c                 L    | j                   sy| j                   |j                  v S )NT)r3  domain)r   r  s     r   __domain_filterzSafari.__domain_filter  s#    !!!!V]]22r   
page_indexc           	   #   L  K   d| j                   dz  z   t        | j                  d |       z   }| j                  | j                  |   |      }|j	                  d      dk(  sJ | j
                         t        j                  d|j	                  d            d   }g }t        |      D ]9  }|j                  t        j                  d|j	                  d            d          ; |j	                  d      dk(  sJ | j
                         |D ]  }| j                  ||        y w)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  s    T&&**!!+:./0 1 1* =vFyy|22JD4J4JJ2MM$		!5a8	y! 	HA!!&--diil"CA"FG	Hyy|22JD4J4JJ2$ 	4F%%dF33	4s   D"D$c                     t         j                  j                         }t        | j                        D ];  }| j                  |      D ]%  }| j                  |      s|j                  |       ' = |S r9   )r  r  r  rG  rE  _Safari__parse_page_Safari__domain_filterr  )r   r  r~   r  s       r   ru  zSafari.load  si    ^^%%'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  s    "NMN}o^Z1N
"01 1S 11 
 
 
 
$[7 $[3 $[L3dnn&;&; 3
4s 4r   r0  c                   &    e Zd ZdZddgZddZd Zy)LynxzClass for Lynxz~/.lynx_cookiesz	~/cookiesNc                 P    t        |xs | j                  d      | _        || _        y Nr   )r   lynx_cookiesra  rb  r   ra  rb  s      r   r   zLynx.__init__  s$    ()I8I8I7S&r   c                 
   t         j                  j                         }| j                  st	        d      t        | j                        5 }|j                         j                         D ]{  }|j                  d      D cg c]  }|dk(  rd n| c}\  }}}}}	}
}|dk(  }|dk(  }|j                  | j                        dk\  sZt        ||||	|
|d      }|j                  |       } 	 d d d        |S c c}w # 1 sw Y   |S xY w)NzCannot find Lynx cookie file	ro   TRUEr   F)r  r  r  ra  r   r  r  
splitlinessplitfindrb  r  r  )r   r  r}  linewordra  domain_specifiedr#   r  r  rH  rH   r  s                r   ru  z	Lynx.load  s   ^^%%'$%CDD$""# 
	*q++- 	* CG**TBRS$5S M($u#3v#= 6);;t//0A5*64$!5*FMM&)	*
	* 	 T	
	* 	s$   5C8 C33C8$C83C88Dr   )r   r   r   r  rt  r   ru  r   r   r   rq  rq    s     	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y	)W3mzClass for W3mr>      rB  r  r]  r  z~/.w3m/cookieNc                 P    t        |xs | j                  d      | _        || _        y rs  )r   w3m_cookiesra  rb  ru  s      r   r   zW3m.__init__  s$    ()H8H8H'R&r   c                 X   t         j                  j                         }| j                  st	        d      t        | j                        5 }|j                         j                         D ]!  }|j                  d      D cg c]  }|dk(  rd n| c}\  }}}}}	}
}}}}}t        |      }t        |      }t        || j                  z        }t        || j                  z        }t        || j                  z        }t        || j                  z        }|	j                  | j                         dk\  st         j                  j#                  ||||t        |      |	||	j%                  d      |
||||||i       }|j'                  |       $ 	 d d d        |S c c}w # 1 sw Y   |S xY w)NzCannot find W3m cookie filerw  ro   r   .)r  r  r  ra  r   r  r  ry  rz  rI   rX  
COO_SECURE
COO_DOMAINCOO_PATHCOO_DISCARDr{  rb  ro  rp  r  )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   ^^%%'$%BCC$""# 	*q++- * CG**TBRS$5S*T5'64wk4yg,dT__45#'t(>#? !%dT]]&:!;td&6&667;;t//0A5!^^227D% J0@"--c2D.&#Wg{BHF MM&)!*	*$ 	 T	*$ 	s&   6FFB#F5AFFF)r   )r   r   r   r  COO_USEr  r  r  r  COO_OVERRIDEr  r   ru  r   r   r   r  r    s9     GJJHKLK'r   r  c                     t         j                  j                  d||dd| | j                  d      | j                  d      |d||ddd|rddi      S 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    sm     >>  D%udDOOTWDXZ^ZiZijmZnpt!%vwtT5>*b!1H HDFH Hr   c                 8    t        | ||      j                         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::<<r   c                 8    t        | ||      j                         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7799r   c                 8    t        | ||      j                         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<<>>r   c                 8    t        | ||      j                         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99;;r   c                 8    t        | ||      j                         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;;==r   c                 8    t        | ||      j                         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                 8    t        | ||      j                         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88::r   c                 8    t        | ||      j                         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                 8    t        | ||      j                         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                 8    t        | ||      j                         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==??r   c                 8    t        | ||      j                         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                 6    t        | |      j                         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0r   c                 6    t        | |      j                         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                  j                         }t        D ]"  }	  ||       D ]  }|j	                  |        $ |S # t
        $ r Y 2w xY w)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    se     
	!	!	#B! 		#< &f%& I " 		s   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     s6         	     
    $ $ <<7#u0B0B0D'D< 
<<7  ! * )
1& 	 	=& QV$-N
B5s+ Bd S ,: : :eCI.> sTXyIY c4i(8 5dCS c4i(8 5dCS  N N0x, x,vR RjWL WLt'M] 'MTM- M(M} MD"MM "MJMm M4%MM %MP'M= 'MT!Mm !MHO OdPl P(R R(x xv <( (VH=:?<><;>>@=10 %5$R[]ceiknpst 9<
G z	$&M m+    s$   I !I! II!I*)I*