substr/ldap.ts
Râu Cao d3ad136eab
All checks were successful
CI / Test and lint (push) Successful in 16s
Formatting
2025-06-03 11:38:31 +04:00

65 lines
1.4 KiB
TypeScript

import { Client } from "ldapts";
import config from "./config.ts";
const { ldap, ldapEnabled } = config;
let client: Client;
if (ldapEnabled) {
client = new Client({ url: ldap.url as string });
}
export async function lookupPubkeyByUsername(
username: string,
): Promise<string | undefined> {
let pubkey: string | undefined;
try {
await client.bind(ldap.bindDN as string, ldap.password as string);
const { searchEntries } = await client.search(ldap.searchDN as string, {
filter: `(cn=${username})`,
attributes: ["nostrKey"],
});
if (
searchEntries.length > 0 &&
typeof searchEntries[0].nostrKey === "string"
) {
pubkey = searchEntries[0].nostrKey.toString();
}
await client.unbind();
} catch (e) {
await client.unbind();
throw e;
}
return pubkey;
}
export async function lookupUsernameByPubkey(
pubkey: string,
): Promise<string | undefined> {
let username: string | undefined;
try {
await client.bind(ldap.bindDN as string, ldap.password as string);
const { searchEntries } = await client.search(ldap.searchDN as string, {
filter: `(nostrKey=${pubkey})`,
attributes: ["cn"],
});
if (searchEntries.length > 0) {
username = searchEntries[0].cn.toString();
}
await client.unbind();
} catch (e) {
await client.unbind();
throw e;
}
return username;
}