mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
- [CAS allowed LDAP groups](https://github.com/wekan/meteor-accounts-cas/pull/4).
Thanks to ppoulard ! Please test. Related #2356
This commit is contained in:
parent
0834f6ed1e
commit
d194cc7a5a
2 changed files with 35 additions and 7 deletions
|
|
@ -81,7 +81,12 @@ Meteor.loginWithCas = function(options, callback) {
|
||||||
// check auth on server.
|
// check auth on server.
|
||||||
Accounts.callLoginMethod({
|
Accounts.callLoginMethod({
|
||||||
methodArguments: [{ cas: { credentialToken: credentialToken } }],
|
methodArguments: [{ cas: { credentialToken: credentialToken } }],
|
||||||
userCallback: callback
|
userCallback: err => {
|
||||||
|
// Fix redirect bug after login successfully
|
||||||
|
if (!err) {
|
||||||
|
window.location.href = '/';
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
|
||||||
|
|
@ -71,14 +71,37 @@ class CAS {
|
||||||
callback({message: 'Empty response.'});
|
callback({message: 'Empty response.'});
|
||||||
}
|
}
|
||||||
if (result['cas:serviceResponse']['cas:authenticationSuccess']) {
|
if (result['cas:serviceResponse']['cas:authenticationSuccess']) {
|
||||||
var userData = {
|
const userData = {
|
||||||
id: result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:user'][0].toLowerCase(),
|
id: result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:user'][0].toLowerCase(),
|
||||||
}
|
|
||||||
const attributes = result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:attributes'][0];
|
|
||||||
for (var fieldName in attributes) {
|
|
||||||
userData[fieldName] = attributes[fieldName][0];
|
|
||||||
};
|
};
|
||||||
callback(undefined, true, userData);
|
const attributes = result['cas:serviceResponse']['cas:authenticationSuccess'][0]['cas:attributes'][0];
|
||||||
|
|
||||||
|
// Check allowed ldap groups if exist (array only)
|
||||||
|
// example cas settings : "allowedLdapGroups" : ["wekan", "admin"],
|
||||||
|
let findedGroup = false;
|
||||||
|
const allowedLdapGroups = Meteor.settings.cas.allowedLdapGroups || false;
|
||||||
|
for (const fieldName in attributes) {
|
||||||
|
if (allowedLdapGroups && fieldName === 'cas:memberOf') {
|
||||||
|
for (const groups in attributes[fieldName]) {
|
||||||
|
const str = attributes[fieldName][groups];
|
||||||
|
if (!Array.isArray(allowedLdapGroups)) {
|
||||||
|
callback({message: 'Settings "allowedLdapGroups" must be an array'});
|
||||||
|
}
|
||||||
|
for (const allowedLdapGroup in allowedLdapGroups) {
|
||||||
|
if (str.search(`cn=${allowedLdapGroups[allowedLdapGroup]}`) >= 0) {
|
||||||
|
findedGroup = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
userData[fieldName] = attributes[fieldName][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allowedLdapGroups && !findedGroup) {
|
||||||
|
callback({message: 'Group not finded.'}, false);
|
||||||
|
} else {
|
||||||
|
callback(undefined, true, userData);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
callback(undefined, false);
|
callback(undefined, false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue