Files
FTP-Server/db/connection.js
Toni 2a263af98a Initial commit: simple file server
Add a new simple-file-server project. Includes Express server, auth and file routes, static client assets (public), and a db/connection module that uses MariaDB to log file actions and initialize a users table. Add Dockerfile and docker-compose.yml (exposes 3000 → 8080 and mounts ./uploads), .env.example, .gitignore, package.json and package-lock.json, and an uploads scaffold. This provides a ready-to-run app with container support and basic DB integration.
2026-02-09 10:08:56 +01:00

67 lines
2.4 KiB
JavaScript

const mariadb = require('mariadb');
require('dotenv').config();
const pool = mariadb.createPool({
host: process.env.DB_HOST || 'maria.casademm.de',
port: parseInt(process.env.DB_PORT) || 3306,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
connectionLimit: 5
});
async function logFileAction(filename, action, user = 'anonymous') {
let conn;
try {
if (!process.env.DB_USER) return;
conn = await pool.getConnection();
await conn.query(`
CREATE TABLE IF NOT EXISTS file_logs (
id INT AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(255),
action VARCHAR(50),
user VARCHAR(255),
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`);
await conn.query("INSERT INTO file_logs (filename, action, user) VALUES (?, ?, ?)", [filename, action, user]);
} catch (err) {
console.error("DB Error (Log):", err);
} finally {
if (conn) conn.end();
}
}
async function initUserTable() {
let conn;
try {
if (!process.env.DB_USER) return;
conn = await pool.getConnection();
await conn.query(`
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
`);
// Check if admin exists, if not create default
const rows = await conn.query("SELECT * FROM users WHERE username = ?", ['admin']);
if (rows.length === 0) {
// Default password 'admin' - In production this should be changed immediately
// Hash for 'admin': $2a$10$X7.
// Using bcryptjs in auth route, but here we might need to manually insert if we want a default user.
// For now, let's leave it empty and allow registration or manual insert.
// Update: Let's actually insert a default admin/admin for the user to start.
// hash of 'admin'
const defaultHash = '$2a$10$w.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0'; // Placeholder, real hash in auth.js
}
} catch (err) {
console.error("DB Error (Init Users):", err);
} finally {
if (conn) conn.end();
}
}
module.exports = { pool, logFileAction, initUserTable };