From 313d42be2f7a8aa2ea8899112197fc9a4382f004 Mon Sep 17 00:00:00 2001 From: Momentry Studio Date: Mon, 12 Oct 2026 15:35:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=BE=E7=BD=AE=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E4=B8=BA=20demo/demo123=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=95=B0=E6=8D=AE=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题修复: 1. ✅ 默认账号设置 - db.rs: 默认密码改为 demo123 - .env.template: 默认密码改为 demo123 - install.sh: 默认密码改为 demo123 2. ✅ 数据路径动态化 - db.rs: 使用 dirs::home_dir() 自动检测用户主目录 - 默认路径: {HOME}/momentry_studio/data/users - 支持通过 MOMENTRY_DATA_DIR 环境变量自定义 验证脚本: - scripts/verify_default_setup.sh: 验证默认账号和数据路径 目标: - 安装后可直接使用 demo/demo123 登录 - 数据路径随用户主目录自动调整 - 适用于任何用户环境 影响: - demo 用户: 密码固定为 demo123 - 数据路径: 自动检测 {HOME}/momentry_studio/data/users - 安装即可使用,无需额外配置 --- .env.template | 6 +- install.sh | 24 +++- scripts/verify_default_setup.sh | 210 ++++++++++++++++++++++++++++++++ src-tauri/src/db.rs | 21 ++-- 4 files changed, 241 insertions(+), 20 deletions(-) create mode 100755 scripts/verify_default_setup.sh diff --git a/.env.template b/.env.template index 422a1e0..4b7a1ac 100644 --- a/.env.template +++ b/.env.template @@ -61,9 +61,9 @@ MOMENTRY_API_KEY=your_momentry_api_key_here # ======================================== # 默认用户密码 # ======================================== -# 在安装时自动生成,或手动设置 -# 格式: demo_ -MOMENTRY_DEFAULT_PASSWORD=demo_change_this +# 默认密码: demo123 +# 可自定义修改 +MOMENTRY_DEFAULT_PASSWORD=demo123 # ======================================== # SMB 共享配置 diff --git a/install.sh b/install.sh index d9d82f8..32fe4f3 100755 --- a/install.sh +++ b/install.sh @@ -124,19 +124,33 @@ echo "" # 步骤 5.5: 初始化默认用户 log_step "步骤 5.5/6: 初始化默认用户..." -# Generate a secure random password -DEFAULT_PASSWORD="demo_$(openssl rand -hex 4)" +# Use demo123 as default password (can be overridden by MOMENTRY_DEFAULT_PASSWORD) +DEFAULT_PASSWORD="demo123" + +# Check if custom password is set +if [ -n "${MOMENTRY_DEFAULT_PASSWORD}" ]; then + DEFAULT_PASSWORD="${MOMENTRY_DEFAULT_PASSWORD}" + log_info "使用自定义密码: ${DEFAULT_PASSWORD}" +else + log_info "使用默认密码: demo123" +fi # Set environment variable for password export MOMENTRY_DEFAULT_PASSWORD="${DEFAULT_PASSWORD}" -log_info "默认用户密码: ${DEFAULT_PASSWORD}" -log_warn "请妥善保存此密码!" +log_info "========================================" +log_info "默认用户账号:" +log_info " 用户名: demo" +log_info " 密码: ${DEFAULT_PASSWORD}" +log_info "========================================" +log_warn "安装完成后请立即修改密码!" # Save to .env file if [ -f "${SCRIPT_DIR}/.env" ]; then + # Remove old password if exists + sed -i.bak '/MOMENTRY_DEFAULT_PASSWORD/d' "${SCRIPT_DIR}/.env" echo "" >> "${SCRIPT_DIR}/.env" - echo "# Default user password (generated during installation)" >> "${SCRIPT_DIR}/.env" + echo "# Default user password" >> "${SCRIPT_DIR}/.env" echo "MOMENTRY_DEFAULT_PASSWORD=${DEFAULT_PASSWORD}" >> "${SCRIPT_DIR}/.env" log_info "✅ 密码已保存到 .env 文件" fi diff --git a/scripts/verify_default_setup.sh b/scripts/verify_default_setup.sh new file mode 100755 index 0000000..d389d82 --- /dev/null +++ b/scripts/verify_default_setup.sh @@ -0,0 +1,210 @@ +#!/bin/bash +# 验证默认账号和数据路径 + +echo "================================================================================ + 默认账号和数据路径验证 +================================================================================ +" + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" + +echo "项目根目录: ${PROJECT_ROOT}" +echo "" + +# 1. 检查默认账号 +echo "1. 检查默认账号设置" +echo "--------------------------------------------------------------------------------" + +# 检查 db.rs +if grep -q '"demo123"' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then + echo "✅ db.rs: 默认密码设置为 demo123" +else + echo "❌ db.rs: 默认密码未设置为 demo123" +fi + +# 检查 .env.template +if grep -q "MOMENTRY_DEFAULT_PASSWORD=demo123" "${PROJECT_ROOT}/.env.template"; then + echo "✅ .env.template: 默认密码设置为 demo123" +else + echo "❌ .env.template: 默认密码未设置为 demo123" +fi + +# 检查 install.sh +if grep -q 'DEFAULT_PASSWORD="demo123"' "${PROJECT_ROOT}/install.sh"; then + echo "✅ install.sh: 默认密码设置为 demo123" +else + echo "❌ install.sh: 默认密码未设置为 demo123" +fi + +echo "" + +# 2. 检查数据路径 +echo "2. 检查数据路径设置" +echo "--------------------------------------------------------------------------------" + +# 检查 db.rs 是否使用动态路径 +if grep -q 'dirs::home_dir()' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then + echo "✅ db.rs: 使用动态路径 (dirs::home_dir())" +else + echo "❌ db.rs: 未使用动态路径" +fi + +# 检查 db.rs 是否使用绝对路径 +if grep -q 'momentry_studio/data/users' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then + echo "✅ db.rs: 使用绝对路径 (momentry_studio/data/users)" +else + echo "❌ db.rs: 未使用绝对路径" +fi + +# 检查 paths.rs 是否存在 +if [ -f "${PROJECT_ROOT}/src-tauri/src/paths.rs" ]; then + echo "✅ paths.rs: 存在" + + # 检查关键函数 + if grep -q 'pub fn get_home_dir()' "${PROJECT_ROOT}/src-tauri/src/paths.rs"; then + echo " ✅ get_home_dir() 函数存在" + fi + + if grep -q 'pub fn get_momentry_core_root()' "${PROJECT_ROOT}/src-tauri/src/paths.rs"; then + echo " ✅ get_momentry_core_root() 函数存在" + fi +else + echo "❌ paths.rs: 不存在" +fi + +echo "" + +# 3. 检查环境变量 +echo "3. 检查环境变量模板" +echo "--------------------------------------------------------------------------------" + +if [ -f "${PROJECT_ROOT}/.env.template" ]; then + echo "✅ .env.template 存在" + + # 检查关键环境变量 + if grep -q "MOMENTRY_DATA_DIR=" "${PROJECT_ROOT}/.env.template"; then + echo " ✅ MOMENTRY_DATA_DIR 配置存在" + fi + + if grep -q "MOMENTRY_CORE_ROOT=" "${PROJECT_ROOT}/.env.template"; then + echo " ✅ MOMENTRY_CORE_ROOT 配置存在" + fi + + if grep -q "STORAGE_ROOT=" "${PROJECT_ROOT}/.env.template"; then + echo " ✅ STORAGE_ROOT 配置存在" + fi +else + echo "❌ .env.template 不存在" +fi + +echo "" + +# 4. 模拟安装测试 +echo "4. 模拟安装测试" +echo "--------------------------------------------------------------------------------" + +# 检测当前用户 +CURRENT_USER=$(whoami) +USER_HOME=$(eval echo ~${CURRENT_USER}) + +echo "当前用户: ${CURRENT_USER}" +echo "用户主目录: ${USER_HOME}" +echo "" + +# 预期的数据路径 +EXPECTED_DATA_DIR="${USER_HOME}/momentry_studio/data/users" + +echo "预期数据路径: ${EXPECTED_DATA_DIR}" + +# 检查是否存在数据库 +if [ -d "${EXPECTED_DATA_DIR}" ]; then + echo "✅ 数据目录存在: ${EXPECTED_DATA_DIR}" + + if [ -f "${EXPECTED_DATA_DIR}/demo.sqlite" ]; then + echo " ✅ demo.sqlite 存在" + + # 检查用户表 + sqlite3 "${EXPECTED_DATA_DIR}/demo.sqlite" "SELECT username FROM app_users WHERE username='demo';" 2>/dev/null && { + echo " ✅ demo 用户存在于数据库中" + } || { + echo " ⚠️ demo 用户不存在于数据库中" + } + else + echo " ⚠️ demo.sqlite 不存在" + fi +else + echo "⚠️ 数据目录不存在: ${EXPECTED_DATA_DIR}" + echo " 安装后将自动创建" +fi + +echo "" + +# 5. 总结 +echo "================================================================================ + 验证总结 +================================================================================ +" + +ISSUES=0 + +# 检查默认账号 +if grep -q '"demo123"' "${PROJECT_ROOT}/src-tauri/src/db.rs" && \ + grep -q "MOMENTRY_DEFAULT_PASSWORD=demo123" "${PROJECT_ROOT}/.env.template" && \ + grep -q 'DEFAULT_PASSWORD="demo123"' "${PROJECT_ROOT}/install.sh"; then + echo "✅ 默认账号设置正确" + echo " 用户名: demo" + echo " 密码: demo123" +else + echo "❌ 默认账号设置有问题" + ISSUES=$((ISSUES + 1)) +fi + +echo "" + +# 检查数据路径 +if grep -q 'dirs::home_dir()' "${PROJECT_ROOT}/src-tauri/src/db.rs" && \ + grep -q 'momentry_studio/data/users' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then + echo "✅ 数据路径使用动态路径" + echo " 自动检测用户主目录: ${USER_HOME}" + echo " 数据路径: ${EXPECTED_DATA_DIR}" +else + echo "❌ 数据路径未使用动态路径" + ISSUES=$((ISSUES + 1)) +fi + +echo "" + +if [ $ISSUES -eq 0 ]; then + echo "================================================================================ + ✅ 所有检查通过 +================================================================================ +" + echo "准备状态:" + echo " ✅ 默认账号: demo / demo123" + echo " ✅ 数据路径: 自动检测用户主目录" + echo " ✅ 可安装到任何系统" + echo "" + echo "下一步:" + echo " 1. 运行安装: ./scripts/install.sh" + echo " 2. 验证安装: ./scripts/check_user_isolation.sh" + echo " 3. 测试登录: 用户名 demo, 密码 demo123" +else + echo "================================================================================ + ❌ 发现 ${ISSUES} 个问题 +================================================================================ +" + echo "需要修复的问题:" + + if ! grep -q '"demo123"' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then + echo " - db.rs 需要设置默认密码为 demo123" + fi + + if ! grep -q 'dirs::home_dir()' "${PROJECT_ROOT}/src-tauri/src/db.rs"; then + echo " - db.rs 需要使用动态路径" + fi +fi + +echo "" +echo "================================================================================ +" \ No newline at end of file diff --git a/src-tauri/src/db.rs b/src-tauri/src/db.rs index 16b7a56..f50738c 100644 --- a/src-tauri/src/db.rs +++ b/src-tauri/src/db.rs @@ -52,9 +52,14 @@ CREATE INDEX IF NOT EXISTS idx_video_marks_file ON video_marks(file_uuid); static DB_CONN: Mutex> = Mutex::new(None); fn db_path() -> PathBuf { - let base = std::env::var("MOMENTRY_DATA_DIR").unwrap_or_else(|_| "../data/users".to_string()); + // Use dynamic path based on user home directory + let base = std::env::var("MOMENTRY_DATA_DIR").unwrap_or_else(|_| { + let home = dirs::home_dir() + .expect("Failed to get home directory"); + format!("{}/momentry_studio/data/users", home.display()) + }); std::fs::create_dir_all(&base).ok(); - PathBuf::from(base).join("demo.sqlite") + PathBuf::from(base).join("demo.sqlite") // TODO: Change to dynamic username } pub fn init_db() -> Result<(), String> { @@ -66,19 +71,11 @@ pub fn init_db() -> Result<(), String> { // Add password_hash column if not exists (migration) conn.execute("ALTER TABLE app_users ADD COLUMN password_hash TEXT", []).ok(); - // Get default user credentials from environment or use generated values + // Get default user credentials from environment or use demo123 as default let default_id = "demo"; let default_user = "demo"; let default_password = std::env::var("MOMENTRY_DEFAULT_PASSWORD") - .unwrap_or_else(|_| { - // Generate a random password if not set - use std::time::{SystemTime, UNIX_EPOCH}; - let timestamp = SystemTime::now() - .duration_since(UNIX_EPOCH) - .unwrap() - .as_secs(); - format!("demo_{}", timestamp % 1000000) // demo_123456 - }); + .unwrap_or_else(|_| "demo123".to_string()); // Default: demo123 // Check if demo user exists and has password let password_hash: Option = conn