Dynamic display of auth modules (authChoice only)

environments/ppa-mbqj77/deployments/1
Xavier Guimard 10 years ago
parent bba44321fc
commit e5f744654b
  1. 2
      lemonldap-ng-manager/site/static/forms/authChoice.html
  2. 2
      lemonldap-ng-manager/site/static/forms/authChoiceContainer.html
  3. 45
      lemonldap-ng-manager/site/static/js/filterFunctions.js
  4. 109
      lemonldap-ng-manager/site/static/js/manager.js

@ -13,7 +13,7 @@
<tr ng-repeat="i in [[0,'authentication'],[1,'userDB'],[2,'passwordDB']]">
<td trspan="{{i[1]}}"</td>
<td>
<select id="selectform" class="form-control" ng-model="currentNode.data[i[0]]">
<select id="selectform" class="form-control" ng-model="currentNode.data[i[0]]" ng-change="execFilters(_findScopeByKey('authParams'))">
<option ng-repeat="item in _findContainer().select[i[0]]" ng-selected="item.k==currentNode.data[i[0]]" value="{{item.k}}">{{item.v}}</option>
</select>
</td>

@ -17,7 +17,7 @@
<input ng-model="c.title">
</td>
<td ng-repeat="i in [0,1,2]">
<select class="form-control" ng-model="c.data[i]">
<select class="form-control" ng-model="c.data[i]" ng-change="execFilters(_findScopeByKey('authParams'))">
<option ng-repeat="item in currentNode.select[i]" ng-selected="item.k==c.data[i]" value="{{item.k}}">{{item.v}}</option>
</select>
</td>

@ -1,5 +1,5 @@
var filterFunctions = {
'authParams': function($scope, $q, node) {
'authParams': function(scope, $q, node) {
/* Here, `node` is the root node (authParams) and `n` points to its
* conditional subnodes. This subnodes have the property `show` that can
* be set to true or false depending on what has to be displayed
@ -8,29 +8,56 @@ var filterFunctions = {
/* 1. be sure to have all datas in main nodes */
var wait = [];
node.nodes.forEach(function(n) {
wait.push($scope.getKey(n));
wait.push(scope.getKey(n));
});
/* 2. then do the job */
$q.all(wait).then(function() {
/* 2.1. Get all modules needed */
var all = false;
var nToShow = [];
var p = function(s) {
var tmp = s.toLowerCase();
if (tmp == 'ad') {
tmp = 'ldap';
}
if (tmp == 'openidconnect') {
tmp = 'oidc';
}
nToShow.push(tmp + 'Params');
}
if (node.nodes[0].data.match(/^(Choice|Multi)/)) {
for (var i = 1; i < 3; i++) {
node.nodes[i].data = node.nodes[0].data;
}
all = true;
//all = true;
}
node.nodes.forEach(function(n) {
var tmp = n.data.toLowerCase();
if (tmp == 'ad') {
tmp = 'ldap';
p(n.data);
});
/* Get choice or multi sub modules */
node.nodes_cond.forEach(function(n) {
if (node.nodes[0].data == 'Choice' && n.id == 'choiceParams') {
var nd = n._nodes ? n._nodes : n.nodes;
if (!nd[1].cnodes) {
nd = nd[1]._nodes ? nd[1]._nodes : nd[1].nodes;
nd.forEach(function(m) {
m.data.forEach(function(s) {
p(s);
});
});
}
}
if (tmp == 'openidconnect') {
tmp = 'oidc';
else if (node.nodes[0].data == 'Multi' && n.id == 'multiParams') {
var nd = n._nodes ? n._nodes : n.nodes;
var sep = nd[2].data || ';';
var reg = new RegExp('(?:^|' + sep + ')(\w+)');
var s = nd[0].data + sep + nd[1].data;
while ((result = reg.exec(s)) !== null) {
p(result);
}
}
nToShow.push(tmp + 'Params');
});
console.log(nToShow);
/* 2.2 Display modules */
node.nodes_cond.forEach(function(n) {
if (!all && nToShow.indexOf(n.id) == -1) {

@ -108,14 +108,14 @@
if (!button.action) button.action = button.title;
//try {
switch (typeof button.action) {
case 'function':
button.action($scope.currentNode, $scope);
break;
case 'string':
$scope[button.action]();
break;
default:
console.log(typeof button.action);
case 'function':
button.action($scope.currentNode, $scope);
break;
case 'string':
$scope[button.action]();
break;
default:
console.log(typeof button.action);
};
//} catch (e) {
// alert("Error: " + e.message);
@ -173,7 +173,8 @@
$scope.waiting = false;
$scope.data.pop();
})
}, function() {
},
function() {
console.log('Saving canceled');
});
$scope.showM = false;
@ -196,16 +197,27 @@
$scope.cancel = function() {
$scope.currentNode.data = null;
$scope.getKey($scope.currentNode);
}
};
var id = 1;
$scope._findContainer = function() {
return $scope._findScopeContainer().$modelValue;
};
$scope._findScopeContainer = function() {
var cs = $scope.currentScope;
while (!cs.$modelValue.type.match(/Container$/)) {
cs = cs.$parentNodeScope;
}
return cs.$modelValue;
return cs;
};
$scope._findScopeByKey = function(k) {
var cs = $scope.currentScope;
while (! (cs.$modelValue.title === k)) {
cs = cs.$parentNodeScope;
}
return cs;
}
/* Add rules entry */
@ -240,9 +252,10 @@
node.nodes.push({
"id": node.id + '/n' + (id++),
"title": "1-key",
"data": ['LDAP','LDAP','Null'],
"data": ['Null', 'Null', 'Null'],
"type": "authChoice"
});
$scope.execFilters($scope._findScopeByKey('authParams'));
};
/* Add hash entry */
@ -315,26 +328,22 @@
$scope.addSamlIDP = function() {
var name = window.prompt($translator.translate('samlPartnerName'));
if (name)
$scope.addTemplateNode(name, 'samlIDPMetaDataNode');
if (name) $scope.addTemplateNode(name, 'samlIDPMetaDataNode');
};
$scope.addSamlSP = function() {
var name = window.prompt($translator.translate('samlPartnerName'));
if (name)
$scope.addTemplateNode(name, 'samlSPMetaDataNode');
if (name) $scope.addTemplateNode(name, 'samlSPMetaDataNode');
};
$scope.addOidcOp = function() {
var name = window.prompt($translator.translate('oidcOPName'));
if (name)
$scope.addTemplateNode(name, 'oidcOPMetaDataNode');
if (name) $scope.addTemplateNode(name, 'oidcOPMetaDataNode');
};
$scope.addOidcRp = function() {
var name = window.prompt($translator.translate('oidcRPName'));
if (name)
$scope.addTemplateNode(name, 'oidcRPMetaDataNode');
if (name) $scope.addTemplateNode(name, 'oidcRPMetaDataNode');
};
$scope.addTemplateNode = function(name, type) {
@ -420,10 +429,11 @@
/* authParams mechanism: show used auth modules only (launched by stoggle) */
$scope.filters = {};
$scope.execFilters = function() {
$scope.execFilters = function(scope) {
scope = scope ? scope : $scope;
for (var filter in $scope.filters) {
if ($scope.filters.hasOwnProperty(filter)) {
filterFunctions[filter]($scope, $q, $scope.filters[filter]);
filterFunctions[filter](scope, $q, $scope.filters[filter]);
}
}
};
@ -481,8 +491,10 @@
d.reject('Empty response from server');
} else if (data.error) {
if (data.error == 'setDefault') {
if (node.default) {
node.nodes = node.default.slice(0);
if (node.
default) {
node.nodes = node.
default.slice(0);
} else node.nodes = [];
delete node.cnodes;
d.resolve('Set data to default value');
@ -515,7 +527,8 @@
$scope.openCnode = function(scope) {
$scope.download(scope).then(function() {
scope.toggle();
}, function(reason) {
},
function(reason) {
if (typeof reason == 'string') {
alert(reason);
}
@ -552,7 +565,8 @@
f = 'text';
}
if (node.nodes || node._nodes || node.cnodes) {
$scope.form = f != 'text' ? f : 'home';
$scope.form = f != 'text' ? f:
'home';
} else {
$scope.form = f;
/* Get datas */
@ -591,7 +605,8 @@
}).error(function(j, e) {
$scope.waiting = false;
});
}, function() {
},
function() {
console.log('New key cancelled');
});
}
@ -632,15 +647,18 @@
};
$q.all(tmp).then(function() {
d.resolve(node.data);
}, function(j, e) {
},
function(j, e) {
d.reject(e);
$scope.waiting = false;
});
} else {
$http.get($scope.confPrefix + $scope.currentCfg.cfgNum + '/' + (node.get ? node.get : node.title)).success(function(data) {
/* Set default value if response is null or if asked by server */
if ((data.value === null || (data.error && data.error == 'setDefault')) && node.default !== null) {
node.data = node.default;
if ((data.value === null || (data.error && data.error == 'setDefault')) && node.
default !== null) {
node.data = node.
default;
} else {
node.data = data.value;
}
@ -664,7 +682,6 @@
return d.promise;
};
/* function `pathEvent(event, next; current)`:
* Called when $location.path() change, launch getCfg() with the new
* configuration number
@ -722,22 +739,20 @@
$scope.waiting = true;
$scope.data = [];
$q.all([
$translator.init($scope.lang),
$http.get(staticPrefix + "struct.json").success(function(data) {
tmp = data;
console.log("Structure loaded");
})
])
.then(function() {
console.log("Starting structure binding");
$scope.data = tmp;
tmp = null;
setScopeVars($scope);
$scope.form = 'home';
$scope.waiting = false;
}, function(j, e) {
$scope.waiting = false;
});
$translator.init($scope.lang), $http.get(staticPrefix + "struct.json").success(function(data) {
tmp = data;
console.log("Structure loaded");
})]).then(function() {
console.log("Starting structure binding");
$scope.data = tmp;
tmp = null;
setScopeVars($scope);
$scope.form = 'home';
$scope.waiting = false;
},
function(j, e) {
$scope.waiting = false;
});
};
var c = $location.path().match(new RegExp('^/confs/(latest|[0-9]+)'));
if (!c) {

Loading…
Cancel
Save