HEX
Server: Apache/2.4.63 (Unix)
System: Linux TOMS-220NAS 4.4.302+ #86009 SMP Wed Nov 26 18:19:17 CST 2025 x86_64
User: flavio87 (1026)
PHP: 8.3.27
Disabled: NONE
Upload Files
File: //var/packages/MariaDB10/WIZARD_UIFILES/install_uifile_krn.sh
#!/bin/bash

quote_json() {
    sed -e 's|\\|\\\\|g' -e 's|\"|\\\"|g'
}

page_append()
{
    if [ -z "$1" ]; then
        echo "$2"
    elif [ -z "$2" ]; then
        echo "$1"
    else
        echo "$1,$2"
    fi
}

WIZARD_FOUND_BACKUP="패키지 예약 데이터가 호환되지 않음"
RESERVED_DATA_DEPRECATE_MSG="시스템에 있는 이 패키지의 예약 데이터가 이 버전과 호환되지 않습니다.<br>이 버전을 설치하면 예약 데이터가 삭제됩니다.<br>예약 데이터를 보존하려면 이전 설치와 동일한 버전의 패키지를 설치합니다. (이전 버전: {prev_version})"
FOUND_DB_TITLE_JAVASCRIPT="MariaDB 10 데이터베이스 복원 또는 생성"
WIZARD_SET_DATA_TITLE_JSON="설정 MariaDB 10"
WIZARD_SET_DATA_TITLE_JAVASCRIPT="설정 MariaDB 10"
DB_NEW_PASSWORD="새 패스워드"
INVALID_USER_PASSWORD="패스워드는 현재 강도 규칙을 충족하지 않습니다. 최소 패스워드 길이는 10자이고 대소문자가 혼합되고 숫자 및 특수 문자가 포함되어야 합니다. 또한 일반적인 패스워드를 배제해야 하고 패스워드로 사용자 이름을 사용해서는 안 됩니다."
DB_CONFIRM_PASSWORD="패스워드 확인"
PORT="포트"
BAD_PORT="포트 번호는 1024~65535 사이여야 합니다."

MYSQLDB_ESSENTIAL_TABLE="user db host tables_priv columns_priv func"

EssentialTablesExists() {
    local mysqlPath=$1
    for tbl in ${MYSQLDB_ESSENTIAL_TABLE}; do
        if [ ! -f ${mysqlPath}/mysql/${tbl}.frm -o ! -f ${mysqlPath}/mysql/${tbl}.MYI -o ! -f ${mysqlPath}/mysql/${tbl}.MYD ]; then
            false
            return
        fi
    done
    true
    return
}

IsPreservedDataExists() {
    local preservedDataPath=$(/bin/get_key_value "/usr/syno/etc/packages/MariaDB10/.mariadb.conf" vol)
    if [ -d "$preservedDataPath" ] && EssentialTablesExists "$preservedDataPath"; then
        true
        return
    fi
    false
    return
}

RESTORE_DEPRECATED_WARNING_PAGE=$(/bin/cat<<EOF
{
    "step_title": "${WIZARD_FOUND_BACKUP}",
    "items": [{
        "desc": "${RESERVED_DATA_DEPRECATE_MSG}"
    }]
}
EOF
)

jsFunction=$(/bin/cat<<EOF
    function findStepByTitle(wizardDialog, title) {
        for (var i = wizardDialog.customuiIds.length - 1 ; i >= 0 ; i--) {
            var step = wizardDialog.getStep(wizardDialog.customuiIds[i]);
            if (title === step.headline) {
                return step;
            }
        }
        return null;
    }
    function isRestoreChecked(wizardDialog) {
        var restoreStep = findStepByTitle(wizardDialog, "${FOUND_DB_TITLE_JAVASCRIPT}");
        if (!restoreStep) {
            return false;
        } else {
            return restoreStep.items.items[1].checked;
        }
    }
EOF
)

getDeactivate()
{
    DEACTIVATE=$(/bin/cat<<EOF
{
    ${jsFunction}
    var currentStep = arguments[0];
    var wizardDialog = currentStep.owner;
    var restoreStep = findStepByTitle(wizardDialog, "${FOUND_DB_TITLE_JAVASCRIPT}");
    var settingStep = findStepByTitle(wizardDialog, "${WIZARD_SET_DATA_TITLE_JAVASCRIPT}");
    var checked = isRestoreChecked(wizardDialog);
    settingStep.items.items[0].setVisible(!checked);
    settingStep.items.items[1].setVisible(!checked);
}
EOF
)
    echo "$DEACTIVATE" | quote_json
}

getPasswordValidator()
{
    validator=$(/bin/cat<<EOF
{
    ${jsFunction}
    var password = arguments[0];
    var currentStep = arguments[2];
    if(isRestoreChecked(currentStep.owner)) {
        return true;
    } else {
        return -1 !== password.search("(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9])(?=.{10,})") && ! password.includes("root");
    }
}
EOF
)
    echo "$validator" | quote_json
}

getPasswordConfirmValidator()
{
    validator=$(/bin/cat<<EOF
{
    ${jsFunction}
    var passwordConfirm = arguments[0];
    var currentStep = arguments[2];
    if(isRestoreChecked(currentStep.owner)) {
        return true;
    } else {
        return passwordConfirm === currentStep.items.items[0].value;
    }
}
EOF
)
    echo "$validator" | quote_json
}

getPortValidator()
{
    validator=$(/bin/cat<<EOF
{
    var strPort = arguments[0];
    var port = parseInt(strPort, 10);
    return -1 !== strPort.search("^[0-9]+$") && 1024 <= port && port <= 65535;
}
EOF
)
    echo "$validator" | quote_json
}

SETTING_PAGE=$(/bin/cat<<EOF
{
    "step_title": "${WIZARD_SET_DATA_TITLE_JSON}",
    "invalid_next_disabled_v2": true,
    "deactivate": "$(getDeactivate)",
    "items": [{
        "type": "password",
        "subitems": [{
            "key": "pkgwizard_new_root_password",
            "desc": "${DB_NEW_PASSWORD}",
            "invalidText": "${INVALID_USER_PASSWORD}",
            "validator": {
                "fn": "$(getPasswordValidator)"
            }
        }, {
            "desc": "${DB_CONFIRM_PASSWORD}",
            "validator": {
                "fn": "$(getPasswordConfirmValidator)"
            }
        }]
    }, {
        "type": "textfield",
        "subitems": [{
            "key": "pkgwizard_port",
            "desc": "${PORT}",
            "defaultValue": "3306",
            "invalidText": "${BAD_PORT}",
            "validator": {
                "allowBlank": false,
                "fn": "$(getPortValidator)"
            }
        }]
    }]
}
EOF
)

GetPreservedDataVersion()
{
    local preservedDataPath=$(/bin/get_key_value "/usr/syno/etc/packages/MariaDB10/.mariadb.conf" vol)
    if [ -d "$preservedDataPath" ]; then
        local versionFile="${preservedDataPath}/VERSION"
        local version=$(cat "$versionFile" 2>/dev/null)
        if [ -n "$version" ]; then
            echo "$version"
            return
        fi
    fi
    echo "unknown"
}

SetupInstallWizardVariables()
{
    local prev_version="unknown"
    local reserverd_data_pkg_ver="$(GetPreservedDataVersion)"
    if [ -n "${reserverd_data_pkg_ver}" ]; then
        prev_version="${reserverd_data_pkg_ver}"
    fi
    RESTORE_DEPRECATED_WARNING_PAGE="$(echo "${RESTORE_DEPRECATED_WARNING_PAGE}" | sed "s/{prev_version}/${prev_version}/g")"
}

SetupInstallWizardPages()
{
    local install_page=""
    if IsPreservedDataExists; then
        install_page=$(page_append "$install_page" "$RESTORE_DEPRECATED_WARNING_PAGE")
    fi
    install_page=$(page_append "$install_page" "$SETTING_PAGE")
    echo "[$install_page]" > "${SYNOPKG_TEMP_LOGFILE}"
}

main()
{
    SetupInstallWizardVariables
    SetupInstallWizardPages
    return 0
}
main