mirror of
https://github.com/siteboon/claudecodeui.git
synced 2025-12-13 05:39:41 +00:00
* Make database path configurable via DATABASE_PATH environment variable - Add DATABASE_PATH environment variable support in db.js - Automatically create database directory if custom path is provided - Update .env.example with DATABASE_PATH documentation for container deployments - Maintain backward compatibility with default path (server/database/auth.db) Co-authored-by: werdnum <271070+werdnum@users.noreply.github.com> * Add error handling for creating DATABASE_PATH. Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: werdnum <271070+werdnum@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: viper151 <simosmik@gmail.com>
101 lines
2.6 KiB
JavaScript
101 lines
2.6 KiB
JavaScript
import Database from 'better-sqlite3';
|
|
import path from 'path';
|
|
import fs from 'fs';
|
|
import { fileURLToPath } from 'url';
|
|
import { dirname } from 'path';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = dirname(__filename);
|
|
|
|
// Use DATABASE_PATH environment variable if set, otherwise use default location
|
|
const DB_PATH = process.env.DATABASE_PATH || path.join(__dirname, 'auth.db');
|
|
const INIT_SQL_PATH = path.join(__dirname, 'init.sql');
|
|
|
|
// Ensure database directory exists if custom path is provided
|
|
if (process.env.DATABASE_PATH) {
|
|
const dbDir = path.dirname(DB_PATH);
|
|
try {
|
|
if (!fs.existsSync(dbDir)) {
|
|
fs.mkdirSync(dbDir, { recursive: true });
|
|
console.log(`Created database directory: ${dbDir}`);
|
|
}
|
|
} catch (error) {
|
|
console.error(`Failed to create database directory ${dbDir}:`, error.message);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
// Create database connection
|
|
const db = new Database(DB_PATH);
|
|
console.log(`Connected to SQLite database at: ${DB_PATH}`);
|
|
|
|
// Initialize database with schema
|
|
const initializeDatabase = async () => {
|
|
try {
|
|
const initSQL = fs.readFileSync(INIT_SQL_PATH, 'utf8');
|
|
db.exec(initSQL);
|
|
console.log('Database initialized successfully');
|
|
} catch (error) {
|
|
console.error('Error initializing database:', error.message);
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
// User database operations
|
|
const userDb = {
|
|
// Check if any users exist
|
|
hasUsers: () => {
|
|
try {
|
|
const row = db.prepare('SELECT COUNT(*) as count FROM users').get();
|
|
return row.count > 0;
|
|
} catch (err) {
|
|
throw err;
|
|
}
|
|
},
|
|
|
|
// Create a new user
|
|
createUser: (username, passwordHash) => {
|
|
try {
|
|
const stmt = db.prepare('INSERT INTO users (username, password_hash) VALUES (?, ?)');
|
|
const result = stmt.run(username, passwordHash);
|
|
return { id: result.lastInsertRowid, username };
|
|
} catch (err) {
|
|
throw err;
|
|
}
|
|
},
|
|
|
|
// Get user by username
|
|
getUserByUsername: (username) => {
|
|
try {
|
|
const row = db.prepare('SELECT * FROM users WHERE username = ? AND is_active = 1').get(username);
|
|
return row;
|
|
} catch (err) {
|
|
throw err;
|
|
}
|
|
},
|
|
|
|
// Update last login time
|
|
updateLastLogin: (userId) => {
|
|
try {
|
|
db.prepare('UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = ?').run(userId);
|
|
} catch (err) {
|
|
throw err;
|
|
}
|
|
},
|
|
|
|
// Get user by ID
|
|
getUserById: (userId) => {
|
|
try {
|
|
const row = db.prepare('SELECT id, username, created_at, last_login FROM users WHERE id = ? AND is_active = 1').get(userId);
|
|
return row;
|
|
} catch (err) {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
|
|
export {
|
|
db,
|
|
initializeDatabase,
|
|
userDb
|
|
}; |