fix: 设置默认账号为 demo/demo123,修复数据路径
问题修复: 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 - 安装即可使用,无需额外配置
This commit is contained in:
@@ -61,9 +61,9 @@ MOMENTRY_API_KEY=your_momentry_api_key_here
|
|||||||
# ========================================
|
# ========================================
|
||||||
# 默认用户密码
|
# 默认用户密码
|
||||||
# ========================================
|
# ========================================
|
||||||
# 在安装时自动生成,或手动设置
|
# 默认密码: demo123
|
||||||
# 格式: demo_<random>
|
# 可自定义修改
|
||||||
MOMENTRY_DEFAULT_PASSWORD=demo_change_this
|
MOMENTRY_DEFAULT_PASSWORD=demo123
|
||||||
|
|
||||||
# ========================================
|
# ========================================
|
||||||
# SMB 共享配置
|
# SMB 共享配置
|
||||||
|
|||||||
24
install.sh
24
install.sh
@@ -124,19 +124,33 @@ echo ""
|
|||||||
# 步骤 5.5: 初始化默认用户
|
# 步骤 5.5: 初始化默认用户
|
||||||
log_step "步骤 5.5/6: 初始化默认用户..."
|
log_step "步骤 5.5/6: 初始化默认用户..."
|
||||||
|
|
||||||
# Generate a secure random password
|
# Use demo123 as default password (can be overridden by MOMENTRY_DEFAULT_PASSWORD)
|
||||||
DEFAULT_PASSWORD="demo_$(openssl rand -hex 4)"
|
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
|
# Set environment variable for password
|
||||||
export MOMENTRY_DEFAULT_PASSWORD="${DEFAULT_PASSWORD}"
|
export MOMENTRY_DEFAULT_PASSWORD="${DEFAULT_PASSWORD}"
|
||||||
|
|
||||||
log_info "默认用户密码: ${DEFAULT_PASSWORD}"
|
log_info "========================================"
|
||||||
log_warn "请妥善保存此密码!"
|
log_info "默认用户账号:"
|
||||||
|
log_info " 用户名: demo"
|
||||||
|
log_info " 密码: ${DEFAULT_PASSWORD}"
|
||||||
|
log_info "========================================"
|
||||||
|
log_warn "安装完成后请立即修改密码!"
|
||||||
|
|
||||||
# Save to .env file
|
# Save to .env file
|
||||||
if [ -f "${SCRIPT_DIR}/.env" ]; then
|
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 "" >> "${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"
|
echo "MOMENTRY_DEFAULT_PASSWORD=${DEFAULT_PASSWORD}" >> "${SCRIPT_DIR}/.env"
|
||||||
log_info "✅ 密码已保存到 .env 文件"
|
log_info "✅ 密码已保存到 .env 文件"
|
||||||
fi
|
fi
|
||||||
|
|||||||
210
scripts/verify_default_setup.sh
Executable file
210
scripts/verify_default_setup.sh
Executable file
@@ -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 "================================================================================
|
||||||
|
"
|
||||||
@@ -52,9 +52,14 @@ CREATE INDEX IF NOT EXISTS idx_video_marks_file ON video_marks(file_uuid);
|
|||||||
static DB_CONN: Mutex<Option<Connection>> = Mutex::new(None);
|
static DB_CONN: Mutex<Option<Connection>> = Mutex::new(None);
|
||||||
|
|
||||||
fn db_path() -> PathBuf {
|
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();
|
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> {
|
pub fn init_db() -> Result<(), String> {
|
||||||
@@ -66,19 +71,11 @@ pub fn init_db() -> Result<(), String> {
|
|||||||
// Add password_hash column if not exists (migration)
|
// Add password_hash column if not exists (migration)
|
||||||
conn.execute("ALTER TABLE app_users ADD COLUMN password_hash TEXT", []).ok();
|
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_id = "demo";
|
||||||
let default_user = "demo";
|
let default_user = "demo";
|
||||||
let default_password = std::env::var("MOMENTRY_DEFAULT_PASSWORD")
|
let default_password = std::env::var("MOMENTRY_DEFAULT_PASSWORD")
|
||||||
.unwrap_or_else(|_| {
|
.unwrap_or_else(|_| "demo123".to_string()); // Default: demo123
|
||||||
// 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
|
|
||||||
});
|
|
||||||
|
|
||||||
// Check if demo user exists and has password
|
// Check if demo user exists and has password
|
||||||
let password_hash: Option<String> = conn
|
let password_hash: Option<String> = conn
|
||||||
|
|||||||
Reference in New Issue
Block a user