glauth-ui/lib/mysql.mjs
Kai Waggeling d756a192e4 continued
implemented HTMX
implemented ORM (sequelize)
2025-11-29 21:56:21 +01:00

131 lines
3.4 KiB
JavaScript

import mysql from "mysql2/promise";
import {
getConfig
} from "./config.mjs";
const configData = await getConfig();
var connection = null;
await connect();
export async function connect(params) {
if (connection != null) {
connection.destroy();
}
// Create the connection to database
connection = await mysql.createConnection({
host: configData.database.host,
port: configData.database.port,
database: configData.database.database,
user: configData.database.username,
password: configData.database.password
});
await connection.connect();
connection.on('connection', async () => {
console.log("database connection successful!");
});
connection.on('error', async (mysqlError) => {
if (mysqlError.code == "PROTOCOL_CONNECTION_LOST") {
console.log("database connection lost. reconnecting...");
await connect();
}
});
}
export async function login(username, password) {
try {
const [rows] = await connection.execute('SELECT id, uidnumber, name, otpsecret FROM `users` WHERE `name` = ? AND `passsha256` = ? AND `disabled` = 0', [username, password]);
if (rows.length == 0) {
throw new Error(`user ${username} not found.`);
}
if (rows.length > 1) {
throw new Error("more than 1 user found.");
}
console.log(`user ${rows[0].name} logged in.`);
return rows[0];
} catch (error) {
console.log(`login failed: ${error.message}`);
return null;
}
}
export async function getUser(userid) {
try {
const [rows] = await connection.execute('SELECT uidnumber, name, givenname, sn, mail, custattr FROM `users` WHERE `id` = ?', [userid]);
if (rows.length == 0) {
throw new Error("no user found.");
}
return rows[0];
} catch (error) {
return null;
}
}
export async function getUserMFA(userid) {
try {
const [rows] = await connection.execute('SELECT otpsecret, yubikey FROM `users` WHERE `id` = ?', [userid]);
if (rows.length == 0) {
throw new Error("no user found.");
}
return rows[0];
} catch (error) {
return null;
}
}
export async function setOTPSecret(userid, otpsecret) {
try {
await connection.execute('UPDATE `users` SET `otpsecret` = ? WHERE `id` = ?', [otpsecret, userid]);
return true;
} catch (error) {
return false;
}
}
export async function getUsers() {
let [mysqlUsers] = await connection.execute('SELECT id, name, uidnumber, mail, disabled FROM `users`', []);
return mysqlUsers;
}
export async function getGroups() {
let [mysqlGroups] = await connection.execute('SELECT * FROM `ldapgroups`', []);
return mysqlGroups;
}
export async function getUserGroups(userid) {
try {
let [mysqlUsers] = await connection.execute('SELECT primarygroup, othergroups FROM `users` WHERE `id` = ?', [userid]);
let [mysqlGroups] = await connection.execute('SELECT * FROM `ldapgroups`', []);
mysqlGroups = mysqlGroups.map((mysqlGroup) => {
return {
id: mysqlGroup.id,
name: mysqlGroup.name
}
});
let result = [];
if (mysqlUsers[0].primarygroup != '') {
}
return true;
} catch (error) {
return false;
}
}