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.
This commit is contained in:
66
db/connection.js
Normal file
66
db/connection.js
Normal file
@@ -0,0 +1,66 @@
|
||||
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 };
|
||||
Reference in New Issue
Block a user