#!/bin/bash # Copyright: 2023 Virtuozzo International GmbH # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. VERBOSE=0; inherit default exceptor ; inherit os envinfo ; inherit extendperm; VERSION="1"; DEFAULT_ACTION="Usage"; DESCRIPTION="Module for import and export data and configs"; DOWNLOADS="/var/cache/unpack/"; DESTINATION="/"; CURL_OPTIONS=" -L -kfsS " function doUsage() { showUsageMessage; } $PROGRAM 'tar'; function onModLoadCallback(){ local temp=`getopt -o a:,d: -l archive:,destination: -- "$@" 2>>"$JEM_CALLS_LOG"` [[ $? != 0 ]] && die -q "Terminating..."; eval set -- "$temp" while true ; do case "${1}" in -a|--archive) ARCHIVE_URL="$2"; shift 2; ;; -d|--destination) DESTINATION="$2"; shift 2; ;; --) shift; break; ;; esac; done; [ -z "$ARCHIVE_URL" ] && { writeJSONResponseErr "result=>4099" "message=>Missing param" ; return 99; } [ -z "$DESTINATION" ] && { writeJSONResponseErr "result=>4099" "message=>Missing param" ; return 99; } return 0 } function doArchive() { [ -z "$ARCHIVE_URL" ] && { writeJSONResponseErr "result=>4050" "message=>URL is not valid!" ; return 1; } [ ! -d "$DOWNLOADS" ] && { mkdir -p "$DOWNLOADS"; } shopt -s dotglob; rm -Rf "$DOWNLOADS"/*; shopt -u dotglob; if $GREP -qE "^file:" <<< ${ARCHIVE_URL} ; then #local file package_name=$($SED 's/file:\/\///' <<< ${ARCHIVE_URL}); else cd $DOWNLOADS $CURL ${CURL_OPTIONS} -O ${ARCHIVE_URL} >> $ACTIONS_LOG 2>&1; [ $? -gt 0 ] && { cd $DOWNLOADS http_url=$($SED 's/^https/http/' <<< ${ARCHIVE_URL}) $CURL ${CURL_OPTIONS} -O ${http_url} >> $ACTIONS_LOG 2>&1; [ $? -gt 0 ] && { writeJSONResponseErr "result=>4078" "message=>Error loading file from URL" ; die -q; } }; cd / package_name="$DOWNLOADS/"`ls $DOWNLOADS`; fi ARC_UTILITY="";ARCH_OPT="";ARCH_DEST=""; if [[ ${package_url} =~ .zip$ ]] || [[ ${package_name} =~ .zip$ ]] then ARC_UTILITY="$UNZIP" ; ARCH_OPT=" -o "; ARCH_DEST_OPT=" -d "; fi if [[ ${package_url} =~ .tar$ ]] || [[ ${package_name} =~ .tar$ ]] then ARC_UTILITY="$TAR"; ARCH_OPT=" --overwrite -xpf "; ARCH_DEST_OPT=" -C "; fi if [[ ${package_url} =~ .tar.gz$ ]] || [[ ${package_name} =~ .tar.gz$ ]] then ARC_UTILITY="$TAR" ; ARCH_OPT=" --overwrite -xpzf "; ARCH_DEST_OPT=" -C "; fi if [[ ${package_url} =~ .tar.bz2$ ]] || [[ ${package_name} =~ .tar.bz2$ ]] then ARC_UTILITY="$TAR"; ARCH_OPT=" --overwrite -xpjf "; ARCH_DEST_OPT=" -C "; fi [ ! -d "$DESTINATION" ] && { mkdir -p "$DESTINATION"; } [[ "x${SERVICE}" != "x" ]] && stopService ${SERVICE} > /dev/null 2>&1; [ "x${COMPUTE_TYPE}" == "xapache-php" -o "x${COMPUTE_TYPE}" == "xnginx-php" ] && [[ -d /var/www/webroot/ROOT/ && ! -h /var/www/webroot/ROOT ]] && rm -rf /var/www/webroot/ROOT/; [ "x${COMPUTE_TYPE}" == "xcartridge" ] && [[ -d /opt/repo/ROOT/ && ! -h /opt/repo/ROOT ]] && { shopt -s dotglob; rm -rf /opt/repo/ROOT/*; shopt -u dotglob; } ${ARC_UTILITY} ${ARCH_OPT} "$package_name" ${ARCH_DEST_OPT} "$DESTINATION" >> $ACTIONS_LOG 2>&1; result=$?; [[ "x${SERVICE}" != "x" ]] && startService ${SERVICE} >> $ACTIONS_LOG 2>&1; # writeJSONResponseErr "result=>4052" "message=>Context does not exist"; writeJSONResponseOut "result=>0" "message=>Unpacked successfully"; return 0; } function describeArchive() { echo "Unpack file" ; return 0; } function postArchiveCallback(){ ExtendPerm ; } function describeArchiveOptions() { echo "-a|--archive: archive to unpack"; echo "-d|--destination: destination path (default /)"; } function describeArchiveParameters() { echo "-a|--archive [-d|--destination ]"; }