Patch LDAP issue

This commit is contained in:
Tuan Dang
2024-04-23 21:16:55 -07:00
parent f3fc898232
commit a54d156bf0
3 changed files with 36 additions and 38 deletions
+4 -11
View File
@@ -103,16 +103,10 @@ export const registerLdapRouter = async (server: FastifyZodProvider) => {
: {}) : {})
}); });
ldapClient.bind(ldapConfig.bindDN, ldapConfig.bindPass, (err) => { const groupFilter = "(|(memberUid={{.Username}})(member={{.UserDN}})(uniqueMember={{.UserDN}}))";
if (err) { const searchFilter =
ldapClient.unbind();
return cb(err);
}
const groupFilter =
ldapConfig.groupSearchFilter || ldapConfig.groupSearchFilter ||
"(|(memberUid={{.Username}})(member={{.UserDN}})(uniqueMember={{.UserDN}}))"; groupFilter.replace("{{.Username}}", user.uid).replace("{{.UserDN}}", user.dn);
const searchFilter = groupFilter.replace("{{.Username}}", user.uid).replace("{{.UserDN}}", user.dn);
searchGroups(ldapClient, searchFilter, ldapConfig.groupSearchBase) searchGroups(ldapClient, searchFilter, ldapConfig.groupSearchBase)
.then((groups) => { .then((groups) => {
@@ -134,10 +128,9 @@ export const registerLdapRouter = async (server: FastifyZodProvider) => {
}) })
.catch((err2) => { .catch((err2) => {
ldapClient.unbind(); ldapClient.unbind();
logger.error(err); logger.error(err2);
cb(err2, false); cb(err2, false);
}); });
});
} catch (error) { } catch (error) {
logger.error(error); logger.error(error);
return cb(error, false); return cb(error, false);
@@ -14,19 +14,24 @@ export const searchGroups = async (
}, },
(err, res) => { (err, res) => {
if (err) { if (err) {
reject(err); return reject(err);
} }
const groups: { dn: string; cn: string }[] = []; const groups: { dn: string; cn: string }[] = [];
res.on("searchEntry", (entry) => { res.on("searchEntry", (entry) => {
groups.push({ dn: entry.object.dn, cn: entry.object.cn as string }); const dn = entry.dn.toString();
}); const regex = /cn=([^,]+)/;
const match = dn.match(regex);
// parse the cn from the dn
const cn = (match && match[1]) as string;
groups.push({ dn, cn });
});
res.on("error", (error) => { res.on("error", (error) => {
console.error(`error: ${error.message}`);
reject(error); reject(error);
}); });
res.on("end", () => { res.on("end", () => {
resolve(groups); resolve(groups);
}); });
@@ -191,7 +191,7 @@ export const authLoginServiceFactory = ({
const decodedProviderToken = validateProviderAuthToken(providerAuthToken, email); const decodedProviderToken = validateProviderAuthToken(providerAuthToken, email);
authMethod = decodedProviderToken.authMethod; authMethod = decodedProviderToken.authMethod;
if (isAuthMethodSaml(authMethod) && decodedProviderToken.orgId) { if ((isAuthMethodSaml(authMethod) || authMethod === AuthMethod.LDAP) && decodedProviderToken.orgId) {
organizationId = decodedProviderToken.orgId; organizationId = decodedProviderToken.orgId;
} }
} }