o
    ej                     @  s   d Z ddlm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 h dZdd	hZd
ZdZdZdddZdS )z:Deterministic signing for the WordPress Bridge trust core.    )annotationsN)Path)serialization)Ed25519PrivateKey>   .js.md.mo.po.css.php.pot.txt.xml.json.lockLICENSEAUTHORS)i     r   r   r   r   i  i  @sourcer   outputprivate_key_pathreturndictc              
   C  s  |   } | d }| d }| r| stdt|jdd}h d}||  r/td|jddd d }td	|tj	}|rL|
d
|d krPtd| d d d }	|	 s`td|	jdd}
td|
}|rw|
d
|d kr{tdg }d}t| dD ]3}| rtd| sqtdd |jD rq|jtvr|j tvrq|| || j7 }q|rt|tks|tkrtd|jddd |d|d  d }tj|dtjdd4}|D ])}td | |  }t!|" t#}tj|_$d!|_%d"|_&|j'||( tjdd# qW d    n	1 sw   Y  |( }t)j*|( d d$}t+|t,s9td%i ||jt|t-.|/ d&t01|2|3d'd(}||j d) }|j4tj5|d*dd+d, dd i |t6|t6|d-S ).Nzbridge-release.jsonzInstaller.phpz+Bridge manifest or Installer.php is missingzutf-8)encoding>   channelversionrelease_notesminimum_php_versionminimum_wordpress_versionz%Bridge release manifest is incompletei  z^\s*\*\s*Version:\s*(\S+)r   r   z0Installer version does not match bridge manifestincludessecurityzbridge-core.phpzBridge security core is missingz>private\s+const\s+BRIDGE_VERSION\s*=\s*['\"]([^'\"]+)['\"]\s*;z3Runtime Core version does not match bridge manifestr   *z+Bridge source cannot contain symbolic linksc                 s  s    | ]}|d v V  qdS )>   .gittmplogscachenode_modulesN ).0partr'   r'   @/var/www/html/flask_server/platform/packages/wordpress_bridge.py	<genexpr>5   s    z'build_bridge_release.<locals>.<genexpr>z0Bridge release size or file count exceeds limitsT)parentsexist_okzwp-flask-bridge-z.zipw	   )compresslevelzwp-flask-bridge   l     H )compress_typer0   )passwordz"Bridge signing key must be Ed25519Ed25519ascii)artifact_nameartifact_sizesha256signature_algorithm	signaturez.release.json   )indent	sort_keys
)artifact_pathrelease_path)7resolveis_file
ValueErrorjsonloads	read_textkeysresearch	MULTILINEgroupsortedrglob
is_symlinkanypartsnameALLOWED_EXTENSIONLESSsuffixlowerALLOWED_SUFFIXESappendstatst_sizelen	MAX_FILES	MAX_BYTESmkdirzipfileZipFileZIP_DEFLATEDr   relative_toZipInfoas_posixZIP_TIMESTAMPr2   create_systemexternal_attrwritestr
read_bytesr   load_pem_private_key
isinstancer   hashlibr8   	hexdigestbase64	b64encodesigndecode
write_textdumpsstr)r   r   r   manifest_path	installermanifestrequiredheadermatch	core_pathcore
core_matchfilessizepathartifactarchiverelativeinfocontentprivate_keyreleaser@   r'   r'   r*   build_bridge_release   s   
r   )r   r   r   r   r   r   r   r   )__doc__
__future__r   rl   rj   rD   rH   r]   pathlibr   cryptography.hazmat.primitivesr   1cryptography.hazmat.primitives.asymmetric.ed25519r   rU   rR   rc   rZ   r[   r   r'   r'   r'   r*   <module>   s     