wobauth 5.0.1 → 5.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0d5e1f219efe48cd29c469eb5d3ed59a25b1fc67475bfae58a264b0e7c99ad1a
4
- data.tar.gz: 8bdbdcfd1a077031af6b1877467adfa058ed08ab45f9dbe21e35948a12e9d6e9
3
+ metadata.gz: 9f5d6fe7d5bebfcd1023a7c22cadff30e5ded6bf2cf7e47836ca173d94086d14
4
+ data.tar.gz: c75d02e6d4fa63695cf712ca9d7a6abf6d0f40dbbd1062e23d73a1fc2ddeb57a
5
5
  SHA512:
6
- metadata.gz: a0c43642e78f30c47ea97a380079bc544c9bda95efa28a143a9c446bc140e42121e6e80c6e1a06675a44a2112ead2f4fa651b0c5e57a6e7f4222407e5a9e03a0
7
- data.tar.gz: fd817e4f7019a3fa07bdb8340f096fb307870ba7e8324df128b65596e5fc11b12a01683b1396d4e79fdbae6c3747da9a5c542c9b6498ecba9ddb4d608ab0680b
6
+ metadata.gz: 4e03e2f7b9d1c6adecfdc0cf6528366b6639ca47fb98fbb50e218555e0621be2d629d0554a35d2ea6394b6e1ca7ecfc1b56ac042a62dc331c7be9cd611d7d6c5
7
+ data.tar.gz: ca5306cbcfa4b708761770e8a698ed796e3852594244650b13bd0b1ca184ea8fc10dd4022b67686a287a2256f30623b0e04d1e8e3c547eabbc3994949dd2b9bb
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License (MIT)
2
2
 
3
- Copyright (c) 2014-2020 Wolfgang Barth
3
+ Copyright (c) 2014-2021 Wolfgang Barth
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -34,11 +34,17 @@ wobauth 5.x works with rails 6.x and is designed for autoloading via zeitwerk.
34
34
  Requirements
35
35
  ------------
36
36
 
37
+ ### Rails >= 6.0; autoload = :zeitwerk; webpacker; stimulusjs
38
+
39
+ | branch | rails | ruby | bootstrap | icons | wobapphelpers |
40
+ |------------|-------|--------|-----------|-----------------|---------------|
41
+ | 5-1-stable | >=6.0 | >= 2.6 | v4 | fontawesome 5.x | master (4.x) |
42
+
37
43
  ### Rails >= 6.0, autoload = :zeitwerk
38
44
 
39
45
  | branch | rails | ruby | bootstrap | icons | wobapphelpers |
40
46
  |------------|-------|--------|-----------|-----------------|---------------|
41
- | master(5.x)| >=6.0 | >= 2.6 | v4 | fontawesome 5.x | master (4.x) |
47
+ | 5-stable | >=6.0 | >= 2.6 | v4 | fontawesome 5.x | master (4.x) |
42
48
 
43
49
  ### Rails <= 5.2, autoload = :classic
44
50
 
@@ -181,7 +187,7 @@ included in this rails engine.
181
187
  Licence
182
188
  -------
183
189
 
184
- wobauth Copyright (C) 2014-2020 Wolfgang Barth
190
+ wobauth Copyright (C) 2014-2021 Wolfgang Barth
185
191
 
186
192
  MIT license, see [LICENSE](LICENSE)
187
193
 
@@ -4,14 +4,14 @@
4
4
 
5
5
  # - start with given values
6
6
  auth_types = $('#authority_authorizable_type').find("option:selected").val()
7
- $('#authority_authorizable_id optgroup').find('option').addBack().hide()
8
- $("#authority_authorizable_id optgroup[label=\"#{auth_types}\"]").find('option').addBack().show()
7
+ $('#authority_authorizable_id optgroup').find('option').addBack().attr("disabled", true)
8
+ $("#authority_authorizable_id optgroup[label=\"#{auth_types}\"]").find('option').addBack().attr("disabled", false)
9
9
 
10
10
  # - redisplay on change
11
11
  $(document).on('click', '#authority_authorizable_type', ->
12
12
  type = $(this).find("option:selected").val()
13
- $('#authority_authorizable_id optgroup').find('option').addBack().hide()
14
- $("#authority_authorizable_id optgroup[label=\"#{type}\"]").find('option').addBack().show()
13
+ $('#authority_authorizable_id optgroup').find('option').addBack().attr("disabled", true)
14
+ $("#authority_authorizable_id optgroup[label=\"#{type}\"]").find('option').addBack().attr("disabled", false)
15
15
  )
16
16
 
17
17
  #
@@ -20,12 +20,12 @@ $(document).on('click', '#authority_authorizable_type', ->
20
20
 
21
21
  # - start with given values
22
22
  authfor_type = $('#authority_authorized_for_type').find("option:selected").val()
23
- $('#authority_authorized_for_id optgroup').find('option').addBack().hide()
24
- $("#authority_authorized_for_id optgroup[label=\"#{authfor_type}\"]").find('option').addBack().show()
23
+ $('#authority_authorized_for_id optgroup').find('option').addBack().attr("disabled", true)
24
+ $("#authority_authorized_for_id optgroup[label=\"#{authfor_type}\"]").find('option').addBack().attr("disabled", false)
25
25
 
26
26
  # - redisplay on change
27
27
  $(document).on('click', '#authority_authorized_for_type', ->
28
28
  type = $(this).find("option:selected").val()
29
- $('#authority_authorized_for_id optgroup').find('option').addBack().hide()
30
- $("#authority_authorized_for_id optgroup[label=\"#{type}\"]").find('option').addBack().show()
29
+ $('#authority_authorized_for_id optgroup').find('option').addBack().attr("disabled", true)
30
+ $("#authority_authorized_for_id optgroup[label=\"#{type}\"]").find('option').addBack().attr("disabled", false)
31
31
  )
@@ -1,19 +1,7 @@
1
1
  module Wobauth
2
2
  module ApplicationHelper
3
3
  include Wobapphelpers::Helpers::All
4
-
5
- def polymorphic_selector(form, poly, types, group_method = :all)
6
- msg = ""
7
- # -- object available?
8
- if form.object.send(poly).present?
9
- msg += poly_type_display(form, poly)
10
- msg += poly_id_select(form, poly, form.object.send("#{poly}_type"), :all)
11
- else
12
- msg += poly_type_select(form, poly, types)
13
- msg += poly_id_select(form, poly, types, group_method)
14
- end
15
- msg.html_safe
16
- end
4
+ include Wobapphelpers::Helpers::PolymorphicHelper
17
5
 
18
6
  def navigation_admin_links
19
7
  render partial: 'wobauth/shared/admin'
@@ -29,25 +17,5 @@ module Wobauth
29
17
  end
30
18
  end
31
19
 
32
- private
33
-
34
- def poly_type_select(f, poly, types)
35
- f.input "#{poly}_type".to_sym, collection: types,
36
- label_method: lambda {|x| t('activerecord.models.' + x.underscore)}
37
- end
38
-
39
- def poly_type_display(f, poly)
40
- f.input("#{poly}_type".to_sym, collection: Array(f.object.send("#{poly}_type")),
41
- label_method: lambda {|x| t('activerecord.models.' + x.underscore)},
42
- disabled: true) +
43
- f.hidden_field("#{poly}_type".to_sym, value: f.object.send("#{poly}_type"))
44
- end
45
-
46
- def poly_id_select(f, poly, types, group_method)
47
- collections = Array(types).map {|t| t.constantize}
48
- f.input "#{poly}_id".to_sym, collection: collections,
49
- as: :grouped_select, group_method: group_method
50
- end
51
-
52
20
  end
53
21
  end
@@ -17,17 +17,27 @@ module Wobauth
17
17
  return Result.new(success: false, error_messages: ["no query given"], ad_users: [])
18
18
  end
19
19
 
20
- ldap = Wobaduser::LDAP.new(ldap_options: ldap_options)
21
- if ldap.errors.any?
22
- return Result.new(success: false, error_messages: ldap.errors, ad_users: [])
20
+ errors = []
21
+ ad_users = []
22
+ ldap_options.each do |ldapopts|
23
+ ldap = Wobaduser::LDAP.new(ldap_options: ldapopts)
24
+ if ldap.errors.any?
25
+ errors += ldap.errors
26
+ next
27
+ end
28
+ search = Wobaduser::User.search(ldap: ldap, filter: user_filter(query))
29
+ if search.success?
30
+ ad_users += search.entries
31
+ else
32
+ errors += search.errors
33
+ end
23
34
  end
24
35
 
25
- search = Wobaduser::User.search(ldap: ldap, filter: user_filter(query))
26
- if search.success?
27
- result = Result.new(success: true, error_messages: [], ad_users: search.entries)
36
+ if errors.any?
37
+ return Result.new(success: false, error_messages: errors, ad_users: ad_users)
28
38
  else
29
- result = Result.new(success: false, error_messages: search.errors, ad_users: [])
30
- end
39
+ result = Result.new(success: true, error_messages: errors, ad_users: ad_users)
40
+ end
31
41
  end
32
42
 
33
43
  private
@@ -50,5 +60,13 @@ module Wobauth
50
60
  filter += ")"
51
61
  filter = Net::LDAP::Filter.construct(filter)
52
62
  end
63
+
64
+ def ldap_options
65
+ if @ldap_options.kind_of? Hash
66
+ [@ldap_options]
67
+ else
68
+ @ldap_options
69
+ end
70
+ end
53
71
  end
54
- end
72
+ end
@@ -11,59 +11,65 @@
11
11
  </div>
12
12
  <br>
13
13
 
14
- <table id="adusers" class="table table-bordered table-striped dataTable" role="datatable">
15
- <thead>
16
- <tr>
17
- <th><%= t('attributes.sn') %></th>
18
- <th><%= t('attributes.givenname') %></th>
19
- <th><%= t('attributes.ort') %></th>
20
- <th><%= t('attributes.plz') %></th>
21
- <th><%= t('attributes.streetaddress') %></th>
22
- <th><%= t('attributes.department') %></th>
23
- <th><%= t('attributes.company') %></th>
24
- <th><%= t('attributes.mail') %></th>
25
- <th><%= t('attributes.telephonenumber') %></th>
26
- <th><%= t('attributes.facsimiletelephonenumber') %></th>
27
- <th><%= t('attributes.mobile') %></th>
28
- <th><%= t('attributes.username') %></th>
29
- <th><%= t('wobauth.action') %></th>
30
- </tr>
31
- </thead>
32
- <tfoot>
33
- <tr>
34
- <th></th>
35
- <th></th>
36
- <th></th>
37
- <th></th>
38
- <th></th>
39
- <th></th>
40
- <th></th>
41
- <th></th>
42
- <th></th>
43
- <th></th>
44
- <th></th>
45
- <th></th>
46
- <th></th>
47
- </tr>
48
- </tfoot>
14
+ <div data-controller="datatables">
15
+ <%= content_tag :table, id: :adusers, role: :woauth_datatable,
16
+ class: "table table-bordered table-striped",
17
+ data: {
18
+ target: 'datatables.datatable',
19
+ } do %>
20
+ <thead>
21
+ <tr>
22
+ <th><%= t('attributes.sn') %></th>
23
+ <th><%= t('attributes.givenname') %></th>
24
+ <th><%= t('attributes.ort') %></th>
25
+ <th><%= t('attributes.plz') %></th>
26
+ <th><%= t('attributes.streetaddress') %></th>
27
+ <th><%= t('attributes.department') %></th>
28
+ <th><%= t('attributes.company') %></th>
29
+ <th><%= t('attributes.mail') %></th>
30
+ <th><%= t('attributes.telephonenumber') %></th>
31
+ <th><%= t('attributes.facsimiletelephonenumber') %></th>
32
+ <th><%= t('attributes.mobile') %></th>
33
+ <th><%= t('attributes.username') %></th>
34
+ <th><%= t('wobauth.action') %></th>
35
+ </tr>
36
+ </thead>
37
+ <tfoot>
38
+ <tr>
39
+ <th></th>
40
+ <th></th>
41
+ <th></th>
42
+ <th></th>
43
+ <th></th>
44
+ <th></th>
45
+ <th></th>
46
+ <th></th>
47
+ <th></th>
48
+ <th></th>
49
+ <th></th>
50
+ <th></th>
51
+ <th></th>
52
+ </tr>
53
+ </tfoot>
49
54
 
50
- <tbody>
51
- <% @ad_users.each do |ad_user| %>
52
- <%= content_tag(:tr, class: aduser_class(Wobauth::User, ad_user)) do %>
53
- <td><%= ad_user.sn %></td>
54
- <td><%= ad_user.givenname %></td>
55
- <td><%= ad_user.l %></td>
56
- <td><%= ad_user.postalcode %></td>
57
- <td><%= ad_user.streetaddress %></td>
58
- <td><%= ad_user.department %></td>
59
- <td><%= ad_user.company %></td>
60
- <td><%= ad_user.mail %></td>
61
- <td><%= ad_user.telephonenumber %></td>
62
- <td><%= ad_user.facsimiletelephonenumber %></td>
63
- <td><%= ad_user.mobile %></td>
64
- <td><%= ad_user.username %></td>
65
- <td><%= new_from_aduser_link(Wobauth::User, ad_user) %></td>
55
+ <tbody>
56
+ <% @ad_users.each do |ad_user| %>
57
+ <%= content_tag(:tr, class: aduser_class(Wobauth::User, ad_user)) do %>
58
+ <td><%= ad_user.sn %></td>
59
+ <td><%= ad_user.givenname %></td>
60
+ <td><%= ad_user.l %></td>
61
+ <td><%= ad_user.postalcode %></td>
62
+ <td><%= ad_user.streetaddress %></td>
63
+ <td><%= ad_user.department %></td>
64
+ <td><%= ad_user.company %></td>
65
+ <td><%= ad_user.mail %></td>
66
+ <td><%= ad_user.telephonenumber %></td>
67
+ <td><%= ad_user.facsimiletelephonenumber %></td>
68
+ <td><%= ad_user.mobile %></td>
69
+ <td><%= ad_user.username %></td>
70
+ <td><%= new_from_aduser_link(Wobauth::User, ad_user) %></td>
71
+ <% end %>
66
72
  <% end %>
67
- <% end %>
68
- </tbody>
69
- </table>
73
+ </tbody>
74
+ <% end %>
75
+ </div>
@@ -11,12 +11,16 @@
11
11
  <%= polymorphic_selector(f,
12
12
  'authorizable',
13
13
  Wobauth.authorizable_types,
14
- Wobauth.authorizable_group_method) %>
14
+ Wobauth.authorizable_group_method,
15
+ {class: 'select2'})
16
+ %>
15
17
  <%= f.association :role %>
16
18
  <%= polymorphic_selector(f,
17
19
  'authorized_for',
18
20
  Wobauth.authorized_for_types,
19
- Wobauth.authorized_for_group_method) %>
21
+ Wobauth.authorized_for_group_method,
22
+ {class: 'select2'})
23
+ %>
20
24
 
21
25
  <%= f.input :valid_from, as: :string, class: 'datepicker'
22
26
  %>
@@ -1,40 +1,45 @@
1
1
  <h1><%= t('controller.wobauth/authorities') %></h1>
2
2
 
3
- <%= content_tag :table, id: :wobauth_authorities, role: :wobauth_datatable,
4
- class: "table table-bordered table-striped dataTable" do %>
5
- <thead>
6
- <tr>
7
- <th><%= t('attributes.authorizable') %></th>
8
- <th><%= t('attributes.authorizable_type') %></th>
9
- <th><%= t('attributes.role') %></th>
10
- <th><%= t('attributes.authorized_for') %></th>
11
- <th><%= t('attributes.authorized_for_type') %></th>
12
- <th><%= t('attributes.valid_from') %></th>
13
- <th><%= t('attributes.valid_until') %></th>
14
- <th><%= t('wobauth.action') %></th>
15
- </tr>
16
- </thead>
17
- <tbody>
3
+ <div data-controller="datatables">
4
+ <%= content_tag :table, id: :wobauth_authorities, role: :wobauth_datatable,
5
+ class: "table table-bordered table-striped",
6
+ data: {
7
+ target: 'datatables.datatable',
8
+ } do %>
18
9
 
19
- <% @authorities.each do |authority| %>
20
- <%= content_tag_for(:tr, authority) do %>
21
- <td><%= authority.authorizable %></td>
22
- <td><%= authority.authorizable_type %></td>
23
- <td><%= authority.role %></td>
24
- <td><%= authority.authorized_for %></td>
25
- <td><%= authority.authorized_for_type %></td>
26
- <td><%= authority.valid_from %></td>
27
- <td><%= authority.valid_until %></td>
28
- <td class="nowrap">
29
- <%= show_link [wobauth, authority] %>
30
- <%= edit_link [wobauth, authority] %>
31
- <%= delete_link [wobauth, authority] %>
32
- </td>
33
- <% end %>
34
- <% end %>
35
- </tbody>
36
- <% end %>
10
+ <thead>
11
+ <tr>
12
+ <th><%= t('attributes.authorizable') %></th>
13
+ <th><%= t('attributes.authorizable_type') %></th>
14
+ <th><%= t('attributes.role') %></th>
15
+ <th><%= t('attributes.authorized_for') %></th>
16
+ <th><%= t('attributes.authorized_for_type') %></th>
17
+ <th><%= t('attributes.valid_from') %></th>
18
+ <th><%= t('attributes.valid_until') %></th>
19
+ <th><%= t('wobauth.action') %></th>
20
+ </tr>
21
+ </thead>
22
+ <tbody>
37
23
 
24
+ <% @authorities.each do |authority| %>
25
+ <%= content_tag(:tr, dom_id(authority)) do %>
26
+ <td><%= authority.authorizable %></td>
27
+ <td><%= authority.authorizable_type %></td>
28
+ <td><%= authority.role %></td>
29
+ <td><%= authority.authorized_for %></td>
30
+ <td><%= authority.authorized_for_type %></td>
31
+ <td><%= authority.valid_from %></td>
32
+ <td><%= authority.valid_until %></td>
33
+ <td class="nowrap">
34
+ <%= show_link [wobauth, authority] %>
35
+ <%= edit_link [wobauth, authority] %>
36
+ <%= delete_link [wobauth, authority] %>
37
+ </td>
38
+ <% end %>
39
+ <% end %>
40
+ </tbody>
41
+ <% end %>
42
+ </div>
38
43
  <br />
39
44
 
40
45
  <%= back_link %>
@@ -3,33 +3,33 @@
3
3
  <h4><%= t('activerecord.models.wobauth/authority') %></h4>
4
4
  </div>
5
5
  <div class="card-body">
6
- <table class="table table-bordered table-hover autowidth">
6
+ <table class="table table-sm table-borderless">
7
7
  <tr>
8
- <th><%= t('attributes.authorizable')%>:</th>
8
+ <th class="w-25 text-right"><%= t('attributes.authorizable')%>:</th>
9
9
  <td><%= @authority.authorizable %></td>
10
10
  </tr>
11
11
  <tr>
12
- <th><%= t('attributes.authorizable_type')%>:</th>
12
+ <th class="w-25 text-right"><%= t('attributes.authorizable_type')%>:</th>
13
13
  <td><%= @authority.authorizable_type %></td>
14
14
  </tr>
15
15
  <tr>
16
- <th><%= t('attributes.role')%>:</th>
16
+ <th class="w-25 text-right"><%= t('attributes.role')%>:</th>
17
17
  <td><%= @authority.role %></td>
18
18
  </tr>
19
19
  <tr>
20
- <th><%= t('attributes.authorized_for')%>:</th>
20
+ <th class="w-25 text-right"><%= t('attributes.authorized_for')%>:</th>
21
21
  <td><%= @authority.authorized_for %></td>
22
22
  </tr>
23
23
  <tr>
24
- <th><%= t('attributes.authorized_for_type')%>:</th>
24
+ <th class="w-25 text-right"><%= t('attributes.authorized_for_type')%>:</th>
25
25
  <td><%= @authority.authorized_for_type %></td>
26
26
  </tr>
27
27
  <tr>
28
- <th><%= t('attributes.valid_from')%>:</th>
28
+ <th class="w-25 text-right"><%= t('attributes.valid_from')%>:</th>
29
29
  <td><%= @authority.valid_from %></td>
30
30
  </tr>
31
31
  <tr>
32
- <th><%= t('attributes.valid_until')%>:</th>
32
+ <th class="w-25 text-right"><%= t('attributes.valid_until')%>:</th>
33
33
  <td><%= @authority.valid_until %></td>
34
34
  </tr>
35
35
  </table>
@@ -8,7 +8,7 @@
8
8
  </thead>
9
9
  <tbody>
10
10
  <% group.memberships.each do |membership| %>
11
- <%= content_tag_for(:tr, membership) do %>
11
+ <%= content_tag(:tr, dom_id(membership)) do %>
12
12
  <td><%= link_to membership.user, wobauth.user_path(membership.user) %></td>
13
13
  <td><%= membership.auto %></td>
14
14
  <td class="nowrap">
@@ -9,7 +9,7 @@
9
9
  </thead>
10
10
  <tbody>
11
11
  <% group.authorities.each do |authority| %>
12
- <%= content_tag_for(:tr, authority) do %>
12
+ <%= content_tag(:tr, dom_id(authority)) do %>
13
13
  <td><%= link_to authority.role, wobauth.role_path(authority.role) %></td>
14
14
  <td><%= authorized_for_link(authority.authorized_for) %></td>
15
15
  <td><%= authority.authorized_for_type %></td>
@@ -1,29 +1,35 @@
1
1
  <h1><%= t('controller.wobauth/groups') %></h1>
2
2
 
3
- <%= content_tag :table, id: :wobauth_groups, role: :wobauth_datatable,
4
- class: "table table-bordered table-striped dataTable" do %>
5
- <thead>
6
- <tr>
7
- <th><%= t('attributes.name') %></th>
8
- <th><%= t('attributes.description') %></th>
9
- <th><%= t('wobauth.action') %></th>
10
- </tr>
11
- </thead>
12
- <tbody>
13
3
 
14
- <% @groups.each do |group| %>
15
- <%= content_tag_for(:tr, group) do %>
16
- <td><%= group.name %></td>
17
- <td><%= group.description %></td>
18
- <td class="nowrap">
19
- <%= show_link [wobauth, group] %>
20
- <%= edit_link [wobauth, group] %>
21
- <%= delete_link [wobauth, group] %>
22
- </td>
4
+ <div data-controller="datatables">
5
+ <%= content_tag :table, id: :wobauth_groups, role: :wobauth_datatable,
6
+ class: "table table-bordered table-striped",
7
+ data: {
8
+ target: 'datatables.datatable',
9
+ } do %>
10
+ <thead>
11
+ <tr>
12
+ <th><%= t('attributes.name') %></th>
13
+ <th><%= t('attributes.description') %></th>
14
+ <th><%= t('wobauth.action') %></th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+
19
+ <% @groups.each do |group| %>
20
+ <%= content_tag(:tr, dom_id(group)) do %>
21
+ <td><%= group.name %></td>
22
+ <td><%= group.description %></td>
23
+ <td class="nowrap">
24
+ <%= show_link [wobauth, group] %>
25
+ <%= edit_link [wobauth, group] %>
26
+ <%= delete_link [wobauth, group] %>
27
+ </td>
28
+ <% end %>
29
+ <% end %>
30
+ </tbody>
23
31
  <% end %>
24
- <% end %>
25
- </tbody>
26
- <% end %>
32
+ </div>
27
33
 
28
34
  <br />
29
35
 
@@ -1,31 +1,36 @@
1
1
  <h1><%= t('controller.wobauth/memberships') %></h1>
2
2
 
3
- <%= content_tag :table, id: :wobauth_memberships, role: :wobauth_datatable,
4
- class: "table table-bordered table-striped dataTable" do %>
5
- <thead>
6
- <tr>
7
- <th><%= t('attributes.user') %></th>
8
- <th><%= t('attributes.group') %></th>
9
- <th><%= t('attributes.auto') %></th>
10
- <th><%= t('wobauth.action') %></th>
11
- </tr>
12
- </thead>
13
- <tbody>
3
+ <div data-controller="datatables">
4
+ <%= content_tag :table, id: :wobauth_memberships, role: :wobauth_datatable,
5
+ class: "table table-bordered table-striped dataTable",
6
+ data: {
7
+ target: 'datatables.datatable',
8
+ } do %>
9
+ <thead>
10
+ <tr>
11
+ <th><%= t('attributes.user') %></th>
12
+ <th><%= t('attributes.group') %></th>
13
+ <th><%= t('attributes.auto') %></th>
14
+ <th><%= t('wobauth.action') %></th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
14
18
 
15
- <% @memberships.each do |membership| %>
16
- <%= content_tag_for(:tr, membership) do %>
17
- <td><%= membership.user %></td>
18
- <td><%= membership.group %></td>
19
- <td><%= membership.auto %></td>
20
- <td class="nowrap">
21
- <%= show_link [wobauth, membership] %>
22
- <%= edit_link [wobauth, membership] %>
23
- <%= delete_link [wobauth, membership] %>
24
- </td>
19
+ <% @memberships.each do |membership| %>
20
+ <%= content_tag(:tr, id: dom_id(membership)) do %>
21
+ <td><%= membership.user %></td>
22
+ <td><%= membership.group %></td>
23
+ <td><%= membership.auto %></td>
24
+ <td class="nowrap">
25
+ <%= show_link [wobauth, membership] %>
26
+ <%= edit_link [wobauth, membership] %>
27
+ <%= delete_link [wobauth, membership] %>
28
+ </td>
29
+ <% end %>
25
30
  <% end %>
26
- <% end %>
27
- </tbody>
28
- <% end %>
31
+ </tbody>
32
+ <% end %>
33
+ </div>
29
34
 
30
35
  <br />
31
36
 
@@ -3,17 +3,17 @@
3
3
  <h4><%= t('attributes.membership') %></h4>
4
4
  </div>
5
5
  <div class="card-body">
6
- <table class="table table-bordered table-hover autowidth">
6
+ <table class="table table-sm table-borderless ">
7
7
  <tr>
8
- <th><%= t('attributes.user')%>:</th>
8
+ <th class="w-25 text-right"><%= t('attributes.user')%>:</th>
9
9
  <td><%= @membership.user %></td>
10
10
  </tr>
11
11
  <tr>
12
- <th><%= t('attributes.group')%>:</th>
12
+ <th class="w-25 text-right"><%= t('attributes.group')%>:</th>
13
13
  <td><%= @membership.group %></td>
14
14
  </tr>
15
15
  <tr>
16
- <th><%= t('attributes.auto')%>:</th>
16
+ <th class="w-25 text-right"><%= t('attributes.auto')%>:</th>
17
17
  <td><%= @membership.auto %></td>
18
18
  </tr>
19
19
  </table>
@@ -1,21 +1,27 @@
1
- <%= content_tag :table, id: :wobauth_role_authorities, role: :wobauth_datatable,
2
- class: "table table-sm table-bordered dataTable" do %>
3
- <thead>
4
- <tr>
5
- <th><%= t('attributes.user') %></th>
6
- <th><%= t('attributes.authorizable_type') %></th>
7
- <th><%= t('attributes.authorized_for') %></th>
8
- <th><%= t('attributes.authorized_for_type') %></th>
9
- </tr>
10
- </thead>
11
- <tbody>
12
- <% authorities.valid(Date.today).each do |authority| %>
13
- <%= content_tag_for(:tr, authority) do %>
14
- <td><%= link_to authority.authorizable, polymorphic_path([wobauth, authority.authorizable]) %></td>
15
- <td><%= authority.authorizable_type %></td>
16
- <td><%= authorized_for_link(authority.authorized_for) %></td>
17
- <td><%= authority.authorized_for_type %></td>
1
+ <div data-controller="datatables">
2
+ <%= content_tag :table, id: :wobauth_role_authorities, role: :wobauth_datatable,
3
+ class: "table table-sm table-bordered",
4
+ data: {
5
+ target: 'datatables.datatable',
6
+ } do %>
7
+
8
+ <thead>
9
+ <tr>
10
+ <th><%= t('attributes.user') %></th>
11
+ <th><%= t('attributes.authorizable_type') %></th>
12
+ <th><%= t('attributes.authorized_for') %></th>
13
+ <th><%= t('attributes.authorized_for_type') %></th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+ <% authorities.valid(Date.today).each do |authority| %>
18
+ <%= content_tag(:tr, dom_id(authority)) do %>
19
+ <td><%= link_to authority.authorizable, polymorphic_path([wobauth, authority.authorizable]) %></td>
20
+ <td><%= authority.authorizable_type %></td>
21
+ <td><%= authorized_for_link(authority.authorized_for) %></td>
22
+ <td><%= authority.authorized_for_type %></td>
23
+ <% end %>
18
24
  <% end %>
19
- <% end %>
20
- </tbody>
21
- <% end %>
25
+ </tbody>
26
+ <% end %>
27
+ </div>
@@ -1,25 +1,31 @@
1
1
  <h1><%= t('controller.wobauth/roles') %></h1>
2
2
 
3
- <%= content_tag :table, id: :wobauth_roles, role: :wobauth_datatable,
4
- class: "table table-bordered table-striped dataTable" do %>
5
- <thead>
6
- <tr>
7
- <th><%= t('attributes.name') %></th>
8
- <th><%= t('wobauth.action') %></th>
9
- </tr>
10
- </thead>
11
- <tbody>
12
3
 
13
- <% @roles.each do |role| %>
14
- <%= content_tag_for(:tr, role) do %>
15
- <td><%= role.name %></td>
16
- <td class="nowrap">
17
- <%= show_link [wobauth, role] %>
18
- </td>
4
+ <div data-controller="datatables">
5
+ <%= content_tag :table, id: :wobauth_roles, role: :wobauth_datatable,
6
+ class: "table table-bordered table-striped",
7
+ data: {
8
+ target: 'datatables.datatable',
9
+ } do %>
10
+ <thead>
11
+ <tr>
12
+ <th><%= t('attributes.name') %></th>
13
+ <th><%= t('wobauth.action') %></th>
14
+ </tr>
15
+ </thead>
16
+ <tbody>
17
+
18
+ <% @roles.each do |role| %>
19
+ <%= content_tag(:tr, dom_id(role)) do %>
20
+ <td><%= role.name %></td>
21
+ <td class="nowrap">
22
+ <%= show_link [wobauth, role] %>
23
+ </td>
24
+ <% end %>
25
+ <% end %>
26
+ </tbody>
19
27
  <% end %>
20
- <% end %>
21
- </tbody>
22
- <% end %>
28
+ </div>
23
29
 
24
30
  <br />
25
31
 
@@ -8,7 +8,7 @@
8
8
  </thead>
9
9
  <tbody>
10
10
  <% user.memberships.each do |membership| %>
11
- <%= content_tag_for(:tr, membership) do %>
11
+ <%= content_tag(:tr, dom_id(membership)) do %>
12
12
  <td><%= link_to membership.group, wobauth.group_path(membership.group) %></td>
13
13
 
14
14
  <td><%= membership.auto %></td>
@@ -9,7 +9,7 @@
9
9
  </thead>
10
10
  <tbody>
11
11
  <% user.authorities.each do |authority| %>
12
- <%= content_tag_for(:tr, authority) do %>
12
+ <%= content_tag(:tr, dom_id(authority)) do %>
13
13
  <td><%= link_to authority.role, wobauth.role_path(authority.role) %></td>
14
14
  <td><%= authorized_for_link(authority.authorized_for) %></td>
15
15
  <td><%= authority.authorized_for_type %></td>
@@ -1,49 +1,54 @@
1
1
  <h1><%= t('controller.wobauth/users') %></h1>
2
2
 
3
- <%= content_tag :table, id: :wobauth_users, role: :wobauth_datatable,
4
- class: "table table-bordered table-striped dataTable" do %>
5
- <thead>
6
- <tr>
7
- <th><%= t('attributes.name') %></th>
8
- <th class="notvisible"><%= t('attributes.sn') %></th>
9
- <th class="notvisible"><%= t('attributes.givenname') %></th>
10
- <th class="notvisible"><%= t('attributes.title') %></th>
11
- <th><%= t('attributes.username') %></th>
12
- <th><%= t('attributes.telephone') %></th>
13
- <th><%= t('attributes.email') %></th>
14
- <th class="notvisible"><%= t('attributes.position') %></th>
15
- <th class="notvisible"><%= t('attributes.department') %></th>
16
- <th class="notvisible"><%= t('attributes.company') %></th>
17
- <th><%= t('attributes.current_sign_in_at') %></th>
18
- <th class="notvisible"><%= t('attributes.sign_in_count') %></th>
19
- <th><%= t('wobauth.action')%></th>
20
- </tr>
21
- </thead>
22
- <tbody>
3
+ <div data-controller="datatables">
4
+ <%= content_tag :table, id: :wobauth_users, role: :wobauth_datatable,
5
+ class: "table table-bordered table-striped",
6
+ data: {
7
+ target: 'datatables.datatable',
8
+ } do %>
9
+ <thead>
10
+ <tr>
11
+ <th><%= t('attributes.name') %></th>
12
+ <th class="notvisible"><%= t('attributes.sn') %></th>
13
+ <th class="notvisible"><%= t('attributes.givenname') %></th>
14
+ <th class="notvisible"><%= t('attributes.title') %></th>
15
+ <th><%= t('attributes.username') %></th>
16
+ <th><%= t('attributes.telephone') %></th>
17
+ <th><%= t('attributes.email') %></th>
18
+ <th class="notvisible"><%= t('attributes.position') %></th>
19
+ <th class="notvisible"><%= t('attributes.department') %></th>
20
+ <th class="notvisible"><%= t('attributes.company') %></th>
21
+ <th><%= t('attributes.current_sign_in_at') %></th>
22
+ <th class="notvisible"><%= t('attributes.sign_in_count') %></th>
23
+ <th><%= t('wobauth.action')%></th>
24
+ </tr>
25
+ </thead>
26
+ <tbody>
23
27
 
24
- <% @users.each do |user| %>
25
- <%= content_tag_for(:tr, user) do %>
26
- <td><%= user %></td>
27
- <td><%= user.sn %></td>
28
- <td><%= user.givenname %></td>
29
- <td><%= user.title %></td>
30
- <td><%= user.username %></td>
31
- <td><%= user.telephone %></td>
32
- <td><%= user.email %></td>
33
- <td><%= user.position %></td>
34
- <td><%= user.department %></td>
35
- <td><%= user.company %></td>
36
- <td><%= user.current_sign_in_at.try(:to_date) %></td>
37
- <td><%= user.sign_in_count %></td>
38
- <td class="nowrap">
39
- <%= show_link [wobauth, user] %>
40
- <%= edit_link [wobauth, user] %>
41
- <%= delete_link [wobauth, user] %>
42
- </td>
28
+ <% @users.each do |user| %>
29
+ <%= content_tag(:tr, dom_id(user)) do %>
30
+ <td><%= user %></td>
31
+ <td><%= user.sn %></td>
32
+ <td><%= user.givenname %></td>
33
+ <td><%= user.title %></td>
34
+ <td><%= user.username %></td>
35
+ <td><%= user.telephone %></td>
36
+ <td><%= user.email %></td>
37
+ <td><%= user.position %></td>
38
+ <td><%= user.department %></td>
39
+ <td><%= user.company %></td>
40
+ <td><%= user.current_sign_in_at.try(:to_date) %></td>
41
+ <td><%= user.sign_in_count %></td>
42
+ <td class="nowrap">
43
+ <%= show_link [wobauth, user] %>
44
+ <%= edit_link [wobauth, user] %>
45
+ <%= delete_link [wobauth, user] %>
46
+ </td>
47
+ <% end %>
43
48
  <% end %>
44
- <% end %>
45
- </tbody>
46
- <% end %>
49
+ </tbody>
50
+ <% end %>
51
+ </div>
47
52
 
48
53
  <br />
49
54
 
@@ -1,3 +1,4 @@
1
+ # simple
1
2
  ldap_options:
2
3
  host: 1.2.3.4
3
4
  port: 3268
@@ -7,3 +8,34 @@ ldap_options:
7
8
  username: myusername
8
9
  password: mysecretpassword
9
10
 
11
+ # redundant: 1 directory with 2 redundant servers
12
+ ldap_options:
13
+ hosts:
14
+ - [1.2.3.4, 3269]
15
+ - [5.6.7.8, 3269]
16
+ encryption: :simple_tls
17
+ base: dc=example,dc=com
18
+ auth:
19
+ method: :simple
20
+ username: myusername
21
+ password: mysecretpassword
22
+
23
+ # multiple directories
24
+ ldap_options:
25
+ - host: 1.2.3.4
26
+ port: 3268
27
+ base: dc=example,dc=com
28
+ auth:
29
+ method: :simple
30
+ username: myusername
31
+ password: mysecretpassword
32
+ - host: 5.6.7.8
33
+ port: 3269
34
+ base: dc=example,dc=com
35
+ encryption: :simple_tls
36
+ auth:
37
+ method: :simple
38
+ username: myusername
39
+ password: mysecretpassword
40
+
41
+
data/lib/wobauth.rb CHANGED
@@ -45,13 +45,18 @@ module Wobauth
45
45
  config ||= Hash.new
46
46
 
47
47
  if config['ldap_options'].present?
48
- opts = config['ldap_options'].symbolize_keys
49
- opts.each do |k,v|
50
- opts[k] = opts[k].symbolize_keys if opts[k].kind_of? Hash
48
+ ldapopts = config['ldap_options']
49
+ if ldapopts.kind_of? Hash
50
+ ldapopts = [ldapopts]
51
+ end
52
+ ldapopts.each do |opts|
53
+ opts.symbolize_keys!
54
+ opts.each do |k,v|
55
+ opts[k] = opts[k].symbolize_keys if opts[k].kind_of? Hash
56
+ end
51
57
  end
52
58
  else
53
59
  nil
54
60
  end
55
61
  end
56
-
57
62
  end
@@ -1,4 +1,4 @@
1
1
  module Wobauth
2
- VERSION = "5.0.1".freeze
3
- RELEASEDATE = "2020-01-22".freeze
2
+ VERSION = "5.1.3".freeze
3
+ RELEASEDATE = "2021-07-04".freeze
4
4
  end
data/spec/factories.rb CHANGED
@@ -1,12 +1,28 @@
1
1
  FactoryBot.define do
2
2
 
3
+ sequence :email, 10000 do |n|
4
+ "person#{n}@example.net"
5
+ end
6
+
7
+ sequence :group do |n|
8
+ "group_#{n}"
9
+ end
10
+
11
+ sequence :username do |n|
12
+ "user_#{n}"
13
+ end
14
+
15
+ sequence :name do |n|
16
+ "name_#{n}"
17
+ end
18
+
3
19
  factory :authority, class: Wobauth::Authority do
4
20
  association :authorizable, factory: :user
5
21
  role
6
22
  end
7
23
 
8
24
  factory :group, class: Wobauth::Group do
9
- sequence(:name) { |n| "name_#{n}" }
25
+ name { generate(:name) }
10
26
  end
11
27
 
12
28
  factory :membership, class: Wobauth::Membership do
@@ -15,12 +31,12 @@ FactoryBot.define do
15
31
  end
16
32
 
17
33
  factory :role, class: Wobauth::Role do
18
- sequence(:name) { |n| "name_#{n}" }
34
+ name { generate(:name) }
19
35
  end
20
36
 
21
37
  factory :user, class: Wobauth::User do
22
- sequence(:username) { |n| "user#{n}" }
23
- sequence(:email, 1000) { |n| "user#{n}@example.net" }
38
+ username { generate(:username) }
39
+ email { generate(:email) }
24
40
  password { "test99" }
25
41
  password_confirmation { "test99" }
26
42
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wobauth
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.1
4
+ version: 5.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Wolfgang Barth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-01-22 00:00:00.000000000 Z
11
+ date: 2021-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.0'
33
+ version: '4.1'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '4.0'
40
+ version: '4.1'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: wobaduser
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -150,20 +150,6 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: record_tag_helper
155
- requirement: !ruby/object:Gem::Requirement
156
- requirements:
157
- - - "~>"
158
- - !ruby/object:Gem::Version
159
- version: '1.0'
160
- type: :runtime
161
- prerelease: false
162
- version_requirements: !ruby/object:Gem::Requirement
163
- requirements:
164
- - - "~>"
165
- - !ruby/object:Gem::Version
166
- version: '1.0'
167
153
  - !ruby/object:Gem::Dependency
168
154
  name: font-awesome-sass
169
155
  requirement: !ruby/object:Gem::Requirement
@@ -352,20 +338,6 @@ dependencies:
352
338
  - - ">="
353
339
  - !ruby/object:Gem::Version
354
340
  version: '0'
355
- - !ruby/object:Gem::Dependency
356
- name: record_tag_helper
357
- requirement: !ruby/object:Gem::Requirement
358
- requirements:
359
- - - "~>"
360
- - !ruby/object:Gem::Version
361
- version: '1.0'
362
- type: :development
363
- prerelease: false
364
- version_requirements: !ruby/object:Gem::Requirement
365
- requirements:
366
- - - "~>"
367
- - !ruby/object:Gem::Version
368
- version: '1.0'
369
341
  - !ruby/object:Gem::Dependency
370
342
  name: rails-controller-testing
371
343
  requirement: !ruby/object:Gem::Requirement
@@ -554,6 +526,20 @@ dependencies:
554
526
  - - ">="
555
527
  - !ruby/object:Gem::Version
556
528
  version: '0'
529
+ - !ruby/object:Gem::Dependency
530
+ name: webpacker
531
+ requirement: !ruby/object:Gem::Requirement
532
+ requirements:
533
+ - - "~>"
534
+ - !ruby/object:Gem::Version
535
+ version: '4.0'
536
+ type: :development
537
+ prerelease: false
538
+ version_requirements: !ruby/object:Gem::Requirement
539
+ requirements:
540
+ - - "~>"
541
+ - !ruby/object:Gem::Version
542
+ version: '4.0'
557
543
  description: Rails engine providing MVCs for User, Group, Role, Membership and Authority
558
544
  email: wob@swobspace.de
559
545
  executables: []
@@ -684,7 +670,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
684
670
  - !ruby/object:Gem::Version
685
671
  version: '0'
686
672
  requirements: []
687
- rubygems_version: 3.0.3
673
+ rubygems_version: 3.1.6
688
674
  signing_key:
689
675
  specification_version: 4
690
676
  summary: Rails engine providing MVCs for User, Group, Role, Membership and Authority