107 lines
2.8 KiB
JavaScript
107 lines
2.8 KiB
JavaScript
|
|
import mysql from "mysql2/promise";
|
|
|
|
import {
|
|
generateOTPSecret
|
|
} from "./otp.mjs";
|
|
|
|
// Create the connection to database
|
|
const connection = await mysql.createConnection({
|
|
host: '10.0.0.31',
|
|
port: 33063,
|
|
database: 'glauth',
|
|
user: 'glauth',
|
|
password: 'b848dc7aa44b66bbcc1e5991a6ae45ce'
|
|
});
|
|
|
|
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;
|
|
}
|
|
}
|