#!/usr/bin/env bash ######################################################### # Update Authentic Theme to the latest from GitHub repo # ######################################################### # Get parent dir based on script's location DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(echo "$DIR" | sed 's/\/authentic-theme.*//g')" PROD=${DIR##*/} GIT="git" CURL="curl" CURLTIMEOUT=5 GHAPIURL="https://api.github.com" REPO="authentic-theme/authentic-theme" PARAMS="$*" if [[ "$1" == "-h" || "$1" == "-help" || "$1" == "--help" ]]; then echo -e "\e[0m\e[49;0;33;82mAuthentic Theme\e[0m update script - updates theme to the latest development or stable (release version)" echo "Usage: ./$(basename "$0") { [-force] | [-release] | [-release:number] }" exit 0 fi # Ask user to confirm update operation unless force install requested if [[ "$PARAMS" != *"-force"* ]]; then read -p "Would you like to update Authentic Theme for "${PROD^}"? [y/N] " -n 1 -r fi echo if [[ "$PARAMS" != *"-force"* ]] && [[ ! $REPLY =~ ^[Yy]$ ]]; then echo -e "\e[49;1;35;82mOperation aborted.\e[0m" else # Require privileged user to run the script if [[ $EUID -ne 0 ]]; then echo -e "\e[49;0;31;82mError: This command has to be run under the root user.\e[0m" else if ! type ${GIT} >/dev/null 2>&1; then # Use `PATH` from Webmin `config` file if [[ -f "/etc/webmin/config" ]]; then WMCONF="/etc/webmin/config" else WMCONF=$(find /* -maxdepth 6 -name miniserv.conf 2>/dev/null | grep "${PROD}" | head -n 1) WMCONF="${WMCONF/miniserv.conf/config}" fi # Export `PATH` using Webmin `config` file directive if [[ "${WMCONF}" ]]; then WMCONFPATH=$(grep -Po '(?<=^path=).*$' "${WMCONF}") if [[ "${WMCONFPATH}" ]]; then export PATH="${PATH}:${WMCONFPATH}" fi fi fi # Clear cache if present if [ -d "$DIR/.~authentic-theme" ]; then rm -rf "$DIR/.~authentic-theme" fi # Require `git` command availability if type ${GIT} >/dev/null 2>&1; then # Try to download latest version of the update script for Webmin/Usermin if type ${CURL} >/dev/null 2>&1; then GITAPI="$GHAPIURL/repos/webmin/webmin/contents" UPDATE="update-from-repo.sh" # Get latest update script ${CURL} -s -o "$DIR"/${UPDATE} -H "Accept:application/vnd.github.v3.raw" ${GITAPI}/${UPDATE} --connect-timeout $CURLTIMEOUT if [ $? -eq 0 ]; then chmod +x "$DIR"/${UPDATE} fi else echo -e "\e[49;0;33;82mError: Command \`curl\` is not installed or not in the \`PATH\`.\e[0m" exit fi # Pull latest changes if [[ "$PARAMS" == *"-release"* ]]; then if [[ "$PARAMS" == *":"* ]] && [[ "$PARAMS" != *"latest"* ]]; then RRELEASE=${1##*:} PRRELEASE="--branch ${RRELEASE} --quiet" PRRELEASETAG=${1##*:} else if type ${CURL} >/dev/null 2>&1; then PULL_URL="$GHAPIURL/repos/$REPO/releases/latest" FRS=$($CURL -s $PULL_URL --connect-timeout $CURLTIMEOUT) if [[ $FRS == *"Moved Permanently"* ]]; then PULL_URL=$(echo $FRS | perl -n -e 'm{\"url\":\s*\"(https://.*?)$\"};print $1;') if [ -z "${PULL_URL}" ]; then echo -e "\e[49;0;33;82mError: Authentic Theme repo has been moved permanently, however, a new URL cannot be parsed.\e[0m" exit fi VERSION=$($CURL -s $PULL_URL --connect-timeout $CURLTIMEOUT | grep tag_name | head -n 1) else VERSION=$(echo "$FRS" | grep tag_name | head -n 1) fi [[ $VERSION =~ [0-9]+\.[0-9]+|[0-9]+\.[0-9]+\.[0-9]+ ]] PRRELEASE="--branch ${BASH_REMATCH[0]} --quiet" PRRELEASETAG=${BASH_REMATCH[0]} else echo -e "\e[49;0;33;82mError: Command \`curl\` is not installed or not in the \`PATH\`.\e[0m" exit fi fi echo -e "\e[49;1;34;182mPulling in latest release of\e[0m \e[49;1;37;182mAuthentic Theme\e[0m $PRRELEASETAG (https://github.com/$REPO)..." RS="$(${GIT} clone --depth 1 $PRRELEASE https://github.com/$REPO.git "$DIR/.~authentic-theme" 2>&1)" if [[ "$RS" == *"ould not find remote branch"* ]]; then ERROR="Release ${RRELEASE} doesn't exist. " fi else echo -e "\e[49;1;34;182mPulling in latest changes for\e[0m \e[49;1;37;182mAuthentic Theme\e[0m (https://github.com/$REPO)..." ${GIT} clone --depth 1 --quiet https://github.com/$REPO.git "$DIR/.~authentic-theme" fi # Check version compatibility if [ -z "${WEBMIN_CONFIG}" ]; then DVER=$(grep -Po '(?<=^depends=).*$' "$DIR/.~authentic-theme/theme.info" 2>&1) TVER=$(grep -Po '(?<=^version=).*$' "$DIR/.~authentic-theme/theme.info" 2>&1) GRPERR=$? PVER=$(head -n 1 "$DIR"/version) RVER=$(echo "$DVER" | cut -d ' ' -f 1) if [ $PROD == "usermin" ]; then if [ ${#TVER} -ge "8" ]; then RVER=$(echo "$DVER" | cut -d ' ' -f 2) else RVER=0 fi fi # Check if latest Git dev version of Webmin/Usermin installed LATESTDEV=$(find "$DIR/version" -mmin -60) if [ ! -z $LATESTDEV ]; then RVER=0 fi # Generate a warning if latest, required patches from Git are not installed if [ $GRPERR -eq 0 ]; then if [[ $RVER > $PVER ]]; then echo -e " \e[47;1;31;82mWarning!\e[0m Installing this version of \e[49;1;37;182mAuthentic Theme\e[0m \e[49;32m"${TVER^}"\e[0m requires latest and/or possibly unreleased version of \e[49;1;37;182m"${PROD^}"\e[0m to work properly. Your current version of \e[49;1;37;182m"${PROD^}"\e[0m is \e[49;33m"${PVER^}"\e[0m. There might be incompatible changes, that could stop the theme from working as designed. It is recommended to upgrade \e[49;1;37;182m"${PROD^}"\e[0m to the latest development version, by running first \e[3m\`update-from-repo.sh\`\e[0m script from \e[3m\`"$DIR"\`\e[0m directory. This is strongly \e[3mnot advised\e[0m for any production system!" if [[ "$PARAMS" != *"-force"* ]]; then read -p "Do you want to continue to force install the theme anyway? [y/N] " -n 1 -r fi echo if [[ "$PARAMS" == *"-force"* ]] || [[ ! $REPLY =~ ^[Yy]$ ]]; then rm -rf "$DIR/.~authentic-theme" if [[ "$PARAMS" == *"-force"* ]]; then echo -e "\e[49;1;35;82mOperation aborted. Can not update to incompatible version in force mode.\e[0m" else echo -e "\e[49;1;35;82mOperation aborted.\e[0m" fi exit fi fi fi fi # Checking for possible errors if [ $? -eq 0 ] && [ -f "$DIR/.~authentic-theme/theme.info" ]; then # Post successful commands cp -P "$DIR/authentic-theme/manifest"-* "$DIR/.~authentic-theme/" rm -rf "$DIR/authentic-theme"/* mv "$DIR/.~authentic-theme"/* "$DIR/authentic-theme/" rm -rf "$DIR/.~authentic-theme" # Local clear rm -f "$DIR/authentic-theme/README.md" find "$DIR/authentic-theme/" -name "*.src*" -delete TVER=$(grep -Po '(?<=^version=).*$' "$DIR/authentic-theme/theme.info" 2>&1) if [ $? -eq 0 ]; then echo -e "\e[49;32mUpdating to Authentic Theme $TVER, done.\e[0m" else echo -e "\e[49;32mUpdating to the latest Authentic Theme, done.\e[0m" fi # Restart Webmin/Usermin in case it's running if [ "$2" != "-no-restart" ]; then if ps aux | grep -v grep | grep "$PROD"/miniserv.pl >/dev/null; then echo -e "\e[49;3;37;182mRestarting "${PROD^}"..\e[0m" service "$PROD" restart >/dev/null 2>&1 fi fi else # Post fail commands rm -rf "$DIR/.~authentic-theme" echo -e "\e[49;0;31;82m${ERROR}Updating Authentic Theme, failed.\e[0m" fi else echo -e "\e[49;0;33;82mError: Command \`git\` is not installed or not in the \`PATH\`.\e[0m" fi fi fi
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
extensions | Folder | 0755 |
|
|
help | Folder | 0755 |
|
|
images | Folder | 0755 |
|
|
lang | Folder | 0755 |
|
|
modules | Folder | 0755 |
|
|
unauthenticated | Folder | 0755 |
|
|
401.cgi | File | 342 B | 0755 |
|
403.cgi | File | 342 B | 0755 |
|
404.cgi | File | 342 B | 0755 |
|
CHANGELOG.md | File | 77.62 KB | 0644 |
|
FUNDING.yml | File | 102 B | 0644 |
|
LICENSE | File | 1.04 KB | 0644 |
|
THEME.pgp | File | 3.04 KB | 0644 |
|
authentic-funcs.pl | File | 28.56 KB | 0644 |
|
authentic-init.pl | File | 64.46 KB | 0644 |
|
authentic-lib.pl | File | 99.71 KB | 0644 |
|
authentic.pl | File | 52.32 KB | 0644 |
|
config | File | 139 B | 0644 |
|
config.cgi | File | 6.52 KB | 0755 |
|
config_save.cgi | File | 2.14 KB | 0755 |
|
index.cgi | File | 309 B | 0755 |
|
File | 0 B | 0 |
|
|
File | 0 B | 0 |
|
|
manifest-webmin.json | File | 986 B | 0644 |
|
manifest.template | File | 920 B | 0644 |
|
mconfig.cgi | File | 6.57 KB | 0755 |
|
mconfig_save.cgi | File | 1.68 KB | 0755 |
|
navigation-lib.pl | File | 54.64 KB | 0644 |
|
pam_login.cgi | File | 6.71 KB | 0755 |
|
password_form.cgi | File | 4.07 KB | 0755 |
|
postinstall-usermin.pl | File | 264 B | 0755 |
|
postinstall.pl | File | 645 B | 0755 |
|
service-worker.js | File | 141 B | 0644 |
|
session_login.cgi | File | 8.55 KB | 0755 |
|
settings-backgrounds.cgi | File | 3.61 KB | 0755 |
|
settings-backgrounds_save.cgi | File | 1.16 KB | 0755 |
|
settings-editor_favorites_read.cgi | File | 897 B | 0755 |
|
settings-editor_favorites_write.cgi | File | 574 B | 0755 |
|
settings-editor_read.cgi | File | 2.4 KB | 0755 |
|
settings-editor_write.cgi | File | 973 B | 0755 |
|
settings-favorites_save.cgi | File | 632 B | 0755 |
|
settings-lib.pl | File | 651 B | 0644 |
|
settings-logos.cgi | File | 4.61 KB | 0755 |
|
settings-logos_save.cgi | File | 1.75 KB | 0755 |
|
stats.cgi | File | 8.38 KB | 0755 |
|
sysinfo.cgi | File | 6.4 KB | 0755 |
|
tconfig-lib.pl | File | 33.41 KB | 0644 |
|
tconfig.cgi | File | 6.1 KB | 0755 |
|
theme-update.sh | File | 8.08 KB | 0755 |
|
theme.info | File | 337 B | 0644 |
|
theme.info.no | File | 24 B | 0644 |
|
uconfig.cgi | File | 6.27 KB | 0755 |
|
uconfig_save.cgi | File | 1.99 KB | 0755 |
|
uninstall-usermin.pl | File | 170 B | 0755 |
|
uninstall.pl | File | 346 B | 0755 |
|
xhr-lib.pl | File | 10.22 KB | 0644 |
|
xhr.cgi | File | 355 B | 0755 |
|