40 lines
997 B
TypeScript
40 lines
997 B
TypeScript
import { load } from "https://deno.land/std@0.224.0/dotenv/mod.ts";
|
|
import { Client } from 'npm:ldapts';
|
|
|
|
const dirname = new URL('.', import.meta.url).pathname;
|
|
await load({ envPath: `${dirname}/.env`, export: true });
|
|
|
|
const opts = {
|
|
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"),
|
|
relayUrl: Deno.args[0]
|
|
}
|
|
|
|
const client = new Client({ url: opts.url });
|
|
|
|
try {
|
|
await client.bind(opts.bindDN, opts.password);
|
|
|
|
const { searchEntries } = await client.search(opts.searchDN, {
|
|
filter: `(nostrKey=*)`,
|
|
attributes: ['nostrKey']
|
|
});
|
|
|
|
const pubkeys = searchEntries.map(e => e.nostrKey);
|
|
const filter = JSON.stringify({ authors: pubkeys });
|
|
|
|
const p = Deno.run({ cmd: [
|
|
"strfry", "sync", opts.relayUrl,
|
|
"--dir", "down", "--filter", filter
|
|
]});
|
|
|
|
const result = await p.status();
|
|
|
|
Deno.exit(result.code);
|
|
} catch (ex) {
|
|
console.error(ex);
|
|
Deno.exit(1);
|
|
}
|