Создайте файл Google Chrome Crx с помощью PHP - PullRequest
5 голосов
/ 16 февраля 2011

Я хотел бы иметь возможность генерировать файл crx с PHP.

Файл crx - это zip-файл с дополнительным заголовком, и я не знаю, как создать этот заголовок. Я могу создать файл crx, если я использую предварительно сгенерированный файл pem, но это приводит к тому, что все файлы crx имеют одинаковый идентификатор расширения, и это не хорошо. Вот ссылка на то, что я до сих пор получил .....
http://valorsolo.com/index.php?page=Viewing%20Message&id=1472&pagenum=2#1500

Если это поможет, то это было сделано в Python, и здесь есть отличная запись в блоге о мельчайших деталях здесь ...
http://blog.roomanna.com/12-12-2010/packaging-chrome-extensions
и вот некоторые ссылки на другой код по теме .....
http://code.google.com/chrome/extensions/crx.html
http://code.google.com/p/crx-packaging/source/browse/trunk/packer.py
https://github.com/bellbind/crxmake-python/blob/master/crxmake.py
http://www.curetheitch.com/projects/buildcrx/

Ответы [ 3 ]

3 голосов
/ 07 апреля 2011

Этот код рубина был полезен.

Ваш открытый ключ должен быть в формате DER, и, к сожалению, расширение OpenSSL в PHP не может этого сделать, насколько я могу судить. Мне пришлось сгенерировать его из моего личного ключа в командной строке:

openssl rsa -pubout -outform DER < extension_private_key.pem > extension_public_key.pub

ОБНОВЛЕНИЕ : здесь есть функция PHP der2pem () , доступная здесь , благодаря tutuDajuju за указание на нее.

Как только это будет сделано, создать файл .crx довольно просто:

# make a SHA1 signature using our private key
$pk = openssl_pkey_get_private(file_get_contents('extension_private_key.pem'));
openssl_sign(file_get_contents('extension.zip'), $signature, $pk, 'sha1');
openssl_free_key($pk);

# decode the public key
$key = base64_decode(file_get_contents('extension_public_key.pub'));

# .crx package format:
#
#   magic number               char(4)
#   crx format ver             byte(4)
#   pub key lenth              byte(4)
#   signature length           byte(4)
#   public key                 string
#   signature                  string
#   package contents, zipped   string
#
# see http://code.google.com/chrome/extensions/crx.html
#
$fh = fopen('extension.crx', 'wb');
fwrite($fh, 'Cr24');                             // extension file magic number
fwrite($fh, pack('V', 2));                       // crx format version
fwrite($fh, pack('V', strlen($key)));            // public key length
fwrite($fh, pack('V', strlen($signature)));      // signature length
fwrite($fh, $key);                               // public key
fwrite($fh, $signature);                         // signature
fwrite($fh, file_get_contents('extension.zip')); // package contents, zipped
fclose($fh);
2 голосов
/ 16 ноября 2013

Вы можете использовать рабочее решение PHP: https://github.com/andyps/crxbuild Есть класс PHP, который вы можете включить в свой проект и скрипт командной строки.

2 голосов
/ 17 февраля 2011

Формат CRX подробно описан на странице документации: http://code.google.com/chrome/extensions/crx.html

В конце этого файла есть примеры для Ruby и Bash. Следуйте формату на вашем языке (PHP).

...