substr/ldap.ts
Râu Cao 91eff4ad07
All checks were successful
CI / Test and lint (push) Successful in 24s
Add missing unbind
2025-05-21 16:34:12 +04:00

61 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;
}