i2p-browser 5.61 KB
Newer Older
Kill Your TV's avatar
Kill Your TV committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/bin/sh

set -e

# This isn't very useful without I2P...
grep -qw "i2p" /proc/cmdline || exit 0

CMD=$(basename ${0})
LOCK=/var/lock/${CMD}

. gettext.sh
TEXTDOMAIN="tails"
export TEXTDOMAIN

15 16
. /usr/local/lib/tails-shell-library/i2p.sh

Kill Your TV's avatar
Kill Your TV committed
17 18 19 20
CONF_DIR=/var/lib/i2p-browser
COW=${CONF_DIR}/cow
CHROOT=${CONF_DIR}/chroot
BROWSER_USER=i2pbrowser
21
TBB_PREFS="/etc/tor-browser/profile/preferences"
Kill Your TV's avatar
Kill Your TV committed
22 23
START_PAGE="http://127.0.0.1:7657"

24 25 26
# Import the TBB_INSTALL, TBB_EXT and TBB_PROFILE variables, and
# exec_firefox(), configure_xulrunner_app_locale() and
# guess_best_tor_browser_locale()
27 28
. /usr/local/lib/tails-shell-library/tor-browser.sh

29 30
. /usr/local/lib/tails-shell-library/chroot-browser.sh

31 32
NOSCRIPT="${TBB_EXT}/{73a6fe31-595d-460b-a920-fcc0f8843232}.xpi"
TORBUTTON="${TBB_EXT}/torbutton@torproject.org"
Kill Your TV's avatar
Kill Your TV committed
33
NAME="`gettext \"I2P Browser\"`"
34

Kill Your TV's avatar
Kill Your TV committed
35 36 37 38 39
if [ -e /var/lib/gdm3/tails.camouflage ]; then
    CAMOUFLAGE=yes
fi

cleanup () {
40
    try_cleanup_browser_chroot ${CHROOT} ${COW} ${BROWSER_USER}
Kill Your TV's avatar
Kill Your TV committed
41 42
}

43 44 45 46 47 48 49 50 51 52
error () {
    local cli_text="${CMD}: `gettext \"error:\"` ${@}"
    local dialog_text="<b><big>`gettext \"Error\"`</big></b>

${@}"
    echo "${cli_text}" >&2
    sudo -u ${SUDO_USER} zenity --error --title "" --text "${dialog_text}"
    exit 1
}

Kill Your TV's avatar
Kill Your TV committed
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
verify_start () {
    # Make sure the user really wants to start the browser in case the router console isn't available
    local dialog_msg="<b><big>`gettext \"Do you still want to launch I2P Browser?\"`</big></b>

`gettext \"The I2P router console is not ready.\"`"
    local launch="`gettext \"_Launch\"`"
    local exit="`gettext \"_Exit\"`"
    # Since zenity can't set the default button to cancel, we switch the
    # labels and interpret the return value as its negation.
    if sudo -u ${SUDO_USER} zenity --question --title "" --ok-label "${exit}" \
       --cancel-label "${launch}" --text "${dialog_msg}"; then
        exit 0
    fi
}

show_start_notification () {
    local title="`gettext \"Starting the I2P Browser...\"`"
    local body="`gettext \"This may take a while, so please be patient.\"`"
    tails-notify-user "${title}" "${body}" 10000
}

configure_chroot () {
    echo "* Configuring chroot"

    # Prevent sudo from complaining about failing to resolve the 'amnesia' host
    echo "127.0.0.1 localhost amnesia" > ${CHROOT}/etc/hosts

80
    # Create a fresh Tor Browser profile for the i2pbrowser user
81 82
    BROWSER_CONF="${CHROOT}/home/${BROWSER_USER}/.tor-browser"
    BROWSER_PROFILE="${BROWSER_CONF}/profile.default"
83 84
    BROWSER_EXT="${BROWSER_PROFILE}/extensions"
    mkdir -p "${BROWSER_EXT}"
Kill Your TV's avatar
Kill Your TV committed
85
    ln -s "${NOSCRIPT}" "${BROWSER_EXT}"
86
    ln -s "${TORBUTTON}" "${BROWSER_EXT}"
Kill Your TV's avatar
Kill Your TV committed
87
    for LANGPACK in $(ls ${TBB_PROFILE}/extensions/langpack-*.xpi); do
Kill Your TV's avatar
Kill Your TV committed
88 89
        ln -s "${LANGPACK}" "${BROWSER_EXT}"
    done
90

91 92 93 94 95
    BROWSER_PREF_DIR="${BROWSER_PROFILE}/preferences"
    BROWSER_PREFS="${BROWSER_PREF_DIR}/prefs.js"
    mkdir -p "${BROWSER_PREF_DIR}"

    # Selectively copy the TBB prefs we want
96 97
    sed '/\(security\|update\|download\|spell\|noscript\|torbrowser\|torbutton\)/!d' $TBB_PREFS/0000tails.js > \
                    ${BROWSER_PREF_DIR}/0000tails.js
Kill Your TV's avatar
Kill Your TV committed
98
    sed '/\(capability\|noscript\|torbutton\)/!d' ${TBB_PREFS}/extension-overrides.js > \
99 100 101
                    ${BROWSER_PREF_DIR}/extension-overrides.js

    # Localization
102 103
    BEST_LOCALE="$(guess_best_tor_browser_locale)"
    configure_xulrunner_app_locale "${BROWSER_PROFILE}" "${BEST_LOCALE}"
104

105
    # Set the name (e.g. window title) of the browser
106
    set_chroot_torbutton_browser_name "${CHROOT}" "${NAME}" "${BEST_LOCALE}"
107 108 109 110 111

    # Set start page to the router console
    echo 'user_pref("browser.startup.homepage", "'${START_PAGE}'");' >> \
        ${BROWSER_PREFS}

Kill Your TV's avatar
Kill Your TV committed
112
    # add the I2P proxy to all protocols
113 114
    cp /usr/share/tails/i2p-browser/i2p-browser.js "${BROWSER_PREF_DIR}"

115
    # Hide options in the I2P Browser.
Kill Your TV's avatar
Kill Your TV committed
116
    # It would be good to implement the ability to persist the browser profile in the
117 118 119
    # future. At that point, the Bookmark functionality could be restored.
    BROWSER_CHROME="${BROWSER_PROFILE}/chrome/userChrome.css"
    mkdir -p "$(dirname "${BROWSER_CHROME}")"
120
    cp /usr/share/tails/i2p-browser/userChrome.css ${BROWSER_CHROME}
121
    rm -rf ${BROWSER_EXT}/branding@amnesia.boum.org
Kill Your TV's avatar
Kill Your TV committed
122

123 124 125 126 127
    # Remove all bookmarks
    rm -f "${CHROOT}/${TBB_PROFILE}/bookmarks.html"
    rm -f ${BROWSER_PROFILE}/bookmarks.html
    rm -f ${BROWSER_PROFILE}/places.sqlite

128
   chown -R ${BROWSER_USER}:${BROWSER_USER} "${BROWSER_CONF}"
129

Kill Your TV's avatar
Kill Your TV committed
130 131
    # Change the theme when not using Windows camouflage
    if [ -z "${CAMOUFLAGE}" ]; then
132
        cat /usr/share/tails/i2p-browser/i2p-browser-theme.js >> "${BROWSER_PREFS}"
Kill Your TV's avatar
Kill Your TV committed
133 134 135
    else
        # The camouflage activation script requires a dbus server for
        # properly configuring GNOME, so we start one in the chroot
136
        chroot ${CHROOT} sudo -H -u ${BROWSER_USER} sh -c 'eval `dbus-launch --auto-syntax`; tails-activate-win8-theme' || :
Kill Your TV's avatar
Kill Your TV committed
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
    fi

}

show_shutdown_notification () {
    local title="`gettext \"Shutting down the I2P Browser...\"`"
    local body="`gettext \"This may take a while, and you may not restart the I2P Browser until it is properly shut down.\"`"
    tails-notify-user "${title}" "${body}" 10000
}

# Prevent multiple instances of the script.
exec 9>${LOCK}
if ! flock -x -n 9; then
    error "`gettext \"Another I2P Browser is currently running, or being cleaned up. Please retry in a while.\"`"
fi

153
if ! i2p_router_console_is_ready; then
Kill Your TV's avatar
Kill Your TV committed
154 155 156
    verify_start
fi
show_start_notification
157 158 159
echo "* Setting up chroot"
setup_browser_chroot ${CHROOT} ${COW} || \
    error "`gettext \"Failed to setup chroot.\"`"
Kill Your TV's avatar
Kill Your TV committed
160
configure_chroot
161 162
echo "* Starting I2P Browser"
run_chroot_browser ${CHROOT} ${BROWSER_USER} ${SUDO_USER}
Kill Your TV's avatar
Kill Your TV committed
163 164 165
show_shutdown_notification

exit 0