ruby-activeldap 0.8.3 → 0.8.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. data/CHANGES +431 -0
  2. data/COPYING +340 -0
  3. data/LICENSE +58 -0
  4. data/README +104 -0
  5. data/Rakefile +165 -0
  6. data/TODO +22 -0
  7. data/benchmark/bench-al.rb +202 -0
  8. data/benchmark/config.yaml.sample +5 -0
  9. data/data/locale/en/LC_MESSAGES/active-ldap.mo +0 -0
  10. data/data/locale/ja/LC_MESSAGES/active-ldap.mo +0 -0
  11. data/examples/al-admin/README +182 -0
  12. data/examples/al-admin/Rakefile +10 -0
  13. data/examples/al-admin/app/controllers/account_controller.rb +50 -0
  14. data/examples/al-admin/app/controllers/application.rb +15 -0
  15. data/examples/al-admin/app/controllers/directory_controller.rb +22 -0
  16. data/examples/al-admin/app/controllers/users_controller.rb +38 -0
  17. data/examples/al-admin/app/controllers/welcome_controller.rb +4 -0
  18. data/examples/al-admin/app/helpers/account_helper.rb +2 -0
  19. data/examples/al-admin/app/helpers/application_helper.rb +6 -0
  20. data/examples/al-admin/app/helpers/directory_helper.rb +2 -0
  21. data/examples/al-admin/app/helpers/users_helper.rb +13 -0
  22. data/examples/al-admin/app/helpers/welcome_helper.rb +2 -0
  23. data/examples/al-admin/app/models/entry.rb +19 -0
  24. data/examples/al-admin/app/models/ldap_user.rb +49 -0
  25. data/examples/al-admin/app/models/user.rb +91 -0
  26. data/examples/al-admin/app/views/account/login.rhtml +12 -0
  27. data/examples/al-admin/app/views/account/sign_up.rhtml +22 -0
  28. data/examples/al-admin/app/views/directory/index.rhtml +5 -0
  29. data/examples/al-admin/app/views/directory/populate.rhtml +2 -0
  30. data/examples/al-admin/app/views/layouts/application.rhtml +41 -0
  31. data/examples/al-admin/app/views/users/_attribute_information.rhtml +22 -0
  32. data/examples/al-admin/app/views/users/_entry.rhtml +12 -0
  33. data/examples/al-admin/app/views/users/_form.rhtml +29 -0
  34. data/examples/al-admin/app/views/users/_object_class_information.rhtml +23 -0
  35. data/examples/al-admin/app/views/users/edit.rhtml +10 -0
  36. data/examples/al-admin/app/views/users/index.rhtml +9 -0
  37. data/examples/al-admin/app/views/users/show.rhtml +3 -0
  38. data/examples/al-admin/app/views/welcome/index.rhtml +16 -0
  39. data/examples/al-admin/config/boot.rb +45 -0
  40. data/examples/al-admin/config/database.yml.example +19 -0
  41. data/examples/al-admin/config/environment.rb +68 -0
  42. data/examples/al-admin/config/environments/development.rb +21 -0
  43. data/examples/al-admin/config/environments/production.rb +18 -0
  44. data/examples/al-admin/config/environments/test.rb +19 -0
  45. data/examples/al-admin/config/ldap.yml.example +21 -0
  46. data/examples/al-admin/config/routes.rb +26 -0
  47. data/examples/al-admin/db/migrate/001_create_users.rb +16 -0
  48. data/examples/al-admin/lib/accept_http_rails_relative_url_root.rb +9 -0
  49. data/examples/al-admin/lib/authenticated_system.rb +131 -0
  50. data/examples/al-admin/lib/authenticated_test_helper.rb +113 -0
  51. data/examples/al-admin/lib/tasks/gettext.rake +35 -0
  52. data/examples/al-admin/po/en/al-admin.po +190 -0
  53. data/examples/al-admin/po/ja/al-admin.po +190 -0
  54. data/examples/al-admin/po/nl/al-admin.po +202 -0
  55. data/examples/al-admin/public/.htaccess +40 -0
  56. data/examples/al-admin/public/404.html +30 -0
  57. data/examples/al-admin/public/500.html +30 -0
  58. data/examples/al-admin/public/dispatch.cgi +10 -0
  59. data/examples/al-admin/public/dispatch.fcgi +24 -0
  60. data/examples/al-admin/public/dispatch.rb +10 -0
  61. data/examples/al-admin/public/favicon.ico +0 -0
  62. data/examples/al-admin/public/images/rails.png +0 -0
  63. data/examples/al-admin/public/javascripts/application.js +2 -0
  64. data/examples/al-admin/public/javascripts/controls.js +833 -0
  65. data/examples/al-admin/public/javascripts/dragdrop.js +942 -0
  66. data/examples/al-admin/public/javascripts/effects.js +1088 -0
  67. data/examples/al-admin/public/javascripts/prototype.js +2515 -0
  68. data/examples/al-admin/public/robots.txt +1 -0
  69. data/examples/al-admin/public/stylesheets/rails.css +35 -0
  70. data/examples/al-admin/public/stylesheets/screen.css +52 -0
  71. data/examples/al-admin/script/about +3 -0
  72. data/examples/al-admin/script/breakpointer +3 -0
  73. data/examples/al-admin/script/console +3 -0
  74. data/examples/al-admin/script/destroy +3 -0
  75. data/examples/al-admin/script/generate +3 -0
  76. data/examples/al-admin/script/performance/benchmarker +3 -0
  77. data/examples/al-admin/script/performance/profiler +3 -0
  78. data/examples/al-admin/script/plugin +3 -0
  79. data/examples/al-admin/script/process/inspector +3 -0
  80. data/examples/al-admin/script/process/reaper +3 -0
  81. data/examples/al-admin/script/process/spawner +3 -0
  82. data/examples/al-admin/script/runner +3 -0
  83. data/examples/al-admin/script/server +3 -0
  84. data/examples/al-admin/test/fixtures/users.yml +9 -0
  85. data/examples/al-admin/test/functional/account_controller_test.rb +24 -0
  86. data/examples/al-admin/test/functional/directory_controller_test.rb +18 -0
  87. data/examples/al-admin/test/functional/users_controller_test.rb +18 -0
  88. data/examples/al-admin/test/functional/welcome_controller_test.rb +18 -0
  89. data/examples/al-admin/test/run-test.sh +3 -0
  90. data/examples/al-admin/test/test_helper.rb +28 -0
  91. data/examples/al-admin/test/unit/user_test.rb +13 -0
  92. data/examples/al-admin/vendor/plugins/exception_notification/README +111 -0
  93. data/examples/al-admin/vendor/plugins/exception_notification/init.rb +1 -0
  94. data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifiable.rb +99 -0
  95. data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifier.rb +67 -0
  96. data/examples/al-admin/vendor/plugins/exception_notification/lib/exception_notifier_helper.rb +77 -0
  97. data/examples/al-admin/vendor/plugins/exception_notification/test/exception_notifier_helper_test.rb +61 -0
  98. data/examples/al-admin/vendor/plugins/exception_notification/test/test_helper.rb +7 -0
  99. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_backtrace.rhtml +1 -0
  100. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_environment.rhtml +7 -0
  101. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_inspect_model.rhtml +16 -0
  102. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_request.rhtml +3 -0
  103. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_session.rhtml +2 -0
  104. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/_title.rhtml +3 -0
  105. data/examples/al-admin/vendor/plugins/exception_notification/views/exception_notifier/exception_notification.rhtml +6 -0
  106. data/examples/config.yaml.example +5 -0
  107. data/examples/example.der +0 -0
  108. data/examples/example.jpg +0 -0
  109. data/examples/groupadd +41 -0
  110. data/examples/groupdel +35 -0
  111. data/examples/groupls +49 -0
  112. data/examples/groupmod +42 -0
  113. data/examples/lpasswd +55 -0
  114. data/examples/objects/group.rb +13 -0
  115. data/examples/objects/ou.rb +4 -0
  116. data/examples/objects/user.rb +20 -0
  117. data/examples/ouadd +38 -0
  118. data/examples/useradd +45 -0
  119. data/examples/useradd-binary +50 -0
  120. data/examples/userdel +34 -0
  121. data/examples/userls +50 -0
  122. data/examples/usermod +42 -0
  123. data/examples/usermod-binary-add +47 -0
  124. data/examples/usermod-binary-add-time +51 -0
  125. data/examples/usermod-binary-del +48 -0
  126. data/examples/usermod-lang-add +43 -0
  127. data/lib/active_ldap.rb +978 -0
  128. data/lib/active_ldap/adapter/base.rb +512 -0
  129. data/lib/active_ldap/adapter/ldap.rb +233 -0
  130. data/lib/active_ldap/adapter/ldap_ext.rb +69 -0
  131. data/lib/active_ldap/adapter/net_ldap.rb +290 -0
  132. data/lib/active_ldap/adapter/net_ldap_ext.rb +29 -0
  133. data/lib/active_ldap/association/belongs_to.rb +47 -0
  134. data/lib/active_ldap/association/belongs_to_many.rb +42 -0
  135. data/lib/active_ldap/association/collection.rb +83 -0
  136. data/lib/active_ldap/association/has_many.rb +31 -0
  137. data/lib/active_ldap/association/has_many_utils.rb +35 -0
  138. data/lib/active_ldap/association/has_many_wrap.rb +46 -0
  139. data/lib/active_ldap/association/proxy.rb +102 -0
  140. data/lib/active_ldap/associations.rb +172 -0
  141. data/lib/active_ldap/attributes.rb +211 -0
  142. data/lib/active_ldap/base.rb +1256 -0
  143. data/lib/active_ldap/callbacks.rb +19 -0
  144. data/lib/active_ldap/command.rb +48 -0
  145. data/lib/active_ldap/configuration.rb +114 -0
  146. data/lib/active_ldap/connection.rb +234 -0
  147. data/lib/active_ldap/distinguished_name.rb +250 -0
  148. data/lib/active_ldap/escape.rb +12 -0
  149. data/lib/active_ldap/get_text/parser.rb +142 -0
  150. data/lib/active_ldap/get_text_fallback.rb +53 -0
  151. data/lib/active_ldap/get_text_support.rb +12 -0
  152. data/lib/active_ldap/helper.rb +23 -0
  153. data/lib/active_ldap/ldap_error.rb +74 -0
  154. data/lib/active_ldap/object_class.rb +93 -0
  155. data/lib/active_ldap/operations.rb +419 -0
  156. data/lib/active_ldap/populate.rb +44 -0
  157. data/lib/active_ldap/schema.rb +427 -0
  158. data/lib/active_ldap/timeout.rb +75 -0
  159. data/lib/active_ldap/timeout_stub.rb +17 -0
  160. data/lib/active_ldap/user_password.rb +93 -0
  161. data/lib/active_ldap/validations.rb +112 -0
  162. data/po/en/active-ldap.po +3011 -0
  163. data/po/ja/active-ldap.po +3044 -0
  164. data/rails/plugin/active_ldap/README +54 -0
  165. data/rails/plugin/active_ldap/generators/scaffold_al/scaffold_al_generator.rb +7 -0
  166. data/rails/plugin/active_ldap/generators/scaffold_al/templates/ldap.yml +21 -0
  167. data/rails/plugin/active_ldap/init.rb +19 -0
  168. data/test/al-test-utils.rb +362 -0
  169. data/test/command.rb +62 -0
  170. data/test/config.yaml.sample +6 -0
  171. data/test/run-test.rb +31 -0
  172. data/test/test-unit-ext.rb +4 -0
  173. data/test/test-unit-ext/always-show-result.rb +28 -0
  174. data/test/test-unit-ext/backtrace-filter.rb +17 -0
  175. data/test/test-unit-ext/long-display-for-emacs.rb +25 -0
  176. data/test/test-unit-ext/priority.rb +163 -0
  177. metadata +211 -4
@@ -0,0 +1,21 @@
1
+ # Settings specified here will take precedence over those in config/environment.rb
2
+
3
+ # In the development environment your application's code is reloaded on
4
+ # every request. This slows down response time but is perfect for development
5
+ # since you don't have to restart the webserver when you make code changes.
6
+ config.cache_classes = false
7
+
8
+ # Log error messages when you accidentally call methods on nil.
9
+ config.whiny_nils = true
10
+
11
+ # Enable the breakpoint server that script/breakpointer connects to
12
+ config.breakpoint_server = true
13
+
14
+ # Show full error reports and disable caching
15
+ config.action_controller.consider_all_requests_local = true
16
+ config.action_controller.perform_caching = false
17
+ config.action_view.cache_template_extensions = false
18
+ config.action_view.debug_rjs = true
19
+
20
+ # Don't care if the mailer can't send
21
+ config.action_mailer.raise_delivery_errors = false
@@ -0,0 +1,18 @@
1
+ # Settings specified here will take precedence over those in config/environment.rb
2
+
3
+ # The production environment is meant for finished, "live" apps.
4
+ # Code is not reloaded between requests
5
+ config.cache_classes = true
6
+
7
+ # Use a different logger for distributed setups
8
+ # config.logger = SyslogLogger.new
9
+
10
+ # Full error reports are disabled and caching is turned on
11
+ config.action_controller.consider_all_requests_local = false
12
+ config.action_controller.perform_caching = true
13
+
14
+ # Enable serving of images, stylesheets, and javascripts from an asset server
15
+ # config.action_controller.asset_host = "http://assets.example.com"
16
+
17
+ # Disable delivery errors, bad email addresses will be ignored
18
+ # config.action_mailer.raise_delivery_errors = false
@@ -0,0 +1,19 @@
1
+ # Settings specified here will take precedence over those in config/environment.rb
2
+
3
+ # The test environment is used exclusively to run your application's
4
+ # test suite. You never need to work with it otherwise. Remember that
5
+ # your test database is "scratch space" for the test suite and is wiped
6
+ # and recreated between test runs. Don't rely on the data there!
7
+ config.cache_classes = true
8
+
9
+ # Log error messages when you accidentally call methods on nil.
10
+ config.whiny_nils = true
11
+
12
+ # Show full error reports and disable caching
13
+ config.action_controller.consider_all_requests_local = true
14
+ config.action_controller.perform_caching = false
15
+
16
+ # Tell ActionMailer not to deliver emails to the real world.
17
+ # The :test delivery method accumulates sent emails in the
18
+ # ActionMailer::Base.deliveries array.
19
+ config.action_mailer.delivery_method = :test
@@ -0,0 +1,21 @@
1
+ development:
2
+ host: 127.0.0.1
3
+ port: 389
4
+ base: dc=devel,dc=local,dc=net
5
+ bind_dn: cn=admin,dc=local,dc=net
6
+ password: secret
7
+
8
+ test:
9
+ host: 127.0.0.1
10
+ port: 389
11
+ base: dc=test,dc=local,dc=net
12
+ bind_dn: cn=admin,dc=local,dc=net
13
+ password: secret
14
+
15
+ production:
16
+ host: 127.0.0.1
17
+ port: 389
18
+ method: :tls
19
+ base: dc=production,dc=local,dc=net
20
+ bind_dn: cn=admin,dc=local,dc=net
21
+ password: secret
@@ -0,0 +1,26 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+ # The priority is based upon order of creation: first created -> highest priority.
3
+
4
+ # Sample of regular route:
5
+ # map.connect 'products/:id', :controller => 'catalog', :action => 'view'
6
+ # Keep in mind you can assign values other than :controller and :action
7
+
8
+ # Sample of named route:
9
+ # map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
10
+ # This route can be invoked with purchase_url(:id => product.id)
11
+
12
+ # You can have the root of your site routed by hooking up ''
13
+ # -- just remember to delete public/index.html.
14
+ map.top '', :controller => "welcome"
15
+
16
+ map.login 'login', :controller => "account", :action => "login"
17
+ map.logout 'logout', :controller => "account", :action => "logout"
18
+
19
+ # Allow downloading Web Service WSDL as a file with an extension
20
+ # instead of a file named 'wsdl'
21
+ map.connect ':controller/service.wsdl', :action => 'wsdl'
22
+
23
+ # Install the default route as the lowest priority.
24
+ map.connect ':controller/:action/:id.:format'
25
+ map.connect ':controller/:action/:id'
26
+ end
@@ -0,0 +1,16 @@
1
+ class CreateUsers < ActiveRecord::Migration
2
+ def self.up
3
+ create_table "users", :force => true do |t|
4
+ t.column :login, :string
5
+ t.column :dn, :string
6
+ t.column :updated_at, :datetime
7
+ t.column :salt, :string
8
+ t.column :remember_token, :string
9
+ t.column :remember_token_expires_at, :datetime
10
+ end
11
+ end
12
+
13
+ def self.down
14
+ drop_table "users"
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ module ActionController
2
+ class AbstractRequest
3
+ def relative_url_root_with_accept_http_rails_relative_url_root
4
+ @env["RAILS_RELATIVE_URL_ROOT"] ||= @env["HTTP_RAILS_RELATIVE_URL_ROOT"]
5
+ relative_url_root_without_accept_http_rails_relative_url_root
6
+ end
7
+ alias_method_chain :relative_url_root, :accept_http_rails_relative_url_root
8
+ end
9
+ end
@@ -0,0 +1,131 @@
1
+ module AuthenticatedSystem
2
+ protected
3
+ # Returns true or false if the user is logged in.
4
+ # Preloads @current_user with the user model if they're logged in.
5
+ def logged_in?
6
+ current_user != :false
7
+ end
8
+
9
+ def check_connectivity
10
+ if logged_in? and !current_user.connected?
11
+ self.current_user = :false
12
+ end
13
+ true
14
+ end
15
+
16
+ # Accesses the current user from the session.
17
+ def current_user
18
+ @current_user ||= (session[:user] && User.find_by_id(session[:user])) || :false
19
+ end
20
+
21
+ # Store the given user in the session.
22
+ def current_user=(new_user)
23
+ session[:user] = (new_user.nil? || new_user.is_a?(Symbol)) ? nil : new_user.id
24
+ @current_user = new_user
25
+ end
26
+
27
+ # Check if the user is authorized.
28
+ #
29
+ # Override this method in your controllers if you want to restrict access
30
+ # to only a few actions or if you want to check if the user
31
+ # has the correct rights.
32
+ #
33
+ # Example:
34
+ #
35
+ # # only allow nonbobs
36
+ # def authorize?
37
+ # current_user.login != "bob"
38
+ # end
39
+ def authorized?
40
+ true
41
+ end
42
+
43
+ # Filter method to enforce a login requirement.
44
+ #
45
+ # To require logins for all actions, use this in your controllers:
46
+ #
47
+ # before_filter :login_required
48
+ #
49
+ # To require logins for specific actions, use this in your controllers:
50
+ #
51
+ # before_filter :login_required, :only => [ :edit, :update ]
52
+ #
53
+ # To skip this in a subclassed controller:
54
+ #
55
+ # skip_before_filter :login_required
56
+ #
57
+ def login_required
58
+ username, passwd = get_auth_data
59
+ self.current_user ||= User.authenticate(username, passwd) || :false if username && passwd
60
+ logged_in? && authorized? ? true : access_denied
61
+ end
62
+
63
+ # Redirect as appropriate when an access request fails.
64
+ #
65
+ # The default action is to redirect to the login screen.
66
+ #
67
+ # Override this method in your controllers if you want to have special
68
+ # behavior in case the user is not authorized
69
+ # to access the requested action. For example, a popup window might
70
+ # simply close itself.
71
+ def access_denied
72
+ respond_to do |accepts|
73
+ accepts.html do
74
+ store_location
75
+ flash.now[:notice] = _("Please login.")
76
+ redirect_to :controller => '/account', :action => 'login'
77
+ end
78
+ accepts.xml do
79
+ headers["Status"] = "Unauthorized"
80
+ headers["WWW-Authenticate"] = %(Basic realm="Web Password")
81
+ render :text => "Could't authenticate you", :status => '401 Unauthorized'
82
+ end
83
+ end
84
+ false
85
+ end
86
+
87
+ # Store the URI of the current request in the session.
88
+ #
89
+ # We can return to this location by calling #redirect_back_or_default.
90
+ def store_location
91
+ session[:return_to] = url_for(params.merge(:only_path => false))
92
+ end
93
+
94
+ # Redirect to the URI stored by the most recent store_location call or
95
+ # to the passed default.
96
+ def redirect_back_or_default(default)
97
+ session[:return_to] ? redirect_to_url(session[:return_to]) : redirect_to(default)
98
+ session[:return_to] = nil
99
+ end
100
+
101
+ # Inclusion hook to make #current_user and #logged_in?
102
+ # available as ActionView helper methods.
103
+ def self.included(base)
104
+ base.send :helper_method, :current_user, :logged_in?
105
+ end
106
+
107
+ # When called with before_filter :login_from_cookie will check for an :auth_token
108
+ # cookie and log the user back in if apropriate
109
+ def login_from_cookie
110
+ return unless cookies[:auth_token] && !logged_in?
111
+ user = User.find_by_remember_token(cookies[:auth_token])
112
+ if user && user.remember_token?
113
+ user.remember_me
114
+ self.current_user = user
115
+ cookies[:auth_token] = {
116
+ :value => current_user.remember_token,
117
+ :expires => current_user.remember_token_expires_at
118
+ }
119
+ flash.now[:notice] = _("Logged in successfully")
120
+ end
121
+ end
122
+
123
+ private
124
+ @@http_auth_headers = %w(X-HTTP_AUTHORIZATION HTTP_AUTHORIZATION Authorization)
125
+ # gets BASIC auth info
126
+ def get_auth_data
127
+ auth_key = @@http_auth_headers.detect { |h| request.env.has_key?(h) }
128
+ auth_data = request.env[auth_key].to_s.split unless auth_key.blank?
129
+ return auth_data && auth_data[0] == 'Basic' ? Base64.decode64(auth_data[1]).split(':')[0..1] : [nil, nil]
130
+ end
131
+ end
@@ -0,0 +1,113 @@
1
+ module AuthenticatedTestHelper
2
+ # Sets the current user in the session from the user fixtures.
3
+ def login_as(user)
4
+ @request.session[:user] = user ? users(user).id : nil
5
+ end
6
+
7
+ def content_type(type)
8
+ @request.env['Content-Type'] = type
9
+ end
10
+
11
+ def accept(accept)
12
+ @request.env["HTTP_ACCEPT"] = accept
13
+ end
14
+
15
+ def authorize_as(user)
16
+ if user
17
+ @request.env["HTTP_AUTHORIZATION"] = "Basic #{Base64.encode64("#{users(user).login}:test")}"
18
+ accept 'application/xml'
19
+ content_type 'application/xml'
20
+ else
21
+ @request.env["HTTP_AUTHORIZATION"] = nil
22
+ accept nil
23
+ content_type nil
24
+ end
25
+ end
26
+
27
+ # http://project.ioni.st/post/217#post-217
28
+ #
29
+ # def test_new_publication
30
+ # assert_difference(Publication, :count) do
31
+ # post :create, :publication => {...}
32
+ # # ...
33
+ # end
34
+ # end
35
+ #
36
+ def assert_difference(object, method = nil, difference = 1)
37
+ initial_value = object.send(method)
38
+ yield
39
+ assert_equal initial_value + difference, object.send(method), "#{object}##{method}"
40
+ end
41
+
42
+ def assert_no_difference(object, method, &block)
43
+ assert_difference object, method, 0, &block
44
+ end
45
+
46
+ # Assert the block redirects to the login
47
+ #
48
+ # assert_requires_login(:bob) { |c| c.get :edit, :id => 1 }
49
+ #
50
+ def assert_requires_login(login = nil)
51
+ yield HttpLoginProxy.new(self, login)
52
+ end
53
+
54
+ def assert_http_authentication_required(login = nil)
55
+ yield XmlLoginProxy.new(self, login)
56
+ end
57
+
58
+ def reset!(*instance_vars)
59
+ instance_vars = [:controller, :request, :response] unless instance_vars.any?
60
+ instance_vars.collect! { |v| "@#{v}".to_sym }
61
+ instance_vars.each do |var|
62
+ instance_variable_set(var, instance_variable_get(var).class.new)
63
+ end
64
+ end
65
+ end
66
+
67
+ class BaseLoginProxy
68
+ attr_reader :controller
69
+ attr_reader :options
70
+ def initialize(controller, login)
71
+ @controller = controller
72
+ @login = login
73
+ end
74
+
75
+ private
76
+ def authenticated
77
+ raise NotImplementedError
78
+ end
79
+
80
+ def check
81
+ raise NotImplementedError
82
+ end
83
+
84
+ def method_missing(method, *args)
85
+ @controller.reset!
86
+ authenticate
87
+ @controller.send(method, *args)
88
+ check
89
+ end
90
+ end
91
+
92
+ class HttpLoginProxy < BaseLoginProxy
93
+ protected
94
+ def authenticate
95
+ @controller.login_as @login if @login
96
+ end
97
+
98
+ def check
99
+ @controller.assert_redirected_to :controller => 'account', :action => 'login'
100
+ end
101
+ end
102
+
103
+ class XmlLoginProxy < BaseLoginProxy
104
+ protected
105
+ def authenticate
106
+ @controller.accept 'application/xml'
107
+ @controller.authorize_as @login if @login
108
+ end
109
+
110
+ def check
111
+ @controller.assert_response 401
112
+ end
113
+ end
@@ -0,0 +1,35 @@
1
+ # -*- ruby -*-
2
+
3
+ desc "Update *.po/*.pot files and create *.mo from *.po files"
4
+ task :gettext => ["gettext:po:update", "gettext:mo:create"]
5
+
6
+ namespace :gettext do
7
+ namespace :environment do
8
+ desc "Setup environment for GetText"
9
+ task :setup => :environment do
10
+ require "gettext/utils"
11
+ end
12
+ end
13
+
14
+ namespace :po do
15
+ desc "Update po/pot files (GetText)"
16
+ task :update => "gettext:environment:setup" do
17
+ require 'active_ldap/get_text/parser'
18
+ options = {
19
+ # :extract_schema => true, # use this if you have any extra schema.
20
+ }
21
+ GetText::RGetText.add_parser(ActiveLdap::GetText::Parser.new(options))
22
+
23
+ files = Dir.glob("{app,lib,components}/**/*.{rb,rhtml,rxml}")
24
+ GetText.update_pofiles("al-admin", files,
25
+ "AL Admin #{ActiveLdap::VERSION}")
26
+ end
27
+ end
28
+
29
+ namespace :mo do
30
+ desc "Create *.mo from *.po (GetText)"
31
+ task :create => "gettext:environment:setup" do
32
+ GetText.create_mofiles(false, 'po', 'locale')
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,190 @@
1
+ # English translations for AL Admin package.
2
+ # Copyright (C) 2007 Kouhei Sutou
3
+ # This file is distributed under the same license as the AL Admin package.
4
+ # Kouhei Sutou <kou@cozmixng.org>, 2007.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: AL Admin 0.8.3\n"
9
+ "POT-Creation-Date: 2007-08-24 22:25+0900\n"
10
+ "PO-Revision-Date: 2007-08-19 09:44+0900\n"
11
+ "Last-Translator: Kouhei Sutou <kou@cozmixng.org>\n"
12
+ "Language-Team: English\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+
18
+ #: app/models/ldap_user.rb:8
19
+ msgid "LdapUser|Password"
20
+ msgstr ""
21
+
22
+ #: app/models/ldap_user.rb:9
23
+ msgid "LdapUser|Password confirmation"
24
+ msgstr ""
25
+
26
+ #: app/models/user.rb:-
27
+ msgid "User|Dn"
28
+ msgstr ""
29
+
30
+ #: app/models/user.rb:-
31
+ msgid "User|Login"
32
+ msgstr ""
33
+
34
+ #: app/models/user.rb:-
35
+ msgid "User|Remember token"
36
+ msgstr ""
37
+
38
+ #: app/models/user.rb:-
39
+ msgid "User|Remember token expires at"
40
+ msgstr ""
41
+
42
+ #: app/models/user.rb:-
43
+ msgid "User|Salt"
44
+ msgstr ""
45
+
46
+ #: app/models/user.rb:-
47
+ msgid "User|Updated at"
48
+ msgstr ""
49
+
50
+ #: app/models/entry.rb:17
51
+ msgid "disable saving"
52
+ msgstr ""
53
+
54
+ #: app/models/entry.rb:-
55
+ msgid "entry"
56
+ msgstr ""
57
+
58
+ #: app/models/ldap_user.rb:-
59
+ msgid "ldap user"
60
+ msgstr ""
61
+
62
+ #: app/models/user.rb:-
63
+ msgid "user"
64
+ msgstr ""
65
+
66
+ #: app/controllers/account_controller.rb:22 lib/authenticated_system.rb:119
67
+ msgid "Logged in successfully"
68
+ msgstr ""
69
+
70
+ #: app/controllers/account_controller.rb:24
71
+ msgid "Login or Password is incorrect"
72
+ msgstr ""
73
+
74
+ #: app/controllers/account_controller.rb:36
75
+ msgid "Thanks for signing up!"
76
+ msgstr ""
77
+
78
+ #: app/controllers/account_controller.rb:47
79
+ msgid "You have been logged out."
80
+ msgstr ""
81
+
82
+ #: app/controllers/users_controller.rb:26
83
+ msgid "User was successfully updated."
84
+ msgstr ""
85
+
86
+ #: app/controllers/directory_controller.rb:18
87
+ msgid "Populating is only for initialization"
88
+ msgstr ""
89
+
90
+ #: app/views/layouts/application.rhtml:25
91
+ msgid "Top"
92
+ msgstr ""
93
+
94
+ #: app/views/users/show.rhtml:3 app/views/users/edit.rhtml:10
95
+ msgid "Menu|Back"
96
+ msgstr ""
97
+
98
+ #: app/views/users/_form.rhtml:6 app/views/account/sign_up.rhtml:7
99
+ #: app/views/account/login.rhtml:5
100
+ msgid "Password"
101
+ msgstr ""
102
+
103
+ #: app/views/users/_form.rhtml:13 app/views/account/sign_up.rhtml:10
104
+ msgid "Confirm Password"
105
+ msgstr ""
106
+
107
+ #: app/views/users/edit.rhtml:5
108
+ msgid "Command|Update"
109
+ msgstr ""
110
+
111
+ #: app/views/users/edit.rhtml:9
112
+ msgid "Menu|Show"
113
+ msgstr ""
114
+
115
+ #: app/views/users/index.rhtml:2
116
+ msgid "No user."
117
+ msgstr ""
118
+
119
+ #: app/views/users/_object_class_information.rhtml:9
120
+ msgid "objectClass name"
121
+ msgstr ""
122
+
123
+ #: app/views/users/_object_class_information.rhtml:10
124
+ #: app/views/users/_attribute_information.rhtml:8
125
+ msgid "description"
126
+ msgstr ""
127
+
128
+ #: app/views/users/_attribute_information.rhtml:6
129
+ msgid "attribute name"
130
+ msgstr ""
131
+
132
+ #: app/views/users/_attribute_information.rhtml:7
133
+ msgid "value"
134
+ msgstr ""
135
+
136
+ #: app/views/welcome/index.rhtml:3
137
+ msgid "Menu|Users list"
138
+ msgstr ""
139
+
140
+ #: app/views/welcome/index.rhtml:4
141
+ msgid "Menu|Logout"
142
+ msgstr ""
143
+
144
+ #: app/views/welcome/index.rhtml:5
145
+ msgid "Menu|Directory"
146
+ msgstr ""
147
+
148
+ #: app/views/welcome/index.rhtml:7
149
+ msgid "Menu|Login"
150
+ msgstr ""
151
+
152
+ #: app/views/welcome/index.rhtml:8
153
+ msgid "Menu|Sign up"
154
+ msgstr ""
155
+
156
+ #: app/views/welcome/index.rhtml:12
157
+ msgid "Menu|Populate"
158
+ msgstr ""
159
+
160
+ #: app/views/welcome/index.rhtml:14
161
+ msgid "OK?"
162
+ msgstr ""
163
+
164
+ #: app/views/account/sign_up.rhtml:4 app/views/account/login.rhtml:2
165
+ msgid "Login"
166
+ msgstr ""
167
+
168
+ #: app/views/account/sign_up.rhtml:13 app/views/account/sign_up.rhtml:21
169
+ msgid "Sign up"
170
+ msgstr ""
171
+
172
+ #: app/views/account/login.rhtml:8
173
+ msgid "Remember me:"
174
+ msgstr ""
175
+
176
+ #: app/views/account/login.rhtml:11
177
+ msgid "Log in"
178
+ msgstr ""
179
+
180
+ #: app/views/directory/populate.rhtml:1
181
+ msgid "Done."
182
+ msgstr ""
183
+
184
+ #: app/views/directory/populate.rhtml:2
185
+ msgid "Menu|Index"
186
+ msgstr ""
187
+
188
+ #: lib/authenticated_system.rb:75
189
+ msgid "Please login."
190
+ msgstr ""