ucb_rails_security 2.0.7

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.
Files changed (60) hide show
  1. data/CHANGELOG +6 -0
  2. data/Manifest +56 -0
  3. data/README +195 -0
  4. data/Rakefile +21 -0
  5. data/TODO +3 -0
  6. data/generators/ucb_rails_security/templates/controllers/ucb_security/base_controller.rb +17 -0
  7. data/generators/ucb_rails_security/templates/controllers/ucb_security/ldap_search_controller.rb +10 -0
  8. data/generators/ucb_rails_security/templates/controllers/ucb_security/role_users_controller.rb +27 -0
  9. data/generators/ucb_rails_security/templates/controllers/ucb_security/roles_controller.rb +52 -0
  10. data/generators/ucb_rails_security/templates/controllers/ucb_security/user_roles_controller.rb +29 -0
  11. data/generators/ucb_rails_security/templates/controllers/ucb_security/users_controller.rb +59 -0
  12. data/generators/ucb_rails_security/templates/db/migrate/xxx_create_ucb_rails_security_tables.rb +31 -0
  13. data/generators/ucb_rails_security/templates/helpers/ucb_security/base_helper.rb +23 -0
  14. data/generators/ucb_rails_security/templates/helpers/ucb_security/builder.rb +25 -0
  15. data/generators/ucb_rails_security/templates/helpers/ucb_security/roles_helper.rb +2 -0
  16. data/generators/ucb_rails_security/templates/helpers/ucb_security/users_helper.rb +2 -0
  17. data/generators/ucb_rails_security/templates/initializers/ucb_security_config.rb +20 -0
  18. data/generators/ucb_rails_security/templates/javascripts/ucb_security.js +99 -0
  19. data/generators/ucb_rails_security/templates/models/ldap_search.rb +48 -0
  20. data/generators/ucb_rails_security/templates/models/role.rb +32 -0
  21. data/generators/ucb_rails_security/templates/models/user.rb +106 -0
  22. data/generators/ucb_rails_security/templates/models/user_roles.rb +3 -0
  23. data/generators/ucb_rails_security/templates/stylesheets/ucb_security.css +347 -0
  24. data/generators/ucb_rails_security/templates/views/layouts/ucb_security/_main_navigation.html.erb +10 -0
  25. data/generators/ucb_rails_security/templates/views/layouts/ucb_security/application.html.erb +24 -0
  26. data/generators/ucb_rails_security/templates/views/ucb_security/ldap_search/index.html.erb +62 -0
  27. data/generators/ucb_rails_security/templates/views/ucb_security/role_users/_new.html.erb +11 -0
  28. data/generators/ucb_rails_security/templates/views/ucb_security/role_users/edit.html.erb +37 -0
  29. data/generators/ucb_rails_security/templates/views/ucb_security/roles/_users.html.erb +14 -0
  30. data/generators/ucb_rails_security/templates/views/ucb_security/roles/edit.html.erb +19 -0
  31. data/generators/ucb_rails_security/templates/views/ucb_security/roles/index.html.erb +34 -0
  32. data/generators/ucb_rails_security/templates/views/ucb_security/roles/new.html.erb +19 -0
  33. data/generators/ucb_rails_security/templates/views/ucb_security/roles/show.html.erb +27 -0
  34. data/generators/ucb_rails_security/templates/views/ucb_security/user_roles/edit.html.erb +17 -0
  35. data/generators/ucb_rails_security/templates/views/ucb_security/users/edit.html.erb +23 -0
  36. data/generators/ucb_rails_security/templates/views/ucb_security/users/index.html.erb +43 -0
  37. data/generators/ucb_rails_security/templates/views/ucb_security/users/new.html.erb +29 -0
  38. data/generators/ucb_rails_security/templates/views/ucb_security/users/show.html.erb +43 -0
  39. data/generators/ucb_rails_security/ucb_rails_security_generator.rb +191 -0
  40. data/init.rb +9 -0
  41. data/lib/helpers/rspec_helpers.rb +119 -0
  42. data/lib/tasks/ucb_rails_security.rake +22 -0
  43. data/lib/ucb_rails_security.rb +60 -0
  44. data/lib/ucb_rails_security_casauthentication.rb +117 -0
  45. data/lib/ucb_rails_security_logger.rb +33 -0
  46. data/lib/ucb_rs_controller_methods.rb +496 -0
  47. data/rdoc_includes/application_controller_rb.txt +9 -0
  48. data/rspec/_all_specs.rb +5 -0
  49. data/rspec/_setup.rb +36 -0
  50. data/rspec/filter_ldap_spec.rb +87 -0
  51. data/rspec/filter_role_spec.rb +56 -0
  52. data/rspec/filter_spec.rb +37 -0
  53. data/rspec/filter_user_spec.rb +55 -0
  54. data/rspec/logged_in_status_spec.rb +226 -0
  55. data/rspec/ucb_rails_security_casauthentication_spec.rb +83 -0
  56. data/rspec/ucb_rails_security_spec.rb +34 -0
  57. data/test/test_rails-2.0.x/test/test_helper.rb +38 -0
  58. data/test/test_rails-2.1.x/test/test_helper.rb +38 -0
  59. data/ucb_rails_security.gemspec +41 -0
  60. metadata +147 -0
@@ -0,0 +1,62 @@
1
+ <h1>Ldap Search</h1>
2
+
3
+ <br/>
4
+
5
+ <div class="ucb_rails_security_form">
6
+ <% form_tag(ucb_security_ldap_search_path, :method => :get) do %>
7
+ <p>
8
+ <%= label('search_term', 'Search Term') %>
9
+ <%= select_tag('search_term', options_for_select(@select_options, @search_term)) %>
10
+ </p>
11
+
12
+ <p>
13
+ <%= label('search_value', 'Search Value') %>
14
+ <%= text_field_tag('search_value', params[:search_value], :size => 30) %>
15
+ </p>
16
+
17
+ <p>
18
+ <div class="button_widget">
19
+ <%= submit_tag("Search") %> |
20
+ <%= link_to('Clear', ucb_security_ldap_search_path()) %>
21
+ </div>
22
+ </p>
23
+ <% end %>
24
+ </div>
25
+
26
+ <br/>
27
+
28
+ <% if @search_initiated && @ldap_people.empty? %>
29
+
30
+ <p class="empty_search_results">Your search did not match any people in the directory.</p>
31
+
32
+ <% elsif !@ldap_people.empty? %>
33
+
34
+ <h2>LDAP Search Results</h2>
35
+ <p>Click on the person's LDAP UID to populate a form with their LDAP data</p>
36
+
37
+ <table class='horizontal max_width'>
38
+ <tr>
39
+ <th width="1%">LDAP UID</th>
40
+ <th>First</th>
41
+ <th>Last</th>
42
+ <th>Dept Code</th>
43
+ <th>Department</th>
44
+ <th>Phone</th>
45
+ <th>Email</th>
46
+ </tr>
47
+ <tbody class="highlight">
48
+ <% @ldap_people.each do |p| %>
49
+ <tr>
50
+ <td><%= link_to(p.uid, new_ucb_security_user_path(:ldap_uid => p.uid, :givenname => params[:givenname], :sn => params[:sn])) %></td>
51
+ <td><%=h p.first_name %></td>
52
+ <td><%=h p.last_name %></td>
53
+ <td><%=h p.dept_code %></td>
54
+ <td><%=h p.dept_name %></td>
55
+ <td><%=h p.phone %></td>
56
+ <td><%=h p.email %></td>
57
+ </tr>
58
+ <% end %>
59
+ </tbody>
60
+ </table>
61
+
62
+ <% end %>
@@ -0,0 +1,11 @@
1
+ <% if @unassociated_users.empty? %>
2
+ <p>There are no unassociated users</p>
3
+ <% else %>
4
+ <% form_tag(role_users_path(:role_id => @role), :method => :put) do %>
5
+ <%= select_tag('role[user_ids][]', options_for_select(@unassociated_users), :multiple => 'true', :size => 13) %>
6
+ <% @role_users .each do |ru| %>
7
+ <%= hidden_field_tag('role[user_ids][]', ru.id ) %>
8
+ <% end %>
9
+ <%= submit_tag('Add') %>
10
+ <% end %>
11
+ <% end %>
@@ -0,0 +1,37 @@
1
+ <h1>Role: <i><%= h @role.name.capitalize %></i></h1>
2
+
3
+
4
+ <% form_for([:ucb_security, @user, @role], :url => ucb_security_role_users_path(@role), :html => {:method => :put}) do %>
5
+ <table class="doubleSelectList">
6
+ <tr>
7
+ <td width="40%">
8
+ <label>Users without Role: <i><%= @role.name.capitalize %></i></label><br/>
9
+ <%= select_tag("", options_for_select(@unassociated_users),
10
+ :id => 'users_wo_role', :multiple => true, :size => 10) %>
11
+ </td>
12
+ <td width="20%" class="buttons">
13
+ <label>Move Selected</label><br/>
14
+ <%= button_to_function(">", "DoubleSelectList.moveSelected('users_wo_role', 'users_w_role')") %><br/>
15
+ <%= button_to_function("<", "DoubleSelectList.moveSelected('users_w_role', 'users_wo_role')") %><br/>
16
+ <br/>
17
+
18
+ <label>Move All</label><br/>
19
+ <%= button_to_function(">>", "DoubleSelectList.moveAll('users_wo_role', 'users_w_role')") %><br/>
20
+ <%= button_to_function("<<", "DoubleSelectList.moveAll('users_w_role', 'users_wo_role')") %><br/>
21
+ </td>
22
+ <td width="40%">
23
+ <label>Users with Role: <i><%= @role.name.capitalize %></i></label><br/>
24
+ <%= select_tag("user_ids[]", options_for_select(@associated_users),
25
+ :id => 'users_w_role', :multiple => true, :size => 10) %>
26
+ </td>
27
+ </tr>
28
+ </table>
29
+
30
+ <div class="button_widget">
31
+ <%= submit_tag("Update", :id => 'update_button') %> | <%= link_to("Done", ucb_security_role_path(@role)) %>
32
+ </div>
33
+ <% end %>
34
+
35
+ <%= javascript_tag("DoubleSelectList.initSubmitCallback('update_button', 'users_wo_role', 'users_w_role')") %>
36
+
37
+
@@ -0,0 +1,14 @@
1
+
2
+ <% if @role.users.size > 0 %>
3
+ <ul>
4
+ <% @role.users.each do |user| %>
5
+ <li><%= link_to(user.display_name, ucb_security_user_url(user), :id => "user_#{user.id}") %></li>
6
+ <% end %>
7
+ </ul>
8
+ <% else %>
9
+ <p>No uses are associated with this role</p>
10
+ <% end %>
11
+
12
+ <div class="button_widget">
13
+ <%= button_to("Edit", edit_ucb_security_role_users_url(@role), :method => :get) %>
14
+ </div>
@@ -0,0 +1,19 @@
1
+ <h1>Edit Role</h1>
2
+
3
+ <div class="ucb_rails_security_form">
4
+ <fieldset>
5
+ <legend>Role Details</legend>
6
+ <% form_for([:ucb_security, @role], :builder => UcbSecurity::Builder) do |f| %>
7
+
8
+ <%= f.text_field('Name:', :name, :required => true) %>
9
+ <%= f.text_area('Description:', :description, {}, {:rows => 6}) %>
10
+
11
+ <p>
12
+ <div class="button_widget">
13
+ <%= f.submit("Update") %> |
14
+ <%= link_to("Done", ucb_security_role_path(@role)) %>
15
+ </div>
16
+ </p>
17
+ <% end %>
18
+ </fieldset>
19
+ </div>
@@ -0,0 +1,34 @@
1
+ <h1>Listing Roles</h1>
2
+
3
+ <div class="new_record_widget">
4
+ <%= link_to('New Role', new_ucb_security_role_path()) %>
5
+ </div>
6
+
7
+
8
+ <table class="horizontal mid_width">
9
+ <tr>
10
+ <th colspan="3" width="1%"></th>
11
+ <th>Name</th>
12
+ <th>Description</th>
13
+ </tr>
14
+
15
+ <% for role in @roles %>
16
+ <tbody class="highlight">
17
+ <tr>
18
+ <td><%= link_to('View', ucb_security_role_path(role)) %></td>
19
+ <td><%= link_to('Edit', edit_ucb_security_role_path(role)) %></td>
20
+ <td><%= link_to('Delete', ucb_security_role_path(role), :confirm => 'Are you sure?', :method => :delete) %></td>
21
+ <td><%=h role.name %></td>
22
+ <td><%=h role.description %></td>
23
+ </tr>
24
+ </tbody>
25
+ <% end %>
26
+ </table>
27
+
28
+ <br />
29
+
30
+ <% if @roles.size > 15 %>
31
+ <div class="new_record_widget">
32
+ <%= link_to('New Role', new_ucb_security_role_path()) %>
33
+ </div>
34
+ <% end %>
@@ -0,0 +1,19 @@
1
+ <h1>New Role</h1>
2
+
3
+ <div class="ucb_rails_security_form">
4
+ <fieldset>
5
+ <legend>Role Details</legend>
6
+ <% form_for([:ucb_security, @role], :builder => UcbSecurity::Builder) do |f| %>
7
+
8
+ <%= f.text_field('Name:', :name, :required => true) %>
9
+ <%= f.text_area('Description:', :description, {}, {:rows => 6}) %>
10
+
11
+ <p>
12
+ <div class="button_widget">
13
+ <%= f.submit("Create") %> |
14
+ <%= link_to("Back", ucb_security_roles_path) %>
15
+ </div>
16
+ </p>
17
+ <% end %>
18
+ </fieldset>
19
+ </div>
@@ -0,0 +1,27 @@
1
+ <h1>View Role</h1>
2
+
3
+ <div class="ucb_rails_security_form">
4
+ <fieldset>
5
+ <legend>Role Details</legend>
6
+ <% fields_for([:ucb_security, @role], :builder => UcbSecurity::Builder) do |f| %>
7
+ <%= f.text_field('Name:', :name, {:required => true}, {:readonly => true}) %>
8
+ <%= f.text_area('Description:', :description, {}, {:readonly => true, :rows => 6}) %>
9
+
10
+ <p>
11
+ <div class="button_widget">
12
+ <%= button_to("Edit", edit_ucb_security_role_path(@role), :method => :get) %> |
13
+ <%= link_to("List Roles", ucb_security_roles_path()) %>
14
+ </div>
15
+ </p>
16
+ <% end %>
17
+ </fieldset>
18
+ </div>
19
+
20
+ <br/>
21
+
22
+ <div class="ucb_rails_security_form">
23
+ <fieldset>
24
+ <legend>Role Users</legend>
25
+ <%= render(:partial => 'users') %>
26
+ </fielset>
27
+ </div>
@@ -0,0 +1,17 @@
1
+ <h1>Roles for: <%= h @user.full_name %></h1>
2
+
3
+ <% form_for([:ucb_security, @user], :url => ucb_security_user_roles_path(@user), :html => {:method => :put}) do %>
4
+ <ul style="display: inline; list-style-type: none;">
5
+ <% @roles.each do |role| %>
6
+ <li><%= check_box_tag('user[role_ids][]', role.id, @user.roles.include?(role)) %>
7
+ <%= role.name %></li>
8
+ <% end %>
9
+ </ul>
10
+
11
+ <br/><br/>
12
+
13
+ <div class="record_widget">
14
+ <%= submit_tag("Update") %> |
15
+ <%= link_to("Done", ucb_security_user_path(@user)) %>
16
+ </div>
17
+ <% end %>
@@ -0,0 +1,23 @@
1
+ <h1>Edit user</h1>
2
+
3
+ <div class="ucb_rails_security_form">
4
+ <fieldset>
5
+ <legend>User Details</legend>
6
+ <% form_for([:ucb_security, @user], :builder => UcbSecurity::Builder) do |f| %>
7
+
8
+ <%= f.text_field('LDAP Uid:', :ldap_uid, :required => true) %>
9
+ <%= f.text_field('First Name:', :first_name, :required => true) %>
10
+ <%= f.text_field('Last Name:', :last_name, :required => true) %>
11
+ <%= f.text_field('Email:', :email) %>
12
+ <%= f.text_field('Phone:', :phone) %>
13
+ <%= f.text_field('Department:', :department) %>
14
+
15
+ <p>
16
+ <div class="button_widget">
17
+ <%= f.submit("Update") %> |
18
+ <%= link_to("Done", ucb_security_user_path(@user)) %>
19
+ </div>
20
+ </p>
21
+ <% end %>
22
+ </fieldset>
23
+ </div>
@@ -0,0 +1,43 @@
1
+ <h1>Listing Users</h1>
2
+
3
+
4
+ <div class="new_record_widget">
5
+ <%= link_to('New User', new_ucb_security_user_path()) %>
6
+ </div>
7
+
8
+
9
+ <table class="horizontal max_width">
10
+ <tr>
11
+ <th colspan="3" width="1%"></th>
12
+ <th>Ldap uid</th>
13
+ <th>First name</th>
14
+ <th>Last name</th>
15
+ <th>Email</th>
16
+ <th>Phone</th>
17
+ <th>Department</th>
18
+ </tr>
19
+
20
+ <% for user in @users %>
21
+ <tbody class="highlight">
22
+ <tr>
23
+ <td><%= link_to('View', ucb_security_user_path(user)) %></td>
24
+ <td><%= link_to('Edit', edit_ucb_security_user_path(user)) %></td>
25
+ <td><%= link_to('Delete', ucb_security_user_path(user), :confirm => 'Are you sure?', :method => :delete) %></td>
26
+ <td><%=h user.ldap_uid %></td>
27
+ <td><%=h user.first_name %></td>
28
+ <td><%=h user.last_name %></td>
29
+ <td><%=h user.email %></td>
30
+ <td><%=h user.phone %></td>
31
+ <td><%=h user.department %></td>
32
+ </tr>
33
+ </tbody>
34
+ <% end %>
35
+ </table>
36
+
37
+ <br />
38
+
39
+ <% if @users.size > 15 %>
40
+ <div class="new_record_widget">
41
+ <%= link_to('New User', new_ucb_security_user_path()) %>
42
+ </div>
43
+ <% end %>
@@ -0,0 +1,29 @@
1
+ <h1>New User</h1>
2
+
3
+ <p>
4
+ <%= link_to("Search Ldap for New User", ucb_security_ldap_search_url()) %>
5
+ </p>
6
+
7
+
8
+ <div class="ucb_rails_security_form">
9
+ <fieldset>
10
+ <legend>User Details</legend>
11
+ <% form_for([:ucb_security, @user], :builder => UcbSecurity::Builder) do |f| %>
12
+
13
+ <%= f.text_field('LDAP Uid:', :ldap_uid, :required => true) %>
14
+ <%= f.text_field('First Name:', :first_name, :required => true) %>
15
+ <%= f.text_field('Last Name:', :last_name, :required => true) %>
16
+ <%= f.text_field('Email:', :email) %>
17
+ <%= f.text_field('Phone:', :phone) %>
18
+ <%= f.text_field('Department:', :department) %>
19
+
20
+ <p>
21
+ <div class="button_widget">
22
+ <%= f.submit("Create") %> |
23
+ <%= link_to("Back", ucb_security_users_path) %>
24
+ </div>
25
+ </p>
26
+ <% end %>
27
+ </fieldset>
28
+ </div>
29
+
@@ -0,0 +1,43 @@
1
+ <h1>View User</h1>
2
+
3
+ <div class="ucb_rails_security_form">
4
+ <fieldset>
5
+ <legend>User Details</legend>
6
+ <% fields_for(@user, :builder => UcbSecurity::Builder) do |f| %>
7
+ <%= f.text_field('LDAP Uid:', :ldap_uid, {:required => true}, {:readonly => true}) %>
8
+ <%= f.text_field('First Name:', :first_name, {:required => true}, {:readonly => true}) %>
9
+ <%= f.text_field('Last Name:', :last_name, {:required => true}, {:readonly => true}) %>
10
+ <%= f.text_field('Email:', :email, {}, {:readonly => true}) %>
11
+ <%= f.text_field('Phone:', :phone, {}, {:readonly => true}) %>
12
+ <%= f.text_field('Department:', :department, {}, {:readonly => true}) %>
13
+
14
+ <p>
15
+ <div class="button_widget">
16
+ <%= button_to("Edit", edit_ucb_security_user_path(@user), :method => :get) %> |
17
+ <%= link_to("List Users", ucb_security_users_path()) %>
18
+ </div>
19
+ </p>
20
+ <% end %>
21
+ </fieldset>
22
+ </div>
23
+
24
+ <br/>
25
+
26
+ <div class="ucb_rails_security_form">
27
+ <fieldset>
28
+ <legend>User Roles</legend>
29
+ <% if @user.roles.empty? %>
30
+ <p>This user has no roles</p>
31
+ <% else %>
32
+ <ul>
33
+ <% @user.roles.each do |r| %>
34
+ <li><%= link_to(r.name, ucb_security_role_path(r)) %></li>
35
+ <% end %>
36
+ </ul>
37
+ <% end %>
38
+
39
+ <div class="button_widget">
40
+ <%= button_to("Edit", edit_ucb_security_user_roles_path(@user), :method => :get) %>
41
+ </div>
42
+ </fieldset>
43
+ </div>
@@ -0,0 +1,191 @@
1
+ class UcbRailsSecurityGenerator < Rails::Generator::Base
2
+ NAMESPACE = 'ucb_security'
3
+ TARGET_NAMESPACE = 'ucb_security'
4
+
5
+ def initialize(runtime_args, runtime_options = {})
6
+ super
7
+ end
8
+
9
+ def manifest
10
+ record do |m|
11
+ template_dir = File.join(File.expand_path(File.dirname(__FILE__)), "templates")
12
+
13
+ ###############
14
+ # Models
15
+ #
16
+ Dir["#{template_dir}/models/*"].each do |name|
17
+ name = File.basename(name)
18
+ m.file "models/#{name}", "app/models/#{name}"
19
+ end
20
+ #####
21
+
22
+
23
+ ###############
24
+ # Controllers
25
+ #
26
+ m.directory "app/controllers/#{TARGET_NAMESPACE}/"
27
+ Dir["#{template_dir}/controllers/#{NAMESPACE}/*"].each do |name|
28
+ name = File.basename(name)
29
+ m.file "controllers/#{NAMESPACE}/#{name}", "app/controllers/#{TARGET_NAMESPACE}/#{name}"
30
+ end
31
+
32
+ # Helpers
33
+ m.directory "app/helpers/#{TARGET_NAMESPACE}"
34
+ Dir["#{template_dir}/helpers/#{NAMESPACE}/*"].each do |name|
35
+ name = File.basename(name)
36
+ m.file "helpers/#{NAMESPACE}/#{name}", "app/helpers/#{TARGET_NAMESPACE}/#{name}"
37
+ end
38
+ #####
39
+
40
+
41
+ ################
42
+ # Views
43
+ #
44
+ m.directory "app/views/#{TARGET_NAMESPACE}/"
45
+ m.directory "app/views/#{TARGET_NAMESPACE}/roles/"
46
+ Dir["#{template_dir}/views/#{NAMESPACE}/roles/*"].each do |name|
47
+ name = File.basename(name)
48
+ m.file "views/#{NAMESPACE}/roles/#{name}", "app/views/#{TARGET_NAMESPACE}/roles/#{name}"
49
+ end
50
+
51
+ m.directory "app/views/#{TARGET_NAMESPACE}/users/"
52
+ Dir["#{template_dir}/views/#{NAMESPACE}/users/*"].each do |name|
53
+ name = File.basename(name)
54
+ m.file "views/#{NAMESPACE}/users/#{name}", "app/views/#{TARGET_NAMESPACE}/users/#{name}"
55
+ end
56
+
57
+ m.directory "app/views/#{TARGET_NAMESPACE}/user_roles/"
58
+ Dir["#{template_dir}/views/#{NAMESPACE}/user_roles/*"].each do |name|
59
+ name = File.basename(name)
60
+ m.file "views/#{NAMESPACE}/user_roles/#{name}", "app/views/#{TARGET_NAMESPACE}/user_roles/#{name}"
61
+ end
62
+
63
+ m.directory "app/views/#{TARGET_NAMESPACE}/role_users/"
64
+ Dir["#{template_dir}/views/#{NAMESPACE}/role_users/*"].each do |name|
65
+ name = File.basename(name)
66
+ m.file "views/#{NAMESPACE}/role_users/#{name}", "app/views/#{TARGET_NAMESPACE}/role_users/#{name}"
67
+ end
68
+
69
+ m.directory "app/views/#{TARGET_NAMESPACE}/role_users/"
70
+ Dir["#{template_dir}/views/#{NAMESPACE}/role_users/*"].each do |name|
71
+ name = File.basename(name)
72
+ m.file "views/#{NAMESPACE}/role_users/#{name}", "app/views/#{TARGET_NAMESPACE}/role_users/#{name}"
73
+ end
74
+
75
+ m.directory "app/views/#{TARGET_NAMESPACE}/ldap_search/"
76
+ Dir["#{template_dir}/views/#{NAMESPACE}/ldap_search/*"].each do |name|
77
+ name = File.basename(name)
78
+ m.file "views/#{NAMESPACE}/ldap_search/#{name}", "app/views/#{TARGET_NAMESPACE}/ldap_search/#{name}"
79
+ end
80
+ #####
81
+
82
+
83
+ ###############
84
+ # Layouts
85
+ #
86
+ m.directory "app/views/layouts/#{TARGET_NAMESPACE}"
87
+ Dir["#{template_dir}/views/layouts/#{NAMESPACE}/*"].each do |name|
88
+ name = File.basename(name)
89
+ m.file "views/layouts/#{NAMESPACE}/#{name}", "app/views/layouts/#{TARGET_NAMESPACE}/#{name}"
90
+ end
91
+ #####
92
+
93
+
94
+ ###############
95
+ # Stylesheets
96
+ #
97
+ m.file "stylesheets/#{NAMESPACE}.css", "public/stylesheets/#{TARGET_NAMESPACE}.css"
98
+ #####
99
+
100
+
101
+ ###############
102
+ # Javascripts
103
+ #
104
+ m.file "javascripts/ucb_security.js", "public/javascripts/ucb_security.js"
105
+ #####
106
+
107
+
108
+ ###############
109
+ # Initializers
110
+ #
111
+ m.directory "config"
112
+ m.directory "config/initializers"
113
+ m.file "initializers/ucb_security_config.rb", "config/initializers/ucb_security_config.rb"
114
+ #####
115
+
116
+
117
+ ###############
118
+ # Migrations
119
+ #
120
+ m.directory "db/migrate"
121
+ m.file "db/migrate/xxx_create_ucb_rails_security_tables.rb", "db/migrate/#{next_migration}_create_ucb_rails_security_tables.rb"
122
+ #####
123
+
124
+
125
+ ###############
126
+ # Routes
127
+ #
128
+ write_named_routes_to_route_file
129
+ #####
130
+ end
131
+ end
132
+
133
+ private
134
+ def pad_zeros(str, num_of_zeros)
135
+ if str.length == num_of_zeros
136
+ return str
137
+ else
138
+ pad_zeros("0".concat(str), num_of_zeros)
139
+ end
140
+ end
141
+
142
+ def latest_migration
143
+ num = 0
144
+ unless migrations.empty?
145
+ migrations.last =~ /^([0-9]+)_/
146
+ num = $1
147
+ end
148
+ raise(Exception, "Unable to determine latest migration: #{migrations.last}") unless num
149
+ num.to_i
150
+ end
151
+
152
+ def next_migration
153
+ pad_zeros((latest_migration + 1).to_s, 3)
154
+ end
155
+
156
+ def migrations
157
+ Dir["#{RAILS_ROOT}/db/migrate/*"].map { |f| File.basename(f) }
158
+ end
159
+
160
+ def write_named_routes_to_route_file
161
+ ucb_security_routes = <<-ROUTE
162
+ map.ucb_security '/ucb_security', :controller => 'ucb_security/users'
163
+ map.logout '/logout', :controller => 'ucb_security/base', :action => 'logout'
164
+ map.not_authorized '/not_authorized', :controller => 'ucb_security/base', :action => 'not_authorized'
165
+
166
+ map.namespace(:ucb_security) do |ucb_security|
167
+ ucb_security.resources :roles do |roles|
168
+ roles.resource :users, :controller => 'role_users'
169
+ end
170
+
171
+ ucb_security.resources :users do |users|
172
+ users.resource :roles, :controller => 'user_roles'
173
+ end
174
+ end
175
+
176
+ map.ucb_security_ldap_search '/ucb_security/ldap_search',
177
+ :controller => 'ucb_security/ldap_search', :action => 'index'
178
+ ROUTE
179
+
180
+ sentinel = 'ActionController::Routing::Routes.draw do |map|'
181
+ gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match|
182
+ "#{match}\n # START ucb_rails_security routes: \n #{ucb_security_routes}\n # END ucb_rails_security routes:\n"
183
+ end
184
+ end
185
+
186
+ def gsub_file(relative_destination, regexp, *args, &block)
187
+ path = destination_path(relative_destination)
188
+ content = File.read(path).gsub(regexp, *args, &block)
189
+ File.open(path, 'wb') { |file| file.write(content) }
190
+ end
191
+ end
data/init.rb ADDED
@@ -0,0 +1,9 @@
1
+ # Include hook code here
2
+ require 'ucb_rails_security'
3
+ require 'ucb_rails_security_casauthentication'
4
+ require 'ucb_rs_controller_methods'
5
+ require 'helpers/rspec_helpers'
6
+ require 'ucb_rails_security_logger'
7
+
8
+ UCB::Rails::Security.logger = UCB::Rails::Security::Logger.new("#{RAILS_ROOT}/log/ucb_security_#{RAILS_ENV}.log")
9
+ UCB::Rails::Security.logger.formatter = UCB::Rails::Security::Logger::Formatter.new