Last active
May 14, 2022 14:52
-
-
Save ffflorian/bb35c4defedcc72052e5d2a327479a81 to your computer and use it in GitHub Desktop.
Update (or install) the latest Bitwarden
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# Update (or install) the latest Bitwarden | |
# Optimized for Debian/Ubuntu + GNOME | |
# ffflorian 2019 | |
set -e | |
SCRIPT_NAME="${0##*/}" | |
INSTALL_DIR="/opt/Bitwarden" | |
EXEC_BIN="${INSTALL_DIR}/bitwarden" | |
TEMP_DIR="$(mktemp -d)" | |
DEB_FILE="${TEMP_DIR}/bitwarden.deb" | |
CONFIG_FILE="${HOME}/.config/Bitwarden/data.json" | |
RELEASE_URL="https://api.github.com/repos/bitwarden/desktop/releases/latest" | |
USE_CURL="yes" | |
FORCE="no" | |
_cleanup() { | |
rm -rf "${TEMP_DIR}" | |
} | |
trap _cleanup EXIT | |
_compare_version() { | |
printf "%03d%03d%03d%03d" $(echo "${1}" | tr '.' ' ') | |
} | |
get_latest_release() { | |
if [ "${USE_CURL}" = "yes" ]; then | |
curl -sL "${RELEASE_URL}" | grep '"tag_name":' | sed -E 's/.*"v?([^"]+)".*/\1/' | |
else | |
wget -qO- "${RELEASE_URL}" | grep '"tag_name":' | sed -E 's/.*"v?([^"]+)".*/\1/' | |
fi | |
} | |
_print_usage() { | |
cat <<EOF | |
Usage: ${SCRIPT_NAME} [option] | |
Options: | |
--force (-f) Reinstall Bitwarden if it is already installed. | |
Commands: | |
--help (-h) Display this help message | |
EOF | |
} | |
while : | |
do | |
case "${1}" in | |
-f|--force ) | |
FORCE="force" | |
shift | |
;; | |
-h|--help ) | |
_print_usage | |
exit 0 | |
;; | |
* ) | |
break | |
;; | |
esac | |
done | |
if [ -d "${INSTALL_DIR}" ]; then | |
if [ -r "${EXEC_BIN}" ] && [ -r "${CONFIG_FILE}" ]; then | |
CURRENT_VERSION="$(sed -n 's/.*"installedVersion": "\(.*\)",/\1/p' "${CONFIG_FILE}")" | |
else | |
read -r -p "The current Bitwarden installation seems to be broken. Would you like to reinstall the latest version? [y/N] " RESPONSE | |
case "${RESPONSE}" in | |
[nN][oO]|[nN]|"" ) exit 0 ;; | |
esac | |
FORCE="force" | |
fi | |
else | |
read -r -p "Bitwarden is not installed yet. Would you like to install it? [y/N] " RESPONSE | |
case "${RESPONSE}" in | |
[nN][oO]|[nN]|"" ) exit 0 ;; | |
esac | |
FORCE="force" | |
fi | |
if ! command -v "curl" > /dev/null; then | |
USE_CURL="no" | |
fi | |
LATEST_VERSION="$(get_latest_release)" | |
if [ "${FORCE}" != "force" ]; then | |
if [ "$(_compare_version "${LATEST_VERSION}")" -le "$(_compare_version "${CURRENT_VERSION}")" ]; then | |
echo "No update needed, ${CURRENT_VERSION} is the latest Bitwarden version available." | |
echo "Run this script with --force to reinstall this Bitwarden version." | |
exit 0 | |
fi | |
fi | |
DOWNLOAD_URL="https://github.com/bitwarden/desktop/releases/download/v${LATEST_VERSION}/Bitwarden-${LATEST_VERSION}-amd64.deb" | |
echo "Downloading Bitwarden ${LATEST_VERSION} from ${DOWNLOAD_URL} ... " | |
if [ "${USE_CURL}" = "yes" ]; then | |
curl -o "${DEB_FILE}" -L "${DOWNLOAD_URL}" | |
else | |
wget -O "${DEB_FILE}" "${DOWNLOAD_URL}" | |
fi | |
printf "OK\\n\\n" | |
if [ ! -r "${DEB_FILE}" ]; then | |
echo "Error: could not find downloaded file \"${DEB_FILE}\"". | |
exit 1 | |
fi | |
echo "Installing Bitwarden ... " | |
sudo dpkg -i "${DEB_FILE}" | |
echo "All done!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment