dev/oidc-provider/find-account.js (38 lines of code) (raw):
/**
* @param {string} emailDomain
* @param {{id:string, firstName:string, lastName:string}[]} userList
*/
export const findAccountFunc = (emailDomain, userList) => {
/**
* @param {unknown} _context
* @param {string} incomingEmail
*/
async function findAccount(_context, incomingEmail) {
if (!incomingEmail.endsWith(`@${emailDomain}`)) {
console.log(
`rejecting: ${incomingEmail} doesn't end with @${emailDomain}`
);
return;
}
const users = userList.map((u) => {
return {
...u,
email: `${u.id}@${emailDomain}`,
};
});
const user = users.find((u) => u.email === incomingEmail);
if (!user) {
console.log(`rejecting: user with email ${incomingEmail} not found`);
return;
}
console.log(`user verified: ${user.email}`)
return {
accountId: user.email,
async claims() {
const { id, email, firstName, lastName } = user;
return {
accountId:id,
sub: id,
email: email,
email_verified: true,
given_name: firstName,
family_name: lastName,
name: [firstName, lastName].join(" "),
};
},
};
}
return findAccount
};