#!/bin/sh
### Copyright 1999-2014. Parallels IP Holdings GmbH. All Rights Reserved.

set -e

target_version=$1

MYSQL_PWD="`cat /etc/psa/.psa.shadow`"
export MYSQL_PWD

mysql_client=
for file in /usr/local/psa/mysql/bin/mysql /usr/local/bin/mysql /usr/bin/mysql; do
    if $file -uadmin psa </dev/null >/dev/null 2>&1; then
    mysql_client="$file"
    break
    fi
done

if [ -z "$mysql_client" ]; then
    echo "cannot connect to mysql database"
    exit 1
fi

psa_prefix=
for t in /opt/psa /usr/local/psa; do
    if [ -x "$t/admin/bin/php" ]; then
    psa_prefix="$t"
    break
    fi
done

if [ -z "$psa_prefix" ]; then
    echo "cannot found Plesk PHP engine"
    exit 1
fi

mysql="$mysql_client -uadmin -N -B -r psa"


version_file="${psa_prefix}/version"
if [ ! -f "${version_file}" ]; then
    echo "Missed version file '${version_file}'. Fix it."
    exit 1
fi

version="`cat "${version_file}" | awk '{print $1}' | tr -d '.'`"
skip_key_upgrade="check_key_upgrade"

if [ "$version" -lt "900" ]; then
    num=`$mysql -e "SELECT id FROM key_history WHERE name IS NULL AND filename = '/etc/psa/psa.key' ORDER BY id ASC"`
    key_id=`$mysql -e "SELECT plesk_key_id FROM key_history WHERE id = $num"`
    key_pwd=`$mysql -e "SELECT options FROM key_history WHERE id = $num"`

    adm_php="${psa_prefix}/admin/bin/php"
    if [ ! -x "${adm_php}" ]; then
        echo "There is no php interpreter at ${adm_php}. Fix it."
        exit 1
    fi
    url="`${adm_php} -r 'echo "https://" . (iskeyprop("keyserver_host")?getkeyprop("keyserver_host"):"ka.parallels.com") . ":5224/\n";'`"
else
    PATH=$PATH:/usr/bin:
    admphp_ini=${psa_prefix}/admin/conf/php.ini

    url="`sw-engine -c "${admphp_ini}" -r ' \
        \$key = of_get_key_by_product("plesk-unix"); \
        \$url = \$key?of_find_properties($key, SWKEY_CORE_NS, "license-server-url"):null; \
        echo (\$url?\$url[0]:"https://ka.parallels.com:5224/") . "\n";' \
    `"

    key_id="`sw-engine -c "${admphp_ini}" -r ' \
        \$key = of_get_key_by_product("plesk-unix"); \
        echo \$key ? str_replace(".", "", of_get_id(\$key)) : "plsk000000000000"; \
    '`"

    key_num="`echo $key_id | perl -e '$str = <STDIN>; $str =~ s/(\.|\D)//g; print $str;'`"

    if [ "$key_num" -ne 0 ]; then
        key_pwd="`sw-engine -c "${admphp_ini}" -r ' \
             \$res = of_find_properties(of_get_key_by_product("plesk-unix"), SWKEY_CORE_NS, "update-ticket"); \
             echo \$res[0]; \
        '`"

        if [ -z "$key_pwd" ]; then
            key_pwd="`sw-engine -c "${admphp_ini}" -r ' \
                 \$res = of_find_properties(of_get_key_by_product("plesk-unix"), "http://swsoft.com/schemas/keys/core/2", \
                 "update-ticket"); \
                 echo \$res[0]; \
            '`"
        fi
    fi

    if [ "0$target_version" != "0" ]; then
        skip_key_upgrade="`sw-engine -c "${admphp_ini}" -r ' \
            \$targetVersion="'$target_version'"; \
            \$key = of_get_key_by_product("plesk-unix"); \
            if (function_exists("of_get_versions")) { \
                /* plesk >= 10.0.0 */ \
                \$vers = of_get_versions(\$key); \
            } \
            else { \
                /* plesk < 10.0.0 */ \
                \$vers = \$key ? of_find_properties(\$key, SWKEY_CORE_NS, "version") : array(); \
            } \
            if (!is_array(\$vers)) \$vers = array(\$vers); \
            \$match = false; \
            foreach (\$vers as \$ver) { \
                if (!is_array(\$ver)) { \
                    \$match |= strtok(\$ver, ".") == strtok(\$targetVersion, "."); \
                } else { \
                    \$match |= ("any" == \$ver[0] || version_compare(\$ver[0], \$targetVersion) <= 0) && \
                               ("any" == \$ver[1] || version_compare(\$ver[1], \$targetVersion) >= 0); \
                } \
            } \
            echo \$match ? "skip_key_upgrade" : "check_key_upgrade"; \
        '`"
    fi
fi

echo "Key Info v1.0"
echo "PleskLogin"
echo "PleskPassword"
echo "$url"
echo "$key_id"
echo "$key_pwd"
echo "$skip_key_upgrade"
