forked from www/www-new
Compare commits
3 Commits
main
...
j285he-lda
Author | SHA1 | Date |
---|---|---|
|
a7d3a4e989 | 1 year ago |
|
615aa3f95f | 1 year ago |
|
597f1961c4 | 1 year ago |
@ -0,0 +1,50 @@ |
||||
import { Client } from "ldapts"; |
||||
|
||||
interface MemberItem { |
||||
name: string; |
||||
id: string; |
||||
program: string; |
||||
} |
||||
|
||||
export async function getMembers( |
||||
year: string, |
||||
term: string |
||||
): Promise<MemberItem[]> { |
||||
if (term !== "winter" && term !== "spring" && term !== "fall") { |
||||
throw new Error(`[getMembers] Not a valid term: "${term}"`); |
||||
} |
||||
|
||||
let members: MemberItem[] = []; |
||||
|
||||
const url = "ldap://ldap1.csclub.uwaterloo.ca"; |
||||
const searchDN = "ou=People,dc=csclub,dc=uwaterloo,dc=ca"; |
||||
const client = new Client({ |
||||
url, |
||||
}); |
||||
try { |
||||
await client.bind("", ""); |
||||
const { searchEntries } = await client.search(searchDN, { |
||||
scope: "sub", |
||||
filter: `(&(objectClass=member)(term=${term.slice(0, 1)}${year}))`, |
||||
}); |
||||
|
||||
members = searchEntries |
||||
.map((item) => { |
||||
return { |
||||
name: item.cn as string, |
||||
id: item.uid as string, |
||||
program: item.program === undefined ? "" : (item.program as string), |
||||
}; |
||||
}) |
||||
.sort((item1: MemberItem, item2: MemberItem) => |
||||
item1.id.localeCompare(item2.id) |
||||
); |
||||
} finally { |
||||
// catch (ex) {
|
||||
// throw ex;
|
||||
// }
|
||||
await client.unbind(); |
||||
} |
||||
|
||||
return members; |
||||
} |
@ -0,0 +1,8 @@ |
||||
import { getMembers } from "./ldap"; |
||||
|
||||
const main = async () => { |
||||
const members = await getMembers("2020", "winter"); |
||||
console.log(members); |
||||
}; |
||||
|
||||
void main(); |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue