
    u%j&                        d dl mZ ddlmZ ddlmZ ddlmZ ddlmZ ed   Z	e	dk(  rddl
Z
nddlZd	Zd
ZdZ ej                   ej                    ej"                  e            d      Ze	dk(  r e
j                         Zn ej                         Zej+                  e        G d de      Z G d de      Zd Zd Z G d de      Zy)   )googleplay_pb2    )time)path)version_info)match   Na  CAEScFfqlIEG6gUYogFWrAISK1WDAg+hAZoCDgIU1gYEOIACFkLMAeQBnASLATlASUuyAyqCAjY5igOMBQzfA/IClwFbApUC4ANbtgKVAS7OAX8YswHFBhgDwAOPAmGEBt4OfKkB5weSB5AFASkiN68akgMaxAMSAQEBA9kBO7UBFE1KVwIDBGs3go6BBgEBAgMECQgJAQIEAQMEAQMBBQEBBAUEFQYCBgUEAwMBDwIBAgOrARwBEwMEAg0mrwESfTEcAQEKG4EBMxghChMBDwYGASI3hAEODEwXCVh/EREZA4sBYwEdFAgIIwkQcGQRDzQ2fTC2AjfVAQIBAYoBGRg2FhYFBwEqNzACJShzFFblAo0CFxpFNBzaAd0DHjIRI4sBJZcBPdwBCQGhAUd2A7kBLBVPngEECHl0UEUMtQETigHMAgUFCc0BBUUlTywdHDgBiAJ+vgKhAU0uAcYCAWQ/5ALUAw1UwQHUBpIBCdQDhgL4AY4CBQICjARbGFBGWzA1CAEMOQH+BRAOCAZywAIDyQZ2MgM3BxsoAgUEBwcHFia3AgcGTBwHBYwBAlcBggFxSGgIrAEEBw4QEqUCASsWadsHCgUCBQMD7QICA3tXCUw7ugJZAwGyAUwpIwM5AwkDBQMJA5sBCw8BNxBVVBwVKhebARkBAwsQEAgEAhESAgQJEBCZATMdzgEBBwG8AQQYKSMUkAEDAwY/CTs4/wEaAUt1AwEDAQUBAgIEAwYEDx1dB2wGeBFgTQzAAAAgMom/1a/v0lblO2Ubrt60J2gcuXSljGFQXgcyZWveWLEwo6prwgi3iJIZdodyhKZQrNWp5nKJ3srRXcUW+F1BD3baEVGcmEgqaLZUNBjm057pKRI16kB0YppeGx5qIQ5QjKzsR8ETQbKLNWgRY0QRNVz34kMJR3P/LgHax/6rmf5AAAAAwEAAQ==HOSTED_OR_GOOGLEzdevice.propertiesc                       e Zd Zy)InvalidLocaleErrorN__name__
__module____qualname__     Z/home/ubuntu/.local/share/pipx/venvs/gplaycli/lib/python3.12/site-packages/gpapi/config.pyr   r           r   r   c                       e Zd Zy)InvalidTimezoneErrorNr   r   r   r   r   r   #   r   r   r   c                  *    t         j                         S )z+Returns a list containing devices codenames)configsectionsr   r   r   getDevicesCodenamesr   '   s    ??r   c                      t               D  cg c])  } | t        j                  |       j                  d      d+ c} S c c} w )z2Returns codename and readable name for each deviceuserreadablename)codenamereadableName)r   r   get)ss    r   getDevicesReadableNamesr!   ,   sD     )*, #ZZ]../ABD , , ,s   .>c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)DeviceBuilderc                 j    i | _         t        j                  |      D ]  \  }}|| j                   |<    y )N)devicer   items)selfr%   keyvalues       r   __init__zDeviceBuilder.__init__5   s3    "LL0 	%LS%$DKK	%r   c                 x    |t        |      t        ur
t               t        d|      
t               || _        y )Nz[a-z]{2}\_[A-Z]{2})typestrr   r   locale)r'   r.   s     r   	setLocalezDeviceBuilder.setLocale:   s;    >T&\4$&& &/7$&&r   c                     |t        |      t        ur'| j                  j                  d      }|
t	               || _        y )Ntimezone)r,   r-   r%   r   r   r1   )r'   r1   s     r   setTimezonezDeviceBuilder.setTimezoneE   s;    tH~S8{{z2H*,, r   c           	          | j                   j                  dd      t        | j                         d| j                  j                  d      ddddS )	N_-zam-android-googlecelloperator4 ztimeoutMs=4000)zAccept-LanguagezX-DFE-Encoded-Targets
User-AgentzX-DFE-Client-IdzX-DFE-MCCMNCzX-DFE-Network-TypezX-DFE-Content-FilterszX-DFE-Request-Params)r.   replaceDFE_TARGETSgetUserAgentr%   r   )r'   s    r   getBaseHeaderszDeviceBuilder.getBaseHeadersL   sK    #';;#6#6sC#@)4"//1#6 $ ?&))+(8: 	:r   c                 N    | j                         }d|d<   d|d<   d|d<   d|d<   |S )	Nz+cl:billing.select_add_instrument_by_defaultzX-DFE-Enabled-Experimentsznocache:billing.use_charging_poller,market_emails,buyer_currency,prod_baseline,checkin.set_asset_paid_app_field,shekel_test,content_ratings,buyer_currency_in_app,nocache:encrypted_apk,recent_changeszX-DFE-Unsupported-Experiments320zX-DFE-SmallestScreenWidthDp3zX-DFE-Filter-Level)r=   )r'   headerss     r   getDeviceUploadHeadersz$DeviceBuilder.getDeviceUploadHeadersV   sF    %%'/\+,5e/0 27-.(+$%r   c                 X   | j                   j                  d      }|d}dj                  || j                   j                  d      | j                   j                  d      | j                   j                  d      | j                   j                  d      | j                   j                  d      | j                   j                  d	      | j                   j                  d
      | j                   j                  d      | j                   j                  d      j                  dd      
      S )Nzvending.versionstringz8.4.19.V-all [0] [FP] 175058788zAndroid-Finsky/{versionString} (api=3,versionCode={versionCode},sdk={sdk},device={device},hardware={hardware},product={product},platformVersionRelease={platform_v},model={model},buildId={build_id},isWideScreen=0,supportedAbis={supported_abis})zvending.versionbuild.version.sdk_intbuild.devicebuild.hardwarebuild.productzbuild.version.releasebuild.modelbuild.id	platforms,;)
versionStringversionCodesdkr%   hardwareproduct
platform_vmodelbuild_idsupported_abis)r%   r   formatr:   )r'   version_strings     r   r<   zDeviceBuilder.getUserAgenta   s    )@A!>N V.(,8I(J $0G H#';;??>#B%)[[__5E%F$(KKOOO$D'+{{7N'O"&++//-"@%)[[__Z%@+/;;??;+G+O+OPSUX+Y  	[	[r   c                     ddj                  | j                  j                  d      | j                  j                  d            i}|dj                  |      |d<   |S )Nr9   zGoogleAuth/1.4 ({device} {id})rE   rI   )r%   idz{0:x}r%   )rV   r%   r   )r'   gsfidrA   s      r   getAuthHeaderszDeviceBuilder.getAuthHeaders|   sa     #&'-vT[[__^5T151L (. (NO  'u 5GHr   c                     ||dt         | j                  j                  d      dd| j                  dd | j                  dddS )N1gsf.versionandroidr   r	   (38918a453d07199354f8b19af05ec6562ced5788)EmailEncryptedPasswdadd_accountaccountTypegoogle_play_services_versionhas_permissionsourcedevice_countrylang
client_sig	callerSig)ACCOUNTr%   r   r.   )r'   emailencrypted_passwds      r   getLoginParamszDeviceBuilder.getLoginParams   sK    #3"&040N"%#"&++a"2HG
I 
	Ir   c                 @   t        j                         }d|_        |j                  j	                  | j                                | j                  |_        | j                  |_        d|_	        |j                  j	                  | j                                d|_        |S )Nr      )r   AndroidCheckinRequestrY   checkinCopyFromgetAndroidCheckinr.   r1   timeZoneversiondeviceConfigurationgetDeviceConfigfragment)r'   requests     r   getAndroidCheckinRequestz&DeviceBuilder.getAndroidCheckinRequest   sz     668
  !7!7!9:==##,,T-A-A-CDr   c                    | j                   d   j                  d      }| j                   d   j                  d      }| j                   d   j                  d      }| j                   d   j                  d      }| j                   d   j                  d      }| j                   d   dk(  }| j                   d	   dk(  }t        j                         }t	        | j                   d
         |_        t	        | j                   d         |_        t	        | j                   d         |_        t	        | j                   d         |_        ||_	        ||_
        t	        | j                   d         |_        t	        | j                   d         |_        t	        | j                   d         |_        t	        | j                   d         |_        |D ]  }	|j                  j!                  |	        |D ]  }	|j"                  j!                  |	        |D ]  }	|j$                  j!                  |	        |D ]  }	|j&                  j!                  |	        |D ]  }	|j(                  j!                  |	        |S )NsharedlibrariesrK   featureslocaleszgl.extensionsrJ   hasfivewaynavigationtruehashardkeyboardtouchscreenkeyboard
navigationscreenlayoutzscreen.densityzscreen.widthzscreen.heightz
gl.version)r%   splitr   DeviceConfigurationProtointtouchScreenr   r   screenLayouthasHardKeyboardhasFiveWayNavigationscreenDensityscreenWidthscreenHeightglEsVersionnativePlatformappendsystemSharedLibrarysystemAvailableFeaturesystemSupportedLocaleglExtension)
r'   libListfeatureList
localeListglListrJ   r   r   deviceConfigxs
             r   ry   zDeviceBuilder.getDeviceConfig   s-   ++/066s;kk*-33C8[[+11#6
_-33C8KK,2237	 $,B Cv M;;'89VC%>>@#&t{{='A#B  #DKK
$; <"%dkk,&?"@$'N(C$D!'6$,@)%(5E)F%G"#&t{{>'B#C $'O(D$E!#&t{{<'@#A  	2A''..q1	2 	7A,,33A6	7 	:A//66q9	: 	9A..55a8	9 	/A$$++A.	/r   c                 v   t        j                         }| j                  d   |_        | j                  d   |_        | j                  d   |_        | j                  d   |_        | j                  d   |_        | j                  d   |_        t        | j                  d         |_	        | j                  d   |_
        | j                  d	   |_        | j                  d
   |_        | j                  d   |_        d|_        t        t               dz        |_        t        | j                  d         |_        |S )Nzbuild.fingerprintrF   zbuild.brandzbuild.radiozbuild.bootloaderrE   rD   rH   zbuild.manufacturerrG   clientFi  r^   )r   AndroidBuildProtor%   rY   rQ   carrierradio
bootloaderr   
sdkVersionrS   manufacturerbuildProductr   otaInstalledr   	timestampgoogleServices)r'   androidBuilds     r   getAndroidBuildzDeviceBuilder.getAndroidBuild   s   %779++&9:#{{+;<#{{=9![[7"&++.@"A"kk.9"%dkk2I&J"K![[7$(KK0D$E!$(KK$@!"kk(3$)!!$TVD[!1&)$++m*D&E#r   c                    t        j                         }|j                  j                  | j	                                d|_        | j                  d   |_        | j                  d   |_        | j                  d   |_	        d|_
        |S )Nr   r6   simoperatorroaming)r   AndroidCheckinProtobuildrt   r   lastCheckinMsecr%   cellOperatorsimOperatorr   
userNumber)r'   androidCheckins     r   ru   zDeviceBuilder.getAndroidCheckin   sv    ';;=%%d&:&:&<=)*&&*kk.&A#%)[[%?"!%Y!7$%!r   N)r   r   r   r*   r/   r2   r=   rB   r<   r[   ro   r|   ry   r   ru   r   r   r   r#   r#   3   sA    %
	!:[6I	@$r   r#   )r8   r   r   osr   sysr   rer   VERSIONConfigParserconfigparserr;   GOOGLE_PUBKEYrl   joindirnamerealpath__file__filepathr   read	Exceptionr   r   r   r!   objectr#   r   r   r   <module>r      s        
q/
a< K O
 499\T\\-$--"9:(* a<&\&&(F&\&&(F H 	 		9 	
,dF dr   