From 4f4421d3c57161ff69692baf4dd05fdaffe690d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20F=C3=BClling?= Date: Wed, 16 Sep 2020 16:01:50 +0200 Subject: [PATCH 1/2] add installation for extensions without keyfile --- lib/auto_chrome/chrome_extension.rb | 43 +++++++++++++++++++++-------- lib/auto_chrome/profile_builder.rb | 6 +++- 2 files changed, 37 insertions(+), 12 deletions(-) diff --git a/lib/auto_chrome/chrome_extension.rb b/lib/auto_chrome/chrome_extension.rb index fb90117..ac48ab9 100644 --- a/lib/auto_chrome/chrome_extension.rb +++ b/lib/auto_chrome/chrome_extension.rb @@ -4,23 +4,44 @@ class AutoChrome::ChromeExtension attr_reader :path, :id, :key, :manifest, :version + def initialize(crx_path) @path = crx_path - data = File.read(@path, mode: 'rb') - key_file = File.dirname(path) + "/" + File.basename(@path, ".crx") + ".pub" - if !File.exists?(key_file) - raise "No key file found for extension #{path}" - end - @key = File.read(key_file) - @id = Digest::SHA256.hexdigest(key)[0...32].tr('0-9a-f', 'a-p') - # use open3 to suppress unzip warnings for unexpected crx headers json, _, _ = Open3.capture3('unzip', '-qc', @path, 'manifest.json') @manifest = JSON.parse(json, symbolize_names: true) - @manifest[:key] = Base64.encode64(@key).gsub(/\s/, '') - @version = @manifest[:version] + key_file = File.dirname(path) + "/" + File.basename(@path, ".crx") + ".pub" + unless File.exists?(key_file) + if @manifest.dig(:key) != nil + puts "[---] Reading key from manifest, this might not work..." + @key = @manifest[:key] + @id = Digest::SHA256.hexdigest(Base64.decode64(@key))[0...32].tr('0-9a-f', 'a-p') + else + raise "No key file or key in manifest found for extension #{path}" + end + else + @key = File.read(key_file) + @id = Digest::SHA256.hexdigest(key)[0...32].tr('0-9a-f', 'a-p') + @manifest[:key] = Base64.encode64(@key).gsub(/\s/, '') + end + + if @manifest.dig(:id) != nil + @id = @manifest[:id] + else + if :id == nil || id.to_s.strip.empty? + raise "No id found for extension #{path}!" + end + end + + if @manifest.dig(:version) != nil + @version = @manifest[:version] + else + if :version == nil + raise "No version found for extension #{path}!" + end + end end -end +end \ No newline at end of file diff --git a/lib/auto_chrome/profile_builder.rb b/lib/auto_chrome/profile_builder.rb index 0d8f701..e952aa4 100644 --- a/lib/auto_chrome/profile_builder.rb +++ b/lib/auto_chrome/profile_builder.rb @@ -126,7 +126,11 @@ def add_extension(crx, profiles) # bypass extension confirmation prompts profiles.each do |p| - p.secure_prefs["extensions.settings.#{crx.id}"] = {ack_external: true} + p.secure_prefs["extensions.settings.#{crx.id}"] = { + disable_reasons: 0, + ack_external: true, + state: 1 # this will soon be deprecated, better to use disable_reasons right away + } end #XXX this will break if we call add_extension multiple times with the same #extension and different profiles From 8a79a54fe40d0af7c89922682a781800d91cc406 Mon Sep 17 00:00:00 2001 From: Lerk Date: Wed, 16 Sep 2020 17:43:47 +0200 Subject: [PATCH 2/2] fix lint error --- lib/auto_chrome/chrome_extension.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/auto_chrome/chrome_extension.rb b/lib/auto_chrome/chrome_extension.rb index ac48ab9..c61c6b4 100644 --- a/lib/auto_chrome/chrome_extension.rb +++ b/lib/auto_chrome/chrome_extension.rb @@ -14,7 +14,7 @@ def initialize(crx_path) @manifest = JSON.parse(json, symbolize_names: true) key_file = File.dirname(path) + "/" + File.basename(@path, ".crx") + ".pub" - unless File.exists?(key_file) + if !File.exist?(key_file) if @manifest.dig(:key) != nil puts "[---] Reading key from manifest, this might not work..." @key = @manifest[:key] @@ -44,4 +44,4 @@ def initialize(crx_path) end end end -end \ No newline at end of file +end