import { load } from "@std/dotenv"; import { Client } from 'ldapts'; import { log } from "./log.ts"; const dirname = new URL('.', import.meta.url).pathname; await load({ envPath: `${dirname}/.env`, export: true }); const config = { url: Deno.env.get("LDAP_URL"), bindDN: Deno.env.get("LDAP_BIND_DN"), password: Deno.env.get("LDAP_PASSWORD"), searchDN: Deno.env.get("LDAP_SEARCH_DN") } const client = new Client({ url: config.url }); export async function lookupPubkeyByUsername (username: string) { let pubkey; try { await client.bind(config.bindDN, config.password); const { searchEntries } = await client.search(config.searchDN, { filter: `(cn=${username})`, attributes: ['nostrKey'] }); pubkey = searchEntries[0]?.nostrKey; } catch (ex) { log(ex, "red"); } finally { await client.unbind(); return pubkey; } } export async function lookupUsernameByPubkey (pubkey: string) { let username; try { await client.bind(config.bindDN, config.password); const { searchEntries } = await client.search(config.searchDN, { filter: `(nostrKey=${pubkey})`, attributes: ['cn'] }); username = searchEntries[0]?.cn; } catch (ex) { log(ex, "red"); } finally { await client.unbind(); return username; } }