Author: olamy
Date: Mon Mar 4 17:14:51 2013
New Revision: 1452404
URL: http://svn.apache.org/r1452404
Log:
[MRM-1736] map roles to ldap groups
ui to add mappings
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js?rev=1452404&r1=1452403&r2=1452404&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/archiva/general-admin.js
Mon Mar 4 17:14:51 2013
@@ -1390,24 +1390,6 @@ define("archiva.general-admin",["jquery"
this.allRoleNames=[];
- self.gridViewModel = new ko.simpleGrid.viewModel({
- data: self.redbackRuntimeConfiguration().configurationPropertiesEntries,
- columns: [
- {
- headerText: $.i18n.prop('redback.runtime.properties.key.label'),
- rowText: "key"
- },
- {
- headerText: $.i18n.prop('redback.runtime.properties.value.label'),
- rowText: "value"
- }
- ],
- pageSize: 10,
- gridUpdateCallBack: function(){
- activatePopoverDoc();
- }
- });
-
findUserManagerImplementationInformation=function(id){
for(var i= 0;i<self.userManagerImplementationInformations().length;i++){
$.log(id+""+self.userManagerImplementationInformations()[i].beanId);
@@ -1712,14 +1694,111 @@ define("archiva.general-admin",["jquery"
self.modifiesLdapGroupMappings().push(ldapGroupMapping);
}
$.log('modifyLdapGroupMapping:'+ldapGroupMapping.group()+','+self.modifiesLdapGroupMappings().length);
+ //$("#ldap-group-mappings-div select" ).select2({width: "element"});
};
+ //olamy could be better but some reason doesn't work and I didn't find
enough to understand why :-)
+ /*self.gridldapMappingsViewModel = new ko.simpleGrid.viewModel({
+ data: self.redbackRuntimeConfiguration().ldapGroupMappings,
+ pageSize: 10,
+ gridUpdateCallBack: function(){
+ $.log("ldapGroupsMapping: gridUpdateCallBack");
+ $("#main-content").find("#ldap-group-mappings-div select"
).select2({width: "element"});
+ }
+ });*/
+
+ self.gridViewModel = new ko.simpleGrid.viewModel({
+ data: self.redbackRuntimeConfiguration().configurationPropertiesEntries,
+ columns: [
+ {
+ headerText: $.i18n.prop('redback.runtime.properties.key.label'),
+ rowText: "key"
+ },
+ {
+ headerText: $.i18n.prop('redback.runtime.properties.value.label'),
+ rowText: "value"
+ }
+ ],
+ pageSize: 10,
+ gridUpdateCallBack: function(){
+ activatePopoverDoc();
+ }
+ });
+
+ this.newLdapGroupMapping=ko.observable(new
LdapGroupMapping("",[],false,self.modifyLdapGroupMapping));
addLdapGroupMapping=function(){
- $.log("addLdapGroupMapping");
- self.redbackRuntimeConfiguration().ldapGroupMappings.push(new
LdapGroupMapping("",[],false,self.modifyLdapGroupMapping));
- $("#ldap-group-mappings-div select" ).select2({width: "element"});
+ // FIXME validate datas from ldapGroupMapping
+ $.log("addLdapGroupMapping:"+self.newLdapGroupMapping().group());
+
+ var mainContent=$("#main-content");
+ var saveButton = mainContent.find("#redback-runtime-configuration-save"
);
+ saveButton.button('loading');
+ clearUserMessages();
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+ $.ajax("restServices/redbackServices/ldapGroupMappingService",
+ {
+ type: "PUT",
+ contentType: 'application/json',
+ data:ko.toJSON(new
LdapGroupMapping(self.newLdapGroupMapping().group(),self.newLdapGroupMapping().roleNames(),false,self.modifyLdapGroupMapping)),
+ dataType: 'json',
+ success: function(data) {
+ self.redbackRuntimeConfiguration().ldapGroupMappings
+ .unshift(new
LdapGroupMapping(self.newLdapGroupMapping().group(),self.newLdapGroupMapping().roleNames(),false,self.modifyLdapGroupMapping));
+ self.newLdapGroupMapping=ko.observable(new
LdapGroupMapping("",[],false,self.modifyLdapGroupMapping));
+
$.log("addLdapGroupMapping:"+self.redbackRuntimeConfiguration().ldapGroupMappings().length);
+ $("#ldap-group-mappings-div select" ).select2({width:
"element"});
+ var
message=$.i18n.prop('redback-runtime-ldap-group-mapping.added');
+ displaySuccessMessage(message);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ }
+ }
+ ).always(
+ function(){
+ removeMediumSpinnerImg(userMessages);
+ saveButton.button('reset');
+ }
+ );
+
+
}
+ deleteLdapGroupMapping=function(ldapGroupMapping){
+
+
+ var mainContent=$("#main-content");
+ var saveButton = mainContent.find("#redback-runtime-configuration-save"
);
+ saveButton.button('loading');
+ clearUserMessages();
+ var userMessages=$("#user-messages");
+ userMessages.html(mediumSpinnerImg());
+
$.ajax("restServices/redbackServices/ldapGroupMappingService/"+ldapGroupMapping.group(),
+ {
+ type: "DELETE",
+ contentType: 'application/json',
+ dataType: 'json',
+ success: function(data) {
+ $.log("deleteLdapGroupMapping:"+ldapGroupMapping.group());
+
self.redbackRuntimeConfiguration().ldapGroupMappings.remove(ldapGroupMapping);
+ $("#ldap-group-mappings-div select" ).select2({width:
"element"});
+ var
message=$.i18n.prop('redback-runtime-ldap-group-mapping.deleted');
+ displaySuccessMessage(message);
+ },
+ error: function(data) {
+ var res = $.parseJSON(data.responseText);
+ displayRestError(res);
+ }
+ }
+ ).always(
+ function(){
+ removeMediumSpinnerImg(userMessages);
+ saveButton.button('reset');
+ }
+ );
+ }
}
ManagerImplementationInformation=function(beanId,descriptionKey,readOnly){
@@ -1890,6 +1969,7 @@ define("archiva.general-admin",["jquery"
redbackRuntimeConfigurationViewModel.redbackRuntimeConfiguration().modified(false);
$("#main-content").html( $("#redback-runtime-configuration-main" ).tmpl()
);
+
$.log("applyBindings:#redback-runtime-configuration-content:"+redbackRuntimeConfigurationViewModel.redbackRuntimeConfiguration().ldapGroupMappings().length);
ko.applyBindings(redbackRuntimeConfigurationViewModel,$("#redback-runtime-configuration-content"
).get(0));
activateRedbackRuntimeGeneralFormValidation();
activateLdapConfigurationFormValidation();
@@ -1897,7 +1977,6 @@ define("archiva.general-admin",["jquery"
}
LdapGroupMapping=function(group,roleNames,automatic,subscribeFn){
- $.log("new LdapGroupMapping");
var self=this;
this.modified=ko.observable(false);
//private String group;
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js?rev=1452404&r1=1452403&r2=1452404&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/knockout.simpleGrid.js
Mon Mar 4 17:14:51 2013
@@ -32,7 +32,9 @@
this.itemsOnCurrentPage = ko.computed(function () {
var startIndex = this.pageSize * this.currentPageIndex();
- return this.data.slice(startIndex, startIndex + this.pageSize);
+ var items = this.data.slice(startIndex, startIndex + this.pageSize);
+ //$.log("itemsOnCurrentPage:"+items.length);
+ return items;
}, this);
this.maxPageIndex = ko.computed(function () {
Modified:
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
URL:
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html?rev=1452404&r1=1452403&r2=1452404&view=diff
==============================================================================
---
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
(original)
+++
archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/webapp/js/templates/archiva/general-admin.html
Mon Mar 4 17:14:51 2013
@@ -1150,7 +1150,6 @@
</div>
<div class="tab-pane" id="redback-runtime-properties-content">
-
<div class="well">
<table id="propertiesTable" class="table-hover"
data-bind="simpleGrid:
gridViewModel,simpleGridTemplate:'properties-grid',pageLinksId:'properties-grid-pagination'">
@@ -1248,10 +1247,28 @@
</script>
-<script id="redback-runtime-general-content-impl-informations"
type="text/html">
- <div class="well draggable-item">
- ${$data.description}
- </div>
+<script id="redback-runtime-ldap-mapping-grid" type="text/html">
+ <thead>
+ <tr>
+ <th>${$.i18n.prop('redback.runtime.ldap.mapping.group.label')}</th>
+ <th>${$.i18n.prop('redback.runtime.ldap.mapping.roles.label')}</th>
+ </tr>
+ </thead>
+ <tbody id="ldap-group-mappings-tbody">
+
+ {{each(i, ldapGroupMapping) itemsOnCurrentPage()}}
+ <tr>
+ <td>${ldapGroupMapping.group()}
+ <select id="roles-group-${ldapGroupMapping.group()}"
data-bind="options: ldapGroups, value: ldapGroupMapping.group, optionsCaption:
'Select a LDAP Group'"
+ size="1"></select>
+ </td>
+ <td>
+ <select id="roles-group-mapping-${ldapGroupMapping.group()}"
data-bind="options: $parent.allRoleNames, selectedOptions:
ldapGroupMapping.roleNames"
+ size="5" multiple="true" ></select>
+ </td>
+ </tr>
+ {{/each}}
+ </tbody>
</script>
<script id="redback-runtime-ldap-mapping-tmpl" type="text/html">
@@ -1259,16 +1276,36 @@
<table class="table table-condensed">
<thead>
<tr>
+ <th></th>
<th>${$.i18n.prop('redback.runtime.ldap.mapping.group.label')}</th>
<th>${$.i18n.prop('redback.runtime.ldap.mapping.roles.label')}</th>
</tr>
</thead>
<tbody id="ldap-group-mappings-tbody">
+ <tr>
+ <td>
+ <span class="btn btn-success">
+ <i class="icon-plus-sign icon-white" title="add mapping"
data-bind="click: function(){ addLdapGroupMapping() }"/>
+ </span>
+ </td>
+ <td>
+ <select data-bind="options: ldapGroups, optionsCaption: 'Select a
LDAP Group',value: $parent.newLdapGroupMapping().group" size="1">
+ </select>
+ </td>
+ <td>
+ <select data-bind="options: $parent.allRoleNames, selectedOptions:
$parent.newLdapGroupMapping().roleNames"
+ size="5" multiple="true" ></select>
+ </td>
+ </tr>
{{each(i, ldapGroupMapping) ldapGroupMappings()}}
<tr>
- <td>${ldapGroupMapping.group()}
- <select id="roles-group-${ldapGroupMapping.group()}"
data-bind="options: ldapGroups, value: ldapGroupMapping.group, optionsCaption:
'Select a LDAP Group'"
- size="1"></select>
+ <td>
+ <span class="btn btn-danger">
+ <i class="icon-minus-sign icon-white" title="remove mapping"
data-bind="click: function(){ deleteLdapGroupMapping(ldapGroupMapping)}"/>
+ </span>
+ </td>
+ <td>
+ ${ldapGroupMapping.group}
</td>
<td>
<select id="roles-group-mapping-${ldapGroupMapping.group()}"
data-bind="options: $parent.allRoleNames, selectedOptions:
ldapGroupMapping.roleNames"
@@ -1278,17 +1315,12 @@
{{/each}}
</tbody>
</table>
- <div>
- <span class="btn btn-success">
- <i class="icon-plus-sign icon-white" title="add mapping"
data-bind="click: function(){ addLdapGroupMapping() }"/>
- </span>
- <table class="table table-condensed">
- <tr>
- <td></td>
- <td></td>
- </tr>
- </table>
+
</div>
+</script>
+<script id="redback-runtime-general-content-impl-informations"
type="text/html">
+ <div class="well draggable-item">
+ ${$data.description}
</div>
</script>