Merge branch 'develop' of git.znuny.com:zammad/zammad into develop

This commit is contained in:
Martin Edenhofer 2017-05-30 08:36:39 +02:00
commit 2fe0b19a3d
6 changed files with 58 additions and 20 deletions

View file

@ -61,8 +61,15 @@ class Form extends App.Controller
render: (top = false) => render: (top = false) =>
@config = @currentConfig() @config = @currentConfig()
group_role_map = {}
for source, dests of @config.group_role_map
group_role_map[source] = dests.map((dest) ->
App.Role.find(dest).displayName()
).join ', '
@html App.view('integration/ldap')( @html App.view('integration/ldap')(
config: @config config: @config,
group_role_map: group_role_map
) )
if _.isEmpty(@config) if _.isEmpty(@config)
@$('.js-notConfigured').removeClass('hide') @$('.js-notConfigured').removeClass('hide')
@ -419,7 +426,9 @@ class ConnectionWizard extends App.WizardModal
length = group_role_map.source.length-1 length = group_role_map.source.length-1
for count in [0..length] for count in [0..length]
if group_role_map.source[count] && group_role_map.dest[count] if group_role_map.source[count] && group_role_map.dest[count]
group_role_map_local[group_role_map.source[count]] = group_role_map.dest[count] if !_.isArray(group_role_map_local[group_role_map.source[count]])
group_role_map_local[group_role_map.source[count]] = []
group_role_map_local[group_role_map.source[count]].push group_role_map.dest[count]
@wizardConfig.group_role_map = group_role_map_local @wizardConfig.group_role_map = group_role_map_local
expertSettings = @formParam(@expertForm) expertSettings = @formParam(@expertForm)
@ -454,8 +463,9 @@ class ConnectionWizard extends App.WizardModal
buildRowsGroupRole: (group_role_map) => buildRowsGroupRole: (group_role_map) =>
el = [] el = []
for source, dest of group_role_map for source, dests of group_role_map
el.push @buildRowGroupRole(source, dest) for dest in dests
el.push @buildRowGroupRole(source, dest)
el el
buildRowGroupRole: (source, dest) => buildRowGroupRole: (source, dest) =>

View file

@ -64,7 +64,7 @@
<% end %> <% end %>
<h3><%- @T('Role') %></h3> <h3><%- @T('Role') %></h3>
<% if _.isEmpty(@config.group_role_map): %> <% if _.isEmpty(@group_role_map): %>
<table class="settings-list settings-list--stretch settings-list--placeholder"> <table class="settings-list settings-list--stretch settings-list--placeholder">
<thead><tr><th><%- @T('No Entries') %> <thead><tr><th><%- @T('No Entries') %>
</table> </table>
@ -75,10 +75,10 @@
<th width="40%"><%- @T('LDAP') %> <th width="40%"><%- @T('LDAP') %>
<th width="60%"><%- @T('Zammad') %> <th width="60%"><%- @T('Zammad') %>
<tbody> <tbody>
<% for key, value of @config.group_role_map: %> <% for source, dests of @group_role_map: %>
<tr> <tr>
<td class="settings-list-row-control"><%= key %> <td class="settings-list-row-control"><%= source %>
<td class="settings-list-row-control"><%= App.Role.find(value).displayName() %> <td class="settings-list-row-control"><%= dests %>
<% end %> <% end %>
<% end %> <% end %>
</table> </table>

View file

@ -0,0 +1,24 @@
class LdapMultiGroupMapping < ActiveRecord::Migration
def up
# return if it's a new setup
return if !Setting.find_by(name: 'system_init_done')
# load existing LDAP config
ldap_config = Setting.get('ldap_config')
# exit early if no config is present
return if ldap_config.blank?
return if ldap_config['group_role_map'].blank?
# loop over group role mapping and check
# if we need to migrate to new array structure
ldap_config['group_role_map'].each do |source, dest|
next if dest.is_a?(Array)
ldap_config['group_role_map'][source] = [dest]
end
# store updated
Setting.set('ldap_config', ldap_config)
end
end

View file

@ -85,16 +85,19 @@ class Ldap
members = entry[:member] members = entry[:member]
next if members.blank? next if members.blank?
role = mapping[entry.dn.downcase] roles = mapping[entry.dn.downcase]
next if role.blank? next if roles.blank?
role = role.to_i
members.each do |user_dn| members.each do |user_dn|
user_dn_key = user_dn.downcase user_dn_key = user_dn.downcase
result[user_dn_key] ||= [] roles.each do |role|
next if result[user_dn_key].include?(role) role = role.to_i
result[user_dn_key].push(role)
result[user_dn_key] ||= []
next if result[user_dn_key].include?(role)
result[user_dn_key].push(role)
end
end end
end end

View file

@ -35,7 +35,7 @@ RSpec.describe Import::Ldap::UserFactory do
# group user role mapping # group user role mapping
expect(mocked_ldap).to receive(:search) expect(mocked_ldap).to receive(:search)
# user counting # user counting
expect(mocked_ldap).to receive(:count).and_return(1) allow(mocked_ldap).to receive(:count).and_return(1)
# user search # user search
expect(mocked_ldap).to receive(:search).and_yield(mocked_entry) expect(mocked_ldap).to receive(:search).and_yield(mocked_entry)
@ -201,7 +201,7 @@ RSpec.describe Import::Ldap::UserFactory do
config = { config = {
group_filter: '(objectClass=group)', group_filter: '(objectClass=group)',
group_role_map: { group_role_map: {
group_dn => '1', group_dn => %w(1 2),
} }
} }
@ -219,7 +219,7 @@ RSpec.describe Import::Ldap::UserFactory do
) )
expected = { expected = {
user_dn => [1] user_dn => [1, 2]
} }
expect(user_roles).to be_a(Hash) expect(user_roles).to be_a(Hash)

View file

@ -29,7 +29,8 @@ RSpec.describe Import::Ldap::User do
let(:user_roles) do let(:user_roles) do
{ {
user_entry.dn => [ user_entry.dn => [
Role.find_by(name: 'Admin').id Role.find_by(name: 'Admin').id,
Role.find_by(name: 'Agent').id
] ]
} }
end end
@ -90,8 +91,8 @@ RSpec.describe Import::Ldap::User do
# gets called later it will get initialized # gets called later it will get initialized
# with the changed dn # with the changed dn
user_roles[ user_entry.dn ] = [ user_roles[ user_entry.dn ] = [
Role.find_by(name: 'Agent').id, Role.find_by(name: 'Admin').id,
Role.find_by(name: 'Admin').id Role.find_by(name: 'Agent').id
] ]
# change dn so no mapping will match # change dn so no mapping will match