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