|
|
|
@ -31,22 +31,32 @@ export interface Metadata { |
|
|
|
|
role?: string; |
|
|
|
|
image: string; |
|
|
|
|
} |
|
|
|
|
interface Person { |
|
|
|
|
firstName: string; |
|
|
|
|
lastName: string; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
interface Exec { |
|
|
|
|
person: Person; |
|
|
|
|
position: string; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export async function getExecs() { |
|
|
|
|
const execNamePosPairs = await getExecNamePosPairs(); |
|
|
|
|
const execs = await getExecNamePosPairs(); |
|
|
|
|
|
|
|
|
|
return await Promise.all( |
|
|
|
|
execNamePosPairs.map((namePosPair) => |
|
|
|
|
getExec(namePosPair[0], namePosPair[1]) |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
return await Promise.all(execs.map(getExec)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async function getExec(name: string, pos: string) { |
|
|
|
|
async function getExec(exec: Exec) { |
|
|
|
|
let content, metadata; |
|
|
|
|
const expectedFileName = |
|
|
|
|
`${exec.person.firstName}` + |
|
|
|
|
(exec.person.lastName ? `-${exec.person.lastName}` : ""); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
const raw = await readFile(path.join(EXECS_PATH, `${name}${FILETYPE}`)); |
|
|
|
|
const raw = await readFile( |
|
|
|
|
path.join(EXECS_PATH, `${expectedFileName}${FILETYPE}`) |
|
|
|
|
); |
|
|
|
|
({ content, data: metadata } = matter(raw)); |
|
|
|
|
|
|
|
|
|
const image = await getMemberImagePath(metadata.name as string); |
|
|
|
@ -57,10 +67,10 @@ async function getExec(name: string, pos: string) { |
|
|
|
|
}; |
|
|
|
|
} catch (err) { |
|
|
|
|
// Capitalize the first letter of the first name and last name
|
|
|
|
|
const firstName = capitalize(name.split("-")[0]); |
|
|
|
|
const lastName = capitalize(name.split("-")[1]); |
|
|
|
|
const firstName = capitalize(exec.person.firstName); |
|
|
|
|
const lastName = capitalize(exec.person.lastName); |
|
|
|
|
|
|
|
|
|
const posName = execPositions[pos]; |
|
|
|
|
const posName = execPositions[exec.position]; |
|
|
|
|
content = "Coming Soon!"; |
|
|
|
|
metadata = { |
|
|
|
|
name: `${firstName} ${lastName}`, |
|
|
|
@ -76,11 +86,14 @@ async function getExec(name: string, pos: string) { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
async function getExecNamePosPairs(): Promise< |
|
|
|
|
[person: string, position: string][] |
|
|
|
|
> { |
|
|
|
|
async function getExecNamePosPairs(): Promise<Exec[]> { |
|
|
|
|
const CodeyExec = { |
|
|
|
|
person: { firstName: "codey", lastName: "" }, |
|
|
|
|
position: "mascot", |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
if (process.env.USE_LDAP?.toLowerCase() !== "true") { |
|
|
|
|
return [["codey", "mascot"]]; |
|
|
|
|
return [CodeyExec]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const url = "ldap://ldap1.csclub.uwaterloo.ca"; |
|
|
|
@ -89,7 +102,8 @@ async function getExecNamePosPairs(): Promise< |
|
|
|
|
|
|
|
|
|
// position: name
|
|
|
|
|
const execMembers: { [position: string]: string } = {}; |
|
|
|
|
let formattedExec: [person: string, position: string][] = []; |
|
|
|
|
|
|
|
|
|
let formattedExec: Exec[] = []; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
await client.bind("", ""); |
|
|
|
@ -137,13 +151,20 @@ async function getExecNamePosPairs(): Promise< |
|
|
|
|
if (fullName == undefined) { |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
const firstName = fullName.split(" ")[0].toLowerCase(); |
|
|
|
|
const lastName = fullName.split(" ")[1].toLowerCase(); |
|
|
|
|
return [`${firstName}-${lastName}`, position]; |
|
|
|
|
const nameParts = fullName.split(" "); |
|
|
|
|
const firstName = nameParts[0].toLowerCase(); |
|
|
|
|
const lastName = |
|
|
|
|
nameParts.length > 1 |
|
|
|
|
? nameParts[nameParts.length - 1].toLowerCase() |
|
|
|
|
: ""; |
|
|
|
|
return { |
|
|
|
|
person: { firstName: firstName, lastName: lastName }, |
|
|
|
|
position: position, |
|
|
|
|
}; |
|
|
|
|
}) |
|
|
|
|
.filter((pair) => pair != null) as [person: string, position: string][]; |
|
|
|
|
.filter((pair) => pair != null) as Exec[]; |
|
|
|
|
|
|
|
|
|
formattedExec = [...formattedExec, ["codey", "mascot"]]; |
|
|
|
|
formattedExec = [...formattedExec, CodeyExec]; |
|
|
|
|
} finally { |
|
|
|
|
await client.unbind(); |
|
|
|
|
} |
|
|
|
|