151 lines
4.1 KiB
Bash
Executable File
151 lines
4.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# TA-ProxMenu preloader
|
|
|
|
DEFAULTS_REPOSITORY='/opt/idssys/defaults'
|
|
DEFAULTS_CACHE_DIR='/var/cache/ta-proxmenu'
|
|
DEFAULTS_CHECK_FILE="${DEFAULTS_CACHE_DIR}/defaults-last-check"
|
|
DEFAULTS_CHECK_SECONDS=14400
|
|
|
|
AUTO_UPDATE_DEFAULTS() {
|
|
local checked_at=0
|
|
local local_commit
|
|
local now
|
|
local remote_commit
|
|
|
|
mkdir -p "$DEFAULTS_CACHE_DIR" 2>/dev/null || true
|
|
now="$(date +%s)"
|
|
[[ -r "$DEFAULTS_CHECK_FILE" ]] && read -r checked_at <"$DEFAULTS_CHECK_FILE"
|
|
|
|
if [[ "$checked_at" =~ ^[0-9]+$ ]] &&
|
|
(( now - checked_at < DEFAULTS_CHECK_SECONDS )); then
|
|
return
|
|
fi
|
|
|
|
exec 9>"${DEFAULTS_CACHE_DIR}/defaults-update.lock" || return
|
|
flock -n 9 || return
|
|
|
|
# Another process may have completed the update while this one waited.
|
|
checked_at=0
|
|
[[ -r "$DEFAULTS_CHECK_FILE" ]] && read -r checked_at <"$DEFAULTS_CHECK_FILE"
|
|
if [[ "$checked_at" =~ ^[0-9]+$ ]] &&
|
|
(( now - checked_at < DEFAULTS_CHECK_SECONDS )); then
|
|
return
|
|
fi
|
|
|
|
if [[ ! -d "${DEFAULTS_REPOSITORY}/.git" ]]; then
|
|
echo "iDSSYS Defaults is missing; restoring it from origin..."
|
|
mkdir -p /opt/idssys
|
|
if ! timeout 60 git clone \
|
|
https://git.scity.us/voltron/iDS-Defaults.git "$DEFAULTS_REPOSITORY"; then
|
|
echo "WARNING: Unable to restore iDSSYS Defaults." >&2
|
|
return
|
|
fi
|
|
else
|
|
if ! timeout 20 git -C "$DEFAULTS_REPOSITORY" fetch origin master \
|
|
>/dev/null 2>&1; then
|
|
echo "WARNING: Unable to check iDSSYS Defaults; using the installed copy." >&2
|
|
return
|
|
fi
|
|
|
|
local_commit="$(git -C "$DEFAULTS_REPOSITORY" rev-parse HEAD)"
|
|
remote_commit="$(git -C "$DEFAULTS_REPOSITORY" rev-parse origin/master)"
|
|
if [[ "$local_commit" != "$remote_commit" ]]; then
|
|
echo "Updating required iDSSYS Defaults..."
|
|
if ! git -C "$DEFAULTS_REPOSITORY" reset --hard origin/master \
|
|
>/dev/null 2>&1; then
|
|
echo "WARNING: Unable to update iDSSYS Defaults; using the installed copy." >&2
|
|
return
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
date +%s >"$DEFAULTS_CHECK_FILE"
|
|
}
|
|
|
|
AUTO_UPDATE_DEFAULTS
|
|
|
|
[ "${2:-}" != "q" ] && source /opt/idssys/defaults/colors.inc
|
|
source /opt/idssys/defaults/default.inc
|
|
source /opt/idssys/ta-proxmenu/defaults.inc
|
|
|
|
UPDATE_REPOSITORY() {
|
|
local repository="$1"
|
|
local branch="$2"
|
|
local label="$3"
|
|
local local_commit
|
|
local remote_commit
|
|
|
|
cd "$repository" || return 1
|
|
local_commit="$(git rev-parse HEAD 2>/dev/null)" || return 1
|
|
remote_commit="$(git ls-remote origin "refs/heads/${branch}" | cut -f1)"
|
|
|
|
if [ -z "$remote_commit" ]; then
|
|
echo -e "${idsCL[Red]}Could not find branch '${branch}' for ${label}${idsCL[Default]}"
|
|
return 1
|
|
fi
|
|
|
|
if [ "$local_commit" = "$remote_commit" ]; then
|
|
echo -e "${idsCL[Green]}${label} is current (${branch})${idsCL[Default]}"
|
|
return 0
|
|
fi
|
|
|
|
echo -en "${idsCL[LightCyan]}Updating ${label} (${branch})...${idsCL[Default]}"
|
|
if git fetch origin "$branch" >/dev/null 2>&1 &&
|
|
git reset --hard "origin/${branch}" >/dev/null 2>&1; then
|
|
echo -e " ${idsCL[Green]}Done${idsCL[Default]}"
|
|
return 0
|
|
fi
|
|
|
|
echo -e " ${idsCL[Red]}Failed${idsCL[Default]}"
|
|
return 1
|
|
}
|
|
|
|
INSTALL_UPDATES() {
|
|
local current_branch
|
|
local update_failed=0
|
|
|
|
echo -e "${idsCL[LightCyan]}Checking for updates...${idsCL[Default]}"
|
|
if ! curl --fail --silent --show-error --head \
|
|
--connect-timeout 3 --max-time 10 https://git.scity.us >/dev/null; then
|
|
echo -e "${idsCL[Red]}Could not connect to git.scity.us${idsCL[Default]}"
|
|
return 1
|
|
fi
|
|
|
|
UPDATE_REPOSITORY /opt/idssys/defaults master "iDSSYS Defaults" ||
|
|
update_failed=1
|
|
|
|
current_branch="$(git -C /opt/idssys/ta-proxmenu branch --show-current)"
|
|
if [ -z "$current_branch" ]; then
|
|
echo -e "${idsCL[Red]}TA-ProxMenu is in a detached HEAD state; update skipped${idsCL[Default]}"
|
|
update_failed=1
|
|
else
|
|
UPDATE_REPOSITORY /opt/idssys/ta-proxmenu "$current_branch" "TA-ProxMenu" ||
|
|
update_failed=1
|
|
fi
|
|
|
|
rm -f /var/cache/ta-proxmenu/update-status 2>/dev/null || true
|
|
|
|
if (( update_failed == 0 )); then
|
|
source /opt/idssys/ta-proxmenu/defaults.inc
|
|
echo -e "\n${idsCL[Green]}Update check complete. Installed version: ${VERS}${idsCL[Default]}"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
case "${1:-}" in
|
|
update|u)
|
|
INSTALL_UPDATES
|
|
exit $?
|
|
;;
|
|
tapm)
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
/opt/idssys/ta-proxmenu/proxmenu-scripts.sh \
|
|
"${1:-}" "${2:-}" "${3:-}" "${4:-}"
|
|
|
|
exit $?
|