Feature #2356 » redmine-add-cas-support2.patch
| app/controllers/account_controller.rb | ||
|---|---|---|
| 19 | 19 | helper :custom_fields | 
| 20 | 20 | include CustomFieldsHelper | 
| 21 | 21 |  | 
| 22 | @cas_initialized = false | |
| 23 | class << self; attr_accessor :cas_initialized; end | |
| 24 | ||
| 22 | 25 | # prevents login action to be filtered by check_if_login_required application scope filter | 
| 23 | 26 | skip_before_filter :check_if_login_required | 
| 24 | 27 | |
| 25 | 28 | # Login request and validation | 
| 26 | 29 | def login | 
| 27 | if request.get? | |
| 30 | if Setting.cas? && Setting.cas_force != '0' && !session[:cas_user] | |
| 31 | cas_authenticate | |
| 32 | elsif request.get? | |
| 28 | 33 | logout_user | 
| 29 | 34 | else | 
| 30 | 35 | authenticate_user | 
| ... | ... | |
| 34 | 39 | # Log out current user and redirect to welcome page | 
| 35 | 40 | def logout | 
| 36 | 41 | logout_user | 
| 37 | redirect_to home_url | |
| 42 |     redirect_to home_url unless Setting.cas? | |
| 38 | 43 | end | 
| 39 | 44 |  | 
| 40 | 45 | # Enable user to choose a new password | 
| ... | ... | |
| 125 | 130 | redirect_to :action => 'login' | 
| 126 | 131 | end | 
| 127 | 132 |  | 
| 133 | def cas_authenticate | |
| 134 | unless self.class.cas_initialized | |
| 135 | CASClient::Frameworks::Rails::Filter.configure( | |
| 136 | :cas_base_url => Setting.cas_base_url | |
| 137 | ) | |
| 138 | self.class.cas_initialized = true | |
| 139 | end | |
| 140 | ||
| 141 | CASClient::Frameworks::Rails::Filter.filter(self) unless session[:cas_user] | |
| 142 | if session[:cas_user] | |
| 143 | user = User.find_or_initialize_by_login(session[:cas_user]) | |
| 144 | if user.new_record? | |
| 145 | # Self-registration off | |
| 146 | redirect_to(home_url) && return unless Setting.self_registration? | |
| 147 | ||
| 148 | # Create on the fly | |
| 149 | user.login = session[:cas_user] | |
| 150 | user.mail = session[:cas_user] + Setting.cas_email_suffix | |
| 151 | user.firstname = session[:cas_user] | |
| 152 | user.lastname = session[:cas_user] | |
| 153 | user.random_password | |
| 154 | user.status = User::STATUS_REGISTERED | |
| 155 | ||
| 156 | case Setting.self_registration | |
| 157 | when '1' | |
| 158 | register_by_email_activation(user) do | |
| 159 | onthefly_creation_failed(user) | |
| 160 | end | |
| 161 | when '3' | |
| 162 | register_automatically(user) do | |
| 163 | onthefly_creation_failed(user) | |
| 164 | end | |
| 165 | else | |
| 166 | register_manually_by_administrator(user) do | |
| 167 | onthefly_creation_failed(user) | |
| 168 | end | |
| 169 | end | |
| 170 | else | |
| 171 | # Existing record | |
| 172 | if user.active? | |
| 173 | successful_authentication(user) | |
| 174 | else | |
| 175 | account_pending | |
| 176 | end | |
| 177 | end | |
| 178 | end | |
| 179 | end | |
| 180 | ||
| 128 | 181 | private | 
| 129 | 182 |  | 
| 130 | 183 | def logout_user | 
| 131 | 184 | if User.current.logged? | 
| 132 | 185 | cookies.delete :autologin | 
| 133 | 186 | Token.delete_all(["user_id = ? AND action = ?", User.current.id, 'autologin']) | 
| 187 | ||
| 188 | # Log out of CAS if its there | |
| 189 | CASClient::Frameworks::Rails::Filter.logout(self, home_url) if Setting.cas? | |
| 190 | ||
| 134 | 191 | self.logged_user = nil | 
| 135 | 192 | end | 
| 136 | 193 | end | 
| ... | ... | |
| 197 | 254 | end | 
| 198 | 255 | end | 
| 199 | 256 | end | 
| 200 |  | |
| 257 | ||
| 201 | 258 | def successful_authentication(user) | 
| 202 | 259 | # Valid user | 
| 203 | 260 | self.logged_user = user | 
| app/models/setting.rb | ||
|---|---|---|
| 143 | 143 | def self.openid? | 
| 144 | 144 | Object.const_defined?(:OpenID) && self[:openid].to_i > 0 | 
| 145 | 145 | end | 
| 146 | ||
| 147 | def self.cas? | |
| 148 | Object.const_defined?(:CAS) && self[:cas].to_i > 0 | |
| 149 | end | |
| 146 | 150 |  | 
| 147 | 151 | # Checks if settings have changed since the values were read | 
| 148 | 152 | # and clears the cache hash if it's the case | 
| app/views/account/login.rhtml | ||
|---|---|---|
| 26 | 26 | </td> | 
| 27 | 27 | </tr> | 
| 28 | 28 | <tr> | 
| 29 | <% if Setting.cas? %> | |
| 30 | <tr> | |
| 31 | <td align="left"> | |
| 32 | <%= link_to l(:label_cas_login), :controller => 'account', :action => 'cas_authenticate' %> | |
| 33 | </td> | |
| 34 | </tr> | |
| 35 | <% end %> | |
| 29 | 36 | <td align="left"> | 
| 30 | 37 | <% if Setting.lost_password? %> | 
| 31 | 38 | <%= link_to l(:label_password_lost), :controller => 'account', :action => 'lost_password' %> | 
| app/views/settings/_authentication.rhtml | ||
|---|---|---|
| 16 | 16 | |
| 17 | 17 | <p><%= setting_check_box :openid, :disabled => !Object.const_defined?(:OpenID) %></p> | 
| 18 | 18 | |
| 19 | <p><%= setting_check_box :cas, :disabled => !Object.const_defined?(:CAS) %></p> | |
| 20 | ||
| 21 | <p><%= setting_text_field :cas_base_url, :disabled => !Object.const_defined?(:CAS), :size => 50 %></p> | |
| 22 | ||
| 23 | <p><%= setting_text_field :cas_email_suffix, :disabled => !Object.const_defined?(:CAS), :size => 50 %></p> | |
| 24 | ||
| 25 | <p><%= setting_check_box :cas_force, :disabled => !Object.const_defined?(:CAS) %></p> | |
| 26 | ||
| 19 | 27 | <p><%= setting_check_box :rest_api_enabled %></p> | 
| 20 | 28 | </div> | 
| 21 | 29 | |
| config/environment.rb | ||
|---|---|---|
| 57 | 57 | if File.exists?(File.join(File.dirname(__FILE__), 'additional_environment.rb')) | 
| 58 | 58 | instance_eval File.read(File.join(File.dirname(__FILE__), 'additional_environment.rb')) | 
| 59 | 59 | end | 
| 60 |   config.action_controller.session = { :key => "_myapp_session", :secret => "ksadjfklasdjfkl;asdjfkljasd;klfjasdkl;fj;klasdjfkl;jsdl;kfajsdkfj;aklsdjfk;j" } | |
| 60 | 61 | end | 
| config/locales/en.yml | ||
|---|---|---|
| 327 | 327 | setting_file_max_size_displayed: Max size of text files displayed inline | 
| 328 | 328 | setting_repository_log_display_limit: Maximum number of revisions displayed on file log | 
| 329 | 329 | setting_openid: Allow OpenID login and registration | 
| 330 | setting_cas: Use CAS login and registration | |
| 331 | setting_cas_base_url: CAS server base URL | |
| 332 | setting_cas_email_suffix: Default email suffix for CAS users | |
| 333 | setting_cas_force: ONLY allow login using CAS (this disables normal login) | |
| 330 | 334 | setting_password_min_length: Minimum password length | 
| 331 | 335 | setting_new_project_user_role_id: Role given to a non-admin user who creates a project | 
| 332 | 336 | setting_default_projects_modules: Default enabled modules for new projects | 
| ... | ... | |
| 454 | 458 | label_register: Register | 
| 455 | 459 | label_login_with_open_id_option: or login with OpenID | 
| 456 | 460 | label_password_lost: Lost password | 
| 461 | label_cas_login: Login using CAS | |
| 457 | 462 | label_home: Home | 
| 458 | 463 | label_my_page: My page | 
| 459 | 464 | label_my_account: My account | 
| config/settings.yml | ||
|---|---|---|
| 182 | 182 | default: '' | 
| 183 | 183 | rest_api_enabled: | 
| 184 | 184 | default: 0 | 
| 185 | cas: | |
| 186 | default: 0 | |
| 187 | cas_base_url: | |
| 188 | default: '' | |
| 189 | cas_email_suffix: | |
| 190 | default: '' | |
| 191 | cas_force: | |
| 192 | default: 0 | |
- « Previous
- 1
- 2
- Next »