wobauth 5.0.0 → 5.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a1e15fe42e6ce8fcc8274e264e6b6ff4411b465b78203a2afe1dc9050c934e3
4
- data.tar.gz: fc1141b984c94361f6d697b022b68de04ec794caea6f337218f2dc4be65c9315
3
+ metadata.gz: ed605664e9d17cbb6c0aaed21b9450e4ae07f70d3d57ee9605c2c8ca6620750c
4
+ data.tar.gz: 597faad405beff61e938fd27cbaf904b198c2d74b235225ba7c4172dd053f847
5
5
  SHA512:
6
- metadata.gz: 8d3c9edcd37cb311eb8586c73797157b40b6904d88f31e503bddad4b33e4eb2d715a8b1e8476f82ecfa0851afe2d26eda54ffa5c7aa7586c4bf9e7baf77f733f
7
- data.tar.gz: bdfd6aa3a3cf02f59b4ddc6c890bf4b76bb9e5a4463ce522dc2f14c58c9cbeb578c33eafc45c50baaade0ea2f3f983ea81c62faf82850534208f75a15ce7df41
6
+ metadata.gz: adedeb007fe3dd77e7c51412e3cf2f937392a94265a9f1682950a472050dfebc73636e7d86f153f08479057b17b6cf93489dcfd76f5018203981d5256f717990
7
+ data.tar.gz: abb5c0828eec7e3623e63b72d51cdc4b5b36445147fcf8352e1acedba0b9920646be220f9ab1aceed9c06a2fad6f4f7e9547471db3531e59ed784effd5af9f21
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
+ | master(6.x)| >=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
@@ -8,8 +8,7 @@ module Wobauth
8
8
  source: :user
9
9
  # -- configuration
10
10
  # -- validations and callbacks
11
- validates :name, :presence => true, :uniqueness => true
12
-
11
+ validates :name, presence: true, uniqueness: {case_sensitive: true}
13
12
 
14
13
  def to_s
15
14
  name
@@ -10,7 +10,7 @@ module Wobauth
10
10
  source_type: Wobauth::Group
11
11
  # -- configuration
12
12
  # -- validations and callbacks
13
- validates :name, :presence => true, :uniqueness => true
13
+ validates :name, presence: true, uniqueness: {case_sensitive: true}
14
14
 
15
15
  def to_s
16
16
  name
@@ -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_for(:tr, 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>
@@ -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_for(:tr, 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_for(:tr, 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_for(:tr, 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_for(:tr, 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
 
@@ -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_for(:tr, 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
@@ -9,7 +9,7 @@ module UserConcerns
9
9
  has_many :group_roles, through: :groups, source: :roles
10
10
  has_many :group_authorities, through: :groups, source: :authorities
11
11
 
12
- validates :username, presence: true, uniqueness: true
12
+ validates :username, presence: true, uniqueness: { case_sensitive: false }
13
13
  end
14
14
 
15
15
 
@@ -1,4 +1,4 @@
1
1
  module Wobauth
2
- VERSION = "5.0.0".freeze
3
- RELEASEDATE = "2020-01-19".freeze
2
+ VERSION = "5.1.2".freeze
3
+ RELEASEDATE = "2021-05-15".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.0
4
+ version: 5.1.2
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-19 00:00:00.000000000 Z
11
+ date: 2021-05-15 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
@@ -554,6 +554,20 @@ dependencies:
554
554
  - - ">="
555
555
  - !ruby/object:Gem::Version
556
556
  version: '0'
557
+ - !ruby/object:Gem::Dependency
558
+ name: webpacker
559
+ requirement: !ruby/object:Gem::Requirement
560
+ requirements:
561
+ - - "~>"
562
+ - !ruby/object:Gem::Version
563
+ version: '4.0'
564
+ type: :development
565
+ prerelease: false
566
+ version_requirements: !ruby/object:Gem::Requirement
567
+ requirements:
568
+ - - "~>"
569
+ - !ruby/object:Gem::Version
570
+ version: '4.0'
557
571
  description: Rails engine providing MVCs for User, Group, Role, Membership and Authority
558
572
  email: wob@swobspace.de
559
573
  executables: []
@@ -684,7 +698,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
684
698
  - !ruby/object:Gem::Version
685
699
  version: '0'
686
700
  requirements: []
687
- rubygems_version: 3.0.3
701
+ rubygems_version: 3.1.6
688
702
  signing_key:
689
703
  specification_version: 4
690
704
  summary: Rails engine providing MVCs for User, Group, Role, Membership and Authority