95 lines
2.0 KiB
JavaScript

const mariadb = require('mariadb');
let pool
function init(dbConfig){
pool = mariadb.createPool({
host: dbConfig.host,
user: dbConfig.user,
password: dbConfig.password,
database: dbConfig.database,
connectionLimit: 5,
});
return {
query,
getUser,
getUserid,
getUserAccess,
getVMList,
getVM,
getVMInfo
}
}
async function query(sql, params = []){
let conn;
try {
conn = await pool.getConnection();
const rows = await conn.query(sql, params);
return rows
} catch (err){
console.error('DB query error:', err);
throw err;
} finally{
if (conn) conn.release();
}
};
async function getUser(username){
const result = await query(`
SELECT 1
FROM users
WHERE username = ?
`, [username]);
return !!result;
};
async function getUserid(username) {
const result = await query(`
SELECT userid
FROM users
WHERE username = ?
`, [username]);
return result[0]?.userid || null;
};
async function getVMList(userid) {
const result = await query(`
SELECT v.hostname
FROM vms v
JOIN user_access ua ON v.hostname = ua.hostname
JOIN users u ON ua.userid = u.userid
WHERE u.userid = ?
`, [userid]);
return result;
}
async function getUserAccess(userid, hostname) {
const result = await query(`
SELECT 1
FROM user_access
WHERE userid = ? AND hostname = ?;
`, [userid, hostname]);
return result.length > 0;
};
async function getVM(hostname) {
const result = await query(`
SELECT * FROM vms
WHERE hostname = ?
`, [hostname]);
return result[0];
}
async function getVMInfo(hostname){
const result = await query(`
SELECT *
FROM vm_info
WHERE hostname = ?
`,[hostname]);
return result[0];
};
module.exports = {
init
};