#!/bin/sh

# Check input file
TGZ_FILE="$1"
[ -f "$TGZ_FILE" ] || exit 1

# Initialize library
MOD_CP_LIB=/opt/captive_portal/usr/libexec/functions
[ -f "$MOD_CP_LIB" ] || exit 2
. $MOD_CP_LIB

# Determine destination directory
if [ -d /mnt/$MOD_CP_NAME ]; then
        TAR_DIR=/mnt
        DST_DIR=$TAR_DIR/$MOD_CP_NAME
        mount -o remount,rw /mnt 2>/dev/null || exit 4
elif [ -d $MOD_CP_WWW_DIR/html ]; then
        TAR_DIR=$MOD_CP_WWW_DIR
        DST_DIR=$TAR_DIR/html
else
        exit 5
fi

# Remove old content
rm -rf $DST_DIR

# Extract files
# NOTICE: can't check return value due to broken tar (error: "tar: Short header")
tar -xzf $TGZ_FILE -C $TAR_DIR >/dev/null 2>&1

# Rename destination directory
TAR_NAME=`tar -tzf $TGZ_FILE | awk 'BEGIN { FS="/" } NR == 1 { print $1 }'`
[ -n "$TAR_NAME" ] || exit 7
if [ "$TAR_DIR/$TAR_NAME" != "$DST_DIR" ]; then
        mv $TAR_DIR/$TAR_NAME $DST_DIR || exit 8
fi

# Remount flash disk read-only again
if [ "$TAR_DIR" = "/mnt" ]; then
        mount | grep "$TAR_DIR" | grep -q rw || mount -o remount,ro /mnt 2>/dev/null
fi

# Success
exit 0

