50 lines
1.8 KiB
Fish
50 lines
1.8 KiB
Fish
function installExtension -d "Installs a Chromium extension for the browser with the specified information" -a name dir bin policyDir extensionDir
|
|
[ -n "$bin" ]
|
|
or set -l bin google-chrome-stable
|
|
[ -n "$policyDir" ]
|
|
or set -l policyDir /opt/google/chrome/extensions
|
|
[ -n "$extensionDir" ]
|
|
or set -l extensionDir /usr/local/share/chromium-extensions
|
|
|
|
set -l keyFile "$dir.pem"
|
|
set -l extensionFile "$dir.crx"
|
|
set -l manifestFile "$dir/manifest.json"
|
|
set -l destination "$extensionDir/$name.crx"
|
|
|
|
rm "$keyFile" &>/dev/null
|
|
$bin --pack-extension="$dir"
|
|
|
|
# Tamper manifest file
|
|
begin
|
|
set -l manifest (cat "$manifestFile" | KEY=(openssl rsa -in "$keyFile" -pubout -outform DER | openssl base64 -A) jq ". + { key: env.KEY }")
|
|
echo "$manifest" >"$manifestFile"
|
|
$bin --pack-extension="$dir" --pack-extension-key="$keyFile"
|
|
end
|
|
|
|
set -l id (openssl rsa -in "$keyFile" -pubout -outform DER | sha256sum | head -c32 | tr 0-9a-f a-p)
|
|
set -l extVersion (cat "$manifestFile" | jq -r ".version")
|
|
|
|
# Install and configure extension
|
|
begin
|
|
set -l property external_crx
|
|
sudo mkdir -p "$extensionDir"
|
|
sudo cp "$extensionFile" "$destination"
|
|
sudo chmod -R a+rx "$extensionDir"
|
|
sudo chmod -R u+w "$extensionDir"
|
|
sudo mkdir -p "$policyDir"
|
|
|
|
for manifest in (find "$policyDir" -name "*.json" -print0 | string split0)
|
|
if [ (cat "$manifest" | jq -r ".$property") = "$destination" ]
|
|
sudo rm "$manifest"
|
|
end
|
|
end
|
|
|
|
begin
|
|
echo null | \
|
|
FILE="$destination" \
|
|
VERSION="$extVersion" \
|
|
jq '{ external_crx: env.FILE, external_version: env.VERSION }'
|
|
end | sudo tee "$policyDir/$id.json" >/dev/null
|
|
end
|
|
end
|