fix(installer): 增加外部数据库输入校验和配置确认
This commit is contained in:
@@ -72,16 +72,72 @@ function db_defaults() {
|
||||
esac
|
||||
}
|
||||
|
||||
# 询问外部数据库连接信息
|
||||
# 读取失败时立即停止,不能把 EOF 当成接受默认值后继续安装。
|
||||
function read_db_input() {
|
||||
if ! IFS= read -r "$@"; then
|
||||
printf '\n[错误] 数据库配置输入已中断,安装停止。\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 询问外部数据库连接信息,确认后才更新安装配置。
|
||||
function prompt_db_connection() {
|
||||
local answer
|
||||
read -r -p "请输入数据库地址 [localhost]: " answer; DE_DB_HOST="${answer:-localhost}"
|
||||
read -r -p "请输入数据库端口 [${DB_DEFAULT_PORT}]: " answer; DE_DB_PORT="${answer:-$DB_DEFAULT_PORT}"
|
||||
read -r -p "请输入数据库用户名 [root]: " answer; DE_DB_USER="${answer:-root}"
|
||||
read -r -s -p "请输入数据库密码: " answer; echo; DE_DB_PASSWORD="$answer"
|
||||
read -r -p "请输入数据库名 [dataease]: " answer; DE_DB_DATABASE="${answer:-dataease}"
|
||||
read -r -p "请输入数据库 schema(MySQL/GreatSQL 可留空): " answer; DE_DB_SCHEMA="$answer"
|
||||
read -r -p "请输入 JDBC 连接参数 [${DB_DEFAULT_PARAMS}]: " answer; DE_DB_PARAMS="${answer:-$DB_DEFAULT_PARAMS}"
|
||||
local answer host port username password database schema params
|
||||
while true; do
|
||||
printf '请逐项输入,每次回车确认一项,避免一次粘贴多行连接信息。\n'
|
||||
read_db_input -p "请输入数据库地址 [localhost]: " answer
|
||||
host="${answer:-localhost}"
|
||||
while true; do
|
||||
read_db_input -p "请输入数据库端口 [${DB_DEFAULT_PORT}]: " answer
|
||||
port="${answer:-$DB_DEFAULT_PORT}"
|
||||
if [[ "$port" =~ ^[0-9]{1,5}$ ]] && (( 10#$port >= 1 && 10#$port <= 65535 )); then
|
||||
port=$((10#$port))
|
||||
break
|
||||
fi
|
||||
printf '端口必须是 1-65535 范围内的整数,请重新输入。\n'
|
||||
done
|
||||
read_db_input -p "请输入数据库用户名 [root]: " answer
|
||||
username="${answer:-root}"
|
||||
read_db_input -s -p "请输入数据库密码: " password
|
||||
printf '\n'
|
||||
read_db_input -p "请输入数据库名 [dataease]: " answer
|
||||
database="${answer:-dataease}"
|
||||
read_db_input -p "请输入数据库 schema(MySQL/GreatSQL 可留空): " schema
|
||||
read_db_input -p "请输入 JDBC 连接参数 [${DB_DEFAULT_PARAMS}]: " answer
|
||||
params="${answer:-$DB_DEFAULT_PARAMS}"
|
||||
|
||||
printf '\n请核对外部数据库配置:\n'
|
||||
printf ' 类型:%s\n 地址:%s\n 端口:%s\n 用户名:%s\n 数据库名:%s\n schema:%s\n' \
|
||||
"$DE_DB_TYPE" "$host" "$port" "$username" "$database" "${schema:-(空)}"
|
||||
if [[ -n "$password" ]]; then
|
||||
printf ' 密码:已设置\n'
|
||||
else
|
||||
printf ' 密码:未设置(空密码)\n'
|
||||
fi
|
||||
# 自定义 JDBC 参数可能包含凭据,不在确认信息或日志中回显。
|
||||
if [[ "$params" == "$DB_DEFAULT_PARAMS" ]]; then
|
||||
printf ' JDBC 参数:使用默认值\n'
|
||||
else
|
||||
printf ' JDBC 参数:已设置自定义值\n'
|
||||
fi
|
||||
while true; do
|
||||
read_db_input -p "确认使用以上配置?[y/N](回车重新输入): " answer
|
||||
case "$answer" in
|
||||
[yY]|[yY][eE][sS])
|
||||
DE_DB_HOST="$host"
|
||||
DE_DB_PORT="$port"
|
||||
DE_DB_USER="$username"
|
||||
DE_DB_PASSWORD="$password"
|
||||
DE_DB_DATABASE="$database"
|
||||
DE_DB_SCHEMA="$schema"
|
||||
DE_DB_PARAMS="$params"
|
||||
return
|
||||
;;
|
||||
''|[nN]|[nN][oO]) break ;;
|
||||
*) printf '请输入 y 确认,或输入 n 重新填写。\n' ;;
|
||||
esac
|
||||
done
|
||||
done
|
||||
}
|
||||
|
||||
# 询问运行数据库类型(仅全新安装)
|
||||
@@ -101,7 +157,7 @@ function prompt_database_config() {
|
||||
echo -e " 6) SQLServer"
|
||||
echo -e " 7) GreatSQL"
|
||||
local answer
|
||||
read -r -p "请输入序号 [1-7],默认 1 (MySQL): " answer
|
||||
read_db_input -p "请输入序号 [1-7],默认 1 (MySQL): " answer
|
||||
case "${answer:-1}" in
|
||||
2) DE_DB_TYPE=pg ;;
|
||||
3) DE_DB_TYPE=oracle ;;
|
||||
@@ -113,7 +169,7 @@ function prompt_database_config() {
|
||||
esac
|
||||
|
||||
if [[ "$DE_DB_TYPE" == "mysql" ]]; then
|
||||
read -r -p "是否使用 DataEase 内置 MySQL?[Y/n](默认内置): " answer
|
||||
read_db_input -p "是否使用 DataEase 内置 MySQL?[Y/n](默认内置): " answer
|
||||
case "${answer:-Y}" in
|
||||
[nN]|[nN][oO]) DE_EXTERNAL_DB=true ;;
|
||||
*) DE_EXTERNAL_DB=false ;;
|
||||
|
||||
Reference in New Issue
Block a user