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 || true) 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