mirror of
https://github.com/arkenfox/user.js.git
synced 2025-09-01 17:38:30 +02:00
Compare commits
121 Commits
v63.0-beta
...
v65.0-beta
Author | SHA1 | Date | |
---|---|---|---|
5c703f0262 | |||
de0ebbed21 | |||
e448015704 | |||
d3b1ed45ad | |||
ed140425ea | |||
3847f97f41 | |||
d81e8ae583 | |||
7a8381d894 | |||
649699ad22 | |||
1d5289dd94 | |||
74c8f294d6 | |||
a0508eccf6 | |||
25acd9f63e | |||
74a08114a8 | |||
71ffc661b2 | |||
e432a22693 | |||
f06c78f897 | |||
847eb80877 | |||
ec0e58099f | |||
e6eb473071 | |||
f1b892bc1c | |||
524b5f79dc | |||
24f2e1d982 | |||
c6060e5645 | |||
d0b8a08a4b | |||
f047fe93c0 | |||
6147fed61c | |||
54f79604da | |||
2f351fa5ce | |||
5dc3ea66cd | |||
d9a87b3ac4 | |||
95b75a065d | |||
8c96432eb8 | |||
1c09ec36e3 | |||
f1e6d164f7 | |||
3b90e6e592 | |||
45bd5ccc02 | |||
7bf5790f2b | |||
075d6fe6e4 | |||
4604cf0d4e | |||
b845f8fe3a | |||
96063027ba | |||
186fb1c9be | |||
ac4e764c37 | |||
5b0952f60a | |||
5bd5f6b28e | |||
55c2cacbce | |||
4badc42879 | |||
6946a01232 | |||
da80e39064 | |||
c1d6d81528 | |||
d5ece0f6f4 | |||
f6ea20a8b0 | |||
645492e82f | |||
15c68dc344 | |||
04b797f1aa | |||
e60abd6c44 | |||
d55b8176ad | |||
31adbba774 | |||
3c247a2c5b | |||
879f0abf28 | |||
d97d0ec0f5 | |||
3916e38681 | |||
51ac69874b | |||
2d956d04f3 | |||
9d6bfb650c | |||
ccdd4decf0 | |||
f0fbfd3086 | |||
88b747ef36 | |||
c6ebe36165 | |||
7684e83aba | |||
4f37975566 | |||
26b874bed7 | |||
61be5ae563 | |||
ef1e61ebcd | |||
205c48d9d3 | |||
0e1b0a4b6e | |||
778dc89bb6 | |||
23733097a9 | |||
71a2d393f3 | |||
74ebacc0dd | |||
45e3b3a0e0 | |||
8172f730d3 | |||
5c85e61bb4 | |||
0a67cdec8b | |||
b85668c2cd | |||
786839ffc1 | |||
8313f2e01a | |||
0a87c99a0e | |||
91fed43fc7 | |||
74f029566e | |||
571be93ae0 | |||
11b16c9c6d | |||
c4ec4dbc77 | |||
67998eb4af | |||
834857b564 | |||
25923f1acd | |||
85eaba2571 | |||
51237f6889 | |||
74e753d0c5 | |||
db56940422 | |||
400d764a93 | |||
f3e2bfa76d | |||
d4907faa8e | |||
62351bfbf5 | |||
b182946ae4 | |||
2ae3a3e4e1 | |||
0ff610c056 | |||
661a314e28 | |||
106f46d053 | |||
643cba63cf | |||
b5c5d8e9d1 | |||
36b90cd5e6 | |||
299a03663f | |||
13550d18a1 | |||
c12eb0fdc6 | |||
acbf881b1f | |||
7351e561c4 | |||
4e42bad6a1 | |||
b85e748b53 | |||
0cc4007eda |
10
README.md
10
README.md
@ -6,6 +6,10 @@ The `ghacks user.js` is a **template** which aims to provide as much privacy and
|
||||
|
||||
Everyone, experts included, should at least read the [implementation](https://github.com/ghacksuserjs/ghacks-user.js/wiki/1.3-Implementation) wiki page, as it contains important information regarding a few `ghacks user.js` settings.
|
||||
|
||||
Note that we do *not* recommend connecting over Tor on Firefox. Use the [Tor Browser](https://www.torproject.org/projects/torbrowser.html.en) if your [threat model](https://www.torproject.org/about/torusers.html.en) calls for it, or for accessing hidden services.
|
||||
|
||||
Also be aware that this `user.js` is made specifically for Firefox. Using it as-is in other Gecko-based browsers can be counterproductive, especially in the Tor Browser.
|
||||
|
||||
Sitemap: [Releases](https://github.com/ghacksuserjs/ghacks-user.js/releases), [changelogs](https://github.com/ghacksuserjs/ghacks-user.js/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Achangelog), [Wiki](https://github.com/ghacksuserjs/ghacks-user.js/wiki), [stickies](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+is%3Aopen+label%3A%22sticky+topic%22). [diffs](https://github.com/ghacksuserjs/ghacks-user.js/issues?q=is%3Aissue+label%3Adiffs)
|
||||
|
||||
### ![][b] acknowledgments
|
||||
@ -13,11 +17,11 @@ Literally thousands of sources, references and suggestions. That said...
|
||||
|
||||
* Martin Brinkmann at [ghacks](https://www.ghacks.net/) <sup>1</sup>
|
||||
* The ghacks community and commentators
|
||||
* [12bytes](http://12bytes.org/tech/firefox/firefoxgecko-configuration-guide-for-privacy-and-performance-buffs)
|
||||
* The 12bytes article now uses this user.js and supplements it with an additonal JS hosted at [GitLab](https://gitlab.com/labwrat/Firefox-user.js/tree/master)
|
||||
* [12bytes](https://12bytes.org/articles/tech/firefox/firefoxgecko-configuration-guide-for-privacy-and-performance-buffs)
|
||||
* The 12bytes article now uses this user.js and supplements it with an additional JS hosted at [GitLab](https://gitlab.com/labwrat/Firefox-user.js/tree/master)
|
||||
|
||||
<sup>1</sup> The ghacks user.js was an independent project by [Thorin-Oakenpants](https://github.com/Thorin-Oakenpants) started in early 2015 and was [first published](https://www.ghacks.net/2015/08/18/a-comprehensive-list-of-firefox-privacy-and-security-settings/) at ghacks in August 2015. With Martin Brinkmann's blessing, it will keep the ghacks name.
|
||||
|
||||
### ![][b] [](https://opensource.org/licenses/MIT)
|
||||
|
||||
[b]: https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/wikipiki/bullet01.png
|
||||
[b]: /wikipiki/bullet01.png
|
||||
|
@ -36,7 +36,8 @@
|
||||
'camera.control.face_detection.enabled',
|
||||
'dom.disable_window_status_change',
|
||||
'dom.idle-observers-api.enabled',
|
||||
/* 58 : nothing */
|
||||
/* 58 */
|
||||
'browser.crashReports.unsubmittedCheck.autoSubmit',
|
||||
/* 57 */
|
||||
'social.whitelist',
|
||||
'social.toast-notifications.enabled',
|
||||
|
@ -1,7 +1,7 @@
|
||||
/***
|
||||
This will reset the preferences that have been removed completely from the ghacks user.js.
|
||||
|
||||
Last updated: 30-Sept-2018
|
||||
Last updated: 30-Jan-2019
|
||||
|
||||
For instructions see:
|
||||
https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.1-Resetting-Inactive-Prefs-[Scripts]
|
||||
@ -106,6 +106,20 @@
|
||||
'extensions.webextensions.keepStorageOnUninstall',
|
||||
'extensions.webextensions.keepUuidOnUninstall',
|
||||
'privacy.trackingprotection.ui.enabled',
|
||||
/* 64-beta */
|
||||
'browser.eme.ui.enabled',
|
||||
'browser.sessionstore.max_windows_undo',
|
||||
'network.auth.subresource-img-cross-origin-http-auth-allow',
|
||||
'media.peerconnection.ice.tcp',
|
||||
'media.peerconnection.identity.enabled',
|
||||
'media.peerconnection.identity.timeout',
|
||||
'media.peerconnection.turn.disable',
|
||||
'media.peerconnection.use_document_iceservers',
|
||||
'media.peerconnection.video.enabled',
|
||||
'media.navigator.video.enabled',
|
||||
/* 65-beta */
|
||||
'browser.contentblocking.enabled',
|
||||
'browser.urlbar.maxHistoricalSearchSuggestions',
|
||||
/* reset parrot: check your open about:config after running the script */
|
||||
'_user.js.parrot'
|
||||
]
|
||||
|
@ -1,5 +1,5 @@
|
||||
|
||||
/*** ghacks-user.js troubleshooter.js v1.5 ***/
|
||||
/*** ghacks-user.js troubleshooter.js v1.5.2 ***/
|
||||
|
||||
(function() {
|
||||
|
||||
@ -82,7 +82,6 @@
|
||||
'dom.push.enabled',
|
||||
'dom.push.serverURL',
|
||||
'dom.serviceWorkers.enabled',
|
||||
'dom.workers.enabled',
|
||||
'dom.webnotifications.enabled',
|
||||
'dom.webnotifications.serviceworker.enabled',
|
||||
|
||||
@ -116,6 +115,7 @@
|
||||
/* Audio + Video */
|
||||
'dom.webaudio.enabled',
|
||||
'media.autoplay.enabled',
|
||||
'media.autoplay.default', // FF63+
|
||||
|
||||
/* Forms */
|
||||
'browser.formfill.enable',
|
||||
@ -125,7 +125,6 @@
|
||||
/* HTTPS */
|
||||
'security.cert_pinning.enforcement_level',
|
||||
'security.family_safety.mode',
|
||||
'security.mixed_content.use_hsts',
|
||||
'security.OCSP.require',
|
||||
'security.pki.sha1_enforcement_level',
|
||||
'security.ssl.require_safe_negotiation',
|
||||
@ -152,7 +151,7 @@
|
||||
'dom.popup_maximum',
|
||||
'layout.css.visited_links_enabled',
|
||||
'mathml.disabled',
|
||||
'network.auth.subresource-img-cross-origin-http-auth-allow',
|
||||
'network.auth.subresource-http-auth-allow',
|
||||
'network.http.redirection-limit',
|
||||
'network.protocol-handler.external.ms-windows-store',
|
||||
'privacy.trackingprotection.enabled',
|
||||
|
492
updater.sh
492
updater.sh
@ -1,129 +1,427 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
### ghacks-user.js updater for Mac/Linux
|
||||
## author: @overdodactyl, @ema-pe
|
||||
## version: 1.4
|
||||
## ghacks-user.js updater for macOS and Linux
|
||||
|
||||
## DON'T GO HIGHER THAN VERSION x.9 !! ( because of ASCII comparison in check_for_update() )
|
||||
## version: 2.5
|
||||
## Author: Pat Johnson (@overdodactyl)
|
||||
## Additional contributors: @earthlng, @ema-pe, @claustromaniac
|
||||
|
||||
ghacksjs="https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js"
|
||||
updater="https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.sh"
|
||||
update_pref=${1:--ask}
|
||||
## DON'T GO HIGHER THAN VERSION x.9 !! ( because of ASCII comparison in update_updater() )
|
||||
|
||||
currdir=$(pwd)
|
||||
readonly CURRDIR=$(pwd)
|
||||
|
||||
DOWNLOAD_TO_STDOUT="curl -s"
|
||||
DOWNLOAD_TO_FILE="curl -O"
|
||||
sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
|
||||
if [ -z "$sfp" ]; then sfp=${BASH_SOURCE[0]}; fi
|
||||
readonly SCRIPT_DIR=$(dirname "${sfp}")
|
||||
|
||||
# Use wget if curl is not available.
|
||||
if [[ -z $(command -v "curl") ]]; then
|
||||
DOWNLOAD_TO_STDOUT="wget --quiet --output-document=-"
|
||||
DOWNLOAD_TO_FILE="wget"
|
||||
|
||||
#########################
|
||||
# Base variables #
|
||||
#########################
|
||||
|
||||
# Colors used for printing
|
||||
RED='\033[0;31m'
|
||||
BLUE='\033[0;34m'
|
||||
BBLUE='\033[1;34m'
|
||||
GREEN='\033[0;32m'
|
||||
ORANGE='\033[0;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Argument defaults
|
||||
UPDATE='check'
|
||||
CONFIRM='yes'
|
||||
OVERRIDE='user-overrides.js'
|
||||
BACKUP='multiple'
|
||||
COMPARE=false
|
||||
SKIPOVERRIDE=false
|
||||
VIEW=false
|
||||
PROFILE_PATH=false
|
||||
ESR=false
|
||||
|
||||
# Download method priority: curl -> wget
|
||||
DOWNLOAD_METHOD=''
|
||||
if [[ $(command -v 'curl') ]]; then
|
||||
DOWNLOAD_METHOD='curl'
|
||||
elif [[ $(command -v 'wget') ]]; then
|
||||
DOWNLOAD_METHOD='wget'
|
||||
else
|
||||
echo -e "${RED}This script requires curl or wget.\nProcess aborted${NC}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
## get the full path of this script (readlink for Linux, greadlink for Mac with coreutils installed)
|
||||
sfp=$(readlink -f "${BASH_SOURCE[0]}" 2>/dev/null || greadlink -f "${BASH_SOURCE[0]}" 2>/dev/null)
|
||||
|
||||
## fallback for Macs without coreutils
|
||||
if [ -z "$sfp" ]; then sfp=${BASH_SOURCE[0]}; fi
|
||||
show_banner () {
|
||||
echo -e "${BBLUE}\n"
|
||||
echo ' ############################################################################'
|
||||
echo ' #### ####'
|
||||
echo ' #### ghacks user.js ####'
|
||||
echo ' #### Hardening the Privacy and Security Settings of Firefox ####'
|
||||
echo ' #### Maintained by @Thorin-Oakenpants and @earthlng ####'
|
||||
echo ' #### Updater for macOS and Linux by @overdodactyl ####'
|
||||
echo ' #### ####'
|
||||
echo ' ############################################################################'
|
||||
echo -e "${NC}\n"
|
||||
echo -e "Documentation for this script is available here: ${CYAN}https://github.com/ghacksuserjs/ghacks-user.js/wiki/3.3-Updater-Scripts${NC}\n"
|
||||
}
|
||||
|
||||
## change directory to the Firefox profile directory
|
||||
cd "$(dirname "${sfp}")"
|
||||
#########################
|
||||
# Arguments #
|
||||
#########################
|
||||
|
||||
## Used to check if a new version of updater.sh is available
|
||||
update_available="no"
|
||||
check_for_update () {
|
||||
online_version="$($DOWNLOAD_TO_STDOUT ${updater} | sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p')"
|
||||
path_to_script="$(dirname "${sfp}")/updater.sh"
|
||||
current_version="$(sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p' "$path_to_script")"
|
||||
if [[ "$current_version" < "$online_version" ]]; then
|
||||
update_available="yes"
|
||||
usage() {
|
||||
echo -e "${BLUE}\nUsage: $0 [-h] [-p PROFILE] [-u] [-d] [-s] [-n] [-b] [-c] [-v] [-r] [-e] [-o OVERRIDE]\n${NC}" 1>&2 # Echo usage string to standard error
|
||||
echo 'Optional Arguments:'
|
||||
echo -e "\t-h,\t\t Show this help message and exit."
|
||||
echo -e "\t-p PROFILE,\t Path to your Firefox profile (if different than the dir of this script)"
|
||||
echo -e "\t\t\t IMPORTANT: if the path include spaces, wrap the entire argument in quotes."
|
||||
echo -e "\t-l, \t\t Choose your Firefox profile from a list"
|
||||
echo -e "\t-u,\t\t Update updater.sh and execute silently. Do not seek confirmation."
|
||||
echo -e "\t-d,\t\t Do not look for updates to updater.sh."
|
||||
echo -e "\t-s,\t\t Silently update user.js. Do not seek confirmation."
|
||||
echo -e "\t-b,\t\t Only keep one backup of each file."
|
||||
echo -e "\t-c,\t\t Create a diff file comparing old and new user.js within userjs_diffs. "
|
||||
echo -e "\t-o OVERRIDE,\t Filename or path to overrides file (if different than user-overrides.js)."
|
||||
echo -e "\t\t\t If used with -p, paths should be relative to PROFILE or absolute paths"
|
||||
echo -e "\t\t\t If given a directory, all files inside will be appended recursively."
|
||||
echo -e "\t\t\t You can pass multiple files or directories by passing a comma separated list."
|
||||
echo -e "\t\t\t\t Note: If a directory is given, only files inside ending in the extension .js are appended"
|
||||
echo -e "\t\t\t\t IMPORTANT: do not add spaces between files/paths. Ex: -o file1.js,file2.js,dir1"
|
||||
echo -e "\t\t\t\t IMPORTANT: if any files/paths include spaces, wrap the entire argument in quotes."
|
||||
echo -e "\t\t\t\t\t Ex: -o \"override folder\" "
|
||||
echo -e "\t-n,\t\t Do not append any overrides, even if user-overrides.js exists."
|
||||
echo -e "\t-v,\t\t Open the resulting user.js file."
|
||||
echo -e "\t-r,\t\t Only download user.js to a temporary file and open it."
|
||||
echo -e "\t-e,\t\t Activate ESR related preferences."
|
||||
echo -e
|
||||
echo 'Deprecated Arguments (they still work for now):'
|
||||
echo -e "\t-donotupdate,\t Use instead -d"
|
||||
echo -e "\t-update,\t Use instead -u"
|
||||
echo -e
|
||||
exit 1
|
||||
}
|
||||
|
||||
legacy_argument () {
|
||||
echo -e "${ORANGE}\nWarning: command line arguments have changed."
|
||||
echo -e "$1 has been deprecated and may not work in the future.\n"
|
||||
echo -e "Please view the new options using the -h argument.${NC}"
|
||||
}
|
||||
|
||||
#########################
|
||||
# File Handling #
|
||||
#########################
|
||||
|
||||
# Download files
|
||||
download_file () {
|
||||
declare -r url=$1
|
||||
declare -r tf=$(mktemp)
|
||||
local dlcmd=''
|
||||
|
||||
if [ $DOWNLOAD_METHOD = 'curl' ]; then
|
||||
dlcmd="curl -o $tf"
|
||||
else
|
||||
dlcmd="wget -O $tf"
|
||||
fi
|
||||
|
||||
$dlcmd "${url}" &>/dev/null && echo "$tf" || echo '' # return the temp-filename (or empty string on error)
|
||||
}
|
||||
|
||||
open_file () { #expects one argument: file_path
|
||||
if [ "$(uname)" == 'Darwin' ]; then
|
||||
open "$1"
|
||||
elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||
xdg-open "$1"
|
||||
else
|
||||
echo -e "${RED}Error: Sorry, opening files is not supported for your OS.${NC}"
|
||||
fi
|
||||
}
|
||||
|
||||
## Used to backup the current script, and download and execute the latest version of updater.sh
|
||||
update_script () {
|
||||
echo -e "This script will be backed up and the latest version of updater.sh will be executed.\n"
|
||||
mv updater.sh "updater.sh.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||
$DOWNLOAD_TO_FILE ${updater} && echo -e "\nThe latest updater script has been downloaded\n"
|
||||
readIniFile () { # expects one argument: absolute path of profiles.ini
|
||||
declare -r inifile="$1"
|
||||
declare -r tfile=$(mktemp)
|
||||
|
||||
# make new file executable
|
||||
chmod +x updater.sh
|
||||
if [ $(grep '^\[Profile' "$inifile" | wc -l) == "1" ]; then ### only 1 profile found
|
||||
grep '^\[Profile' -A 4 "$inifile" | grep -v '^\[Profile' > $tfile
|
||||
else
|
||||
grep -E -v '^\[General\]|^StartWithLastProfile=|^IsRelative=' "$inifile"
|
||||
echo ''
|
||||
read -p 'Select the profile number ( 0 for Profile0, 1 for Profile1, etc ) : ' -r
|
||||
echo -e "\n"
|
||||
if [[ $REPLY =~ ^(0|[1-9][0-9]*)$ ]]; then
|
||||
grep '^\[Profile'${REPLY} -A 4 "$inifile" | grep -v '^\[Profile'${REPLY} > $tfile
|
||||
if [[ "$?" != "0" ]]; then
|
||||
echo "Profile${REPLY} does not exist!" && exit 1
|
||||
fi
|
||||
else
|
||||
echo "Invalid selection!" && exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# execute new updater script
|
||||
./updater.sh -donotupdate
|
||||
declare -r profpath=$(grep '^Path=' $tfile)
|
||||
declare -r pathisrel=$(grep '^IsRelative=' $tfile)
|
||||
|
||||
# exit script
|
||||
rm "$tfile"
|
||||
|
||||
# update global variable
|
||||
if [[ ${pathisrel#*=} == "1" ]]; then
|
||||
PROFILE_PATH="$(dirname "$inifile")/${profpath#*=}"
|
||||
else
|
||||
PROFILE_PATH="${profpath#*=}"
|
||||
fi
|
||||
}
|
||||
|
||||
getProfilePath () {
|
||||
declare -r f1=~/Library/Application\ Support/Firefox/profiles.ini
|
||||
declare -r f2=~/.mozilla/firefox/profiles.ini
|
||||
|
||||
if [ "$PROFILE_PATH" = false ]; then
|
||||
PROFILE_PATH="$SCRIPT_DIR"
|
||||
elif [ "$PROFILE_PATH" = 'list' ]; then
|
||||
local ini=''
|
||||
if [[ -f "$f1" ]]; then
|
||||
ini="$f1"
|
||||
elif [[ -f "$f2" ]]; then
|
||||
ini="$f2"
|
||||
else
|
||||
echo -e "${RED}Error: Sorry, -l is not supported for your OS${NC}"
|
||||
exit 1
|
||||
fi
|
||||
readIniFile "$ini" # updates PROFILE_PATH or exits on error
|
||||
#else
|
||||
# PROFILE_PATH already set by user with -p
|
||||
fi
|
||||
}
|
||||
|
||||
#########################
|
||||
# Update updater.sh #
|
||||
#########################
|
||||
|
||||
# Returns the version number of a updater.sh file
|
||||
get_updater_version () {
|
||||
echo $(sed -n '5 s/.*[[:blank:]]\([[:digit:]]*\.[[:digit:]]*\)/\1/p' "$1")
|
||||
}
|
||||
|
||||
# Update updater.sh
|
||||
# Default: Check for update, if available, ask user if they want to execute it
|
||||
# Args:
|
||||
# -donotupdate: New version will not be looked for and update will not occur
|
||||
# -update: Check for update, if available, execute without asking
|
||||
update_updater () {
|
||||
if [ $UPDATE = 'no' ]; then
|
||||
return 0 # User signified not to check for updates
|
||||
fi
|
||||
|
||||
declare -r tmpfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/updater.sh')
|
||||
|
||||
if [[ $(get_updater_version "${SCRIPT_DIR}/updater.sh") < $(get_updater_version "${tmpfile}") ]]; then
|
||||
if [ $UPDATE = 'check' ]; then
|
||||
echo -e "There is a newer version of updater.sh available. ${RED}Update and execute Y/N?${NC}"
|
||||
read -p "" -n 1 -r
|
||||
echo -e "\n\n"
|
||||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||
return 0 # Update available, but user chooses not to update
|
||||
fi
|
||||
fi
|
||||
else
|
||||
return 0 # No update available
|
||||
fi
|
||||
mv "${tmpfile}" "${SCRIPT_DIR}/updater.sh"
|
||||
chmod u+x "${SCRIPT_DIR}/updater.sh"
|
||||
"${SCRIPT_DIR}/updater.sh" "$@" -d
|
||||
exit 1
|
||||
}
|
||||
|
||||
|
||||
main () {
|
||||
## create backup folder if it doesn't exist
|
||||
mkdir -p userjs_backups;
|
||||
#########################
|
||||
# Update user.js #
|
||||
#########################
|
||||
|
||||
echo -e "\nThis script should be run from your Firefox profile directory.\n"
|
||||
|
||||
echo -e "Updating the user.js for Firefox profile:\n$(pwd)\n"
|
||||
|
||||
if [ -e user.js ]; then
|
||||
echo "Your current user.js file for this profile will be backed up and the latest ghacks version from github will take its place."
|
||||
echo -e "\nIf currently using the ghacks user.js, please compare versions:"
|
||||
echo " Available online: $($DOWNLOAD_TO_STDOUT ${ghacksjs} | sed -n '4p')"
|
||||
echo " Currently using: $(sed -n '4p' user.js)"
|
||||
# Returns version number of a user.js file
|
||||
get_userjs_version () {
|
||||
if [ -e $1 ]; then
|
||||
echo "$(sed -n '4p' "$1")"
|
||||
else
|
||||
echo "A user.js file does not exist in this profile. If you continue, the latest ghacks version from github will be downloaded."
|
||||
echo "Not detected."
|
||||
fi
|
||||
|
||||
echo -e "\nIf a user-overrides.js file exists in this profile, it will be appended to the user.js.\n"
|
||||
|
||||
read -p "Continue Y/N? " -n 1 -r
|
||||
echo -e "\n\n"
|
||||
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
if [ -e user.js ]; then
|
||||
# backup current user.js
|
||||
bakfile="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||
mv user.js "${bakfile}" && echo "Your previous user.js file was backed up: ${bakfile}"
|
||||
fi
|
||||
|
||||
# download latest ghacks user.js
|
||||
echo "downloading latest ghacks user.js file"
|
||||
$DOWNLOAD_TO_FILE ${ghacksjs} && echo "ghacks user.js has been downloaded"
|
||||
|
||||
if [ -e user-overrides.js ]; then
|
||||
echo "user-overrides.js file found"
|
||||
cat user-overrides.js >> user.js && echo "user-overrides.js has been appended to user.js"
|
||||
fi
|
||||
else
|
||||
echo "Process aborted"
|
||||
fi
|
||||
|
||||
## change directory back to the original working directory
|
||||
cd "${currdir}"
|
||||
}
|
||||
|
||||
add_override () {
|
||||
input=$1
|
||||
if [ -f "$input" ]; then
|
||||
echo "" >> user.js
|
||||
cat "$input" >> user.js
|
||||
echo -e "Status: ${GREEN}Override file appended:${NC} ${input}"
|
||||
elif [ -d "$input" ]; then
|
||||
FSAVEIFS=$IFS
|
||||
IFS=$'\n\b' # Set IFS
|
||||
FILES="${input}"/*.js
|
||||
for f in $FILES
|
||||
do
|
||||
add_override "$f"
|
||||
done
|
||||
IFS=$SAVEIFS # restore $IFS
|
||||
else
|
||||
echo -e "${ORANGE}Warning: Could not find override file:${NC} ${input}"
|
||||
fi
|
||||
}
|
||||
|
||||
update_pref="$(echo $update_pref | tr '[A-Z]' '[a-z]')"
|
||||
if [ $update_pref = "-donotupdate" ]; then
|
||||
main
|
||||
else
|
||||
check_for_update
|
||||
if [ $update_available = "no" ]; then
|
||||
main
|
||||
else
|
||||
## there is an update available
|
||||
if [ $update_pref = "-update" ]; then
|
||||
## update without asking
|
||||
update_script
|
||||
else
|
||||
read -p "There is a newer version of updater.sh available. Download and execute? Y/N? " -n 1 -r
|
||||
echo -e "\n\n"
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
update_script
|
||||
else
|
||||
main
|
||||
remove_comments () { # expects 2 arguments: from-file and to-file
|
||||
sed -e 's/^[[:space:]]*\/\/.*$//' -e '/^\/\*/,/\*\//d' -e '/^[[:space:]]*$/d' -e 's/);[[:space:]]*\/\/.*/);/' "$1" > "$2"
|
||||
}
|
||||
|
||||
# Applies latest version of user.js and any custom overrides
|
||||
update_userjs () {
|
||||
declare -r newfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js')
|
||||
|
||||
echo 'Please observe the following information:'
|
||||
echo -e "\tFirefox profile: ${ORANGE}$(pwd)${NC}"
|
||||
echo -e "\tAvailable online: ${ORANGE}$(get_userjs_version $newfile)${NC}"
|
||||
echo -e "\tCurrently using: ${ORANGE}$(get_userjs_version user.js)\n${NC}\n"
|
||||
|
||||
if [ $CONFIRM = 'yes' ]; then
|
||||
echo -e "This script will update to the latest user.js file and append any custom configurations from user-overrides.js. ${RED}Continue Y/N? ${NC}"
|
||||
read -p "" -n 1 -r
|
||||
echo -e "\n"
|
||||
if [[ $REPLY =~ ^[Nn]$ ]]; then
|
||||
echo -e "${RED}Process aborted${NC}"
|
||||
rm $newfile
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Copy a version of user.js to diffs folder for later comparison
|
||||
if [ "$COMPARE" = true ]; then
|
||||
mkdir -p userjs_diffs
|
||||
cp user.js userjs_diffs/past_user.js &>/dev/null
|
||||
fi
|
||||
|
||||
# backup user.js
|
||||
mkdir -p userjs_backups
|
||||
local bakname="userjs_backups/user.js.backup.$(date +"%Y-%m-%d_%H%M")"
|
||||
if [ $BACKUP = 'single' ]; then
|
||||
bakname='userjs_backups/user.js.backup'
|
||||
fi
|
||||
cp user.js "$bakname" &>/dev/null
|
||||
|
||||
mv "${newfile}" user.js
|
||||
echo -e "Status: ${GREEN}user.js has been backed up and replaced with the latest version!${NC}"
|
||||
|
||||
if [ "$ESR" = true ]; then
|
||||
sed -e 's/\/\* \(ESR[0-9]\{2,\}\.x still uses all.*\)/\/\/ \1/' user.js > user.js.tmp && mv user.js.tmp user.js
|
||||
echo -e "Status: ${GREEN}ESR related preferences have been activated!${NC}"
|
||||
fi
|
||||
|
||||
# apply overrides
|
||||
if [ "$SKIPOVERRIDE" = false ]; then
|
||||
while IFS=',' read -ra FILE; do
|
||||
add_override "$FILE"
|
||||
done <<< "$OVERRIDE"
|
||||
fi
|
||||
|
||||
# create diff
|
||||
if [ "$COMPARE" = true ]; then
|
||||
pastuserjs='userjs_diffs/past_user.js'
|
||||
past_nocomments='userjs_diffs/past_userjs.txt'
|
||||
current_nocomments='userjs_diffs/current_userjs.txt'
|
||||
|
||||
remove_comments $pastuserjs $past_nocomments
|
||||
remove_comments user.js $current_nocomments
|
||||
|
||||
diffname="userjs_diffs/diff_$(date +"%Y-%m-%d_%H%M").txt"
|
||||
diff=$(diff -w -B -U 0 $past_nocomments $current_nocomments)
|
||||
if [ ! -z "$diff" ]; then
|
||||
echo "$diff" > "$diffname"
|
||||
echo -e "Status: ${GREEN}A diff file was created:${NC} ${PWD}/${diffname}"
|
||||
else
|
||||
echo -e "Warning: ${ORANGE}Your new user.js file appears to be identical. No diff file was created.${NC}"
|
||||
if [ $BACKUP = 'multiple' ]; then
|
||||
rm $bakname &>/dev/null
|
||||
fi
|
||||
fi
|
||||
rm $past_nocomments $current_nocomments $pastuserjs &>/dev/null
|
||||
fi
|
||||
|
||||
if [ "$VIEW" = true ]; then open_file "${PWD}/user.js"; fi
|
||||
}
|
||||
|
||||
#########################
|
||||
# Execute #
|
||||
#########################
|
||||
|
||||
if [ $# != 0 ]; then
|
||||
readonly legacy_lc=$(echo $1 | tr '[A-Z]' '[a-z]')
|
||||
# Display usage if first argument is -help or --help
|
||||
if [ $1 = '--help' ] || [ $1 = '-help' ]; then
|
||||
usage
|
||||
elif [ $legacy_lc = '-donotupdate' ]; then
|
||||
UPDATE='no'
|
||||
legacy_argument $1
|
||||
elif [ $legacy_lc = '-update' ]; then
|
||||
UPDATE='yes'
|
||||
legacy_argument $1
|
||||
else
|
||||
while getopts ":hp:ludsno:bcvre" opt; do
|
||||
case $opt in
|
||||
h)
|
||||
usage
|
||||
;;
|
||||
p)
|
||||
PROFILE_PATH=${OPTARG}
|
||||
;;
|
||||
l)
|
||||
PROFILE_PATH='list'
|
||||
;;
|
||||
u)
|
||||
UPDATE='yes'
|
||||
;;
|
||||
d)
|
||||
UPDATE='no'
|
||||
;;
|
||||
s)
|
||||
CONFIRM='no'
|
||||
;;
|
||||
n)
|
||||
SKIPOVERRIDE=true
|
||||
;;
|
||||
o)
|
||||
OVERRIDE=${OPTARG}
|
||||
;;
|
||||
b)
|
||||
BACKUP='single'
|
||||
;;
|
||||
c)
|
||||
COMPARE=true
|
||||
;;
|
||||
v)
|
||||
VIEW=true
|
||||
;;
|
||||
e)
|
||||
ESR=true
|
||||
;;
|
||||
r)
|
||||
tfile=$(download_file 'https://raw.githubusercontent.com/ghacksuserjs/ghacks-user.js/master/user.js')
|
||||
mv $tfile "${tfile}.js"
|
||||
echo -e "${ORANGE}Warning: user.js was saved to temporary file ${tfile}.js${NC}"
|
||||
open_file "${tfile}.js"
|
||||
exit 1
|
||||
;;
|
||||
\?)
|
||||
echo -e "${RED}\n Error! Invalid option: -$OPTARG${NC}" >&2
|
||||
usage
|
||||
;;
|
||||
:)
|
||||
echo -e "${RED}Error! Option -$OPTARG requires an argument.${NC}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
show_banner
|
||||
update_updater $@
|
||||
|
||||
getProfilePath # updates PROFILE_PATH or exits on error
|
||||
cd "$PROFILE_PATH" && update_userjs
|
||||
|
||||
cd "$CURRDIR"
|
||||
|
Reference in New Issue
Block a user