]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-7254 Update rails authentication to take into account user.local
authorJulien Lancelot <julien.lancelot@sonarsource.com>
Tue, 15 Mar 2016 16:32:37 +0000 (17:32 +0100)
committerJulien Lancelot <julien.lancelot@sonarsource.com>
Mon, 21 Mar 2016 14:03:28 +0000 (15:03 +0100)
server/sonar-web/src/main/webapp/WEB-INF/app/controllers/users_controller.rb
server/sonar-web/src/main/webapp/WEB-INF/app/models/user.rb
server/sonar-web/src/main/webapp/WEB-INF/lib/need_authentication.rb

index 7a0729b623a3c7a9f94a86952087dddafc646995..40221c6465fbc0508bb300f0583a575ad6bc4d4d 100644 (file)
@@ -68,6 +68,7 @@ class UsersController < ApplicationController
     user = User.new(params[:user])
     user.external_identity = user.login
     user.external_identity_provider = 'sonarqube'
+    user.user_local = true
     default_group_name=java_facade.getSettings().getString('sonar.defaultGroup')
     default_group=Group.find_by_name(default_group_name)
     user.groups<<default_group if default_group
index a619978a3058a222c5410617e650652f68ff9552..4d3c4dca84dca4eec4583a712909c24f57548ea3 100644 (file)
@@ -61,8 +61,8 @@ class User < ActiveRecord::Base
   # HACK HACK HACK -- how to do attr_accessible from here?
   # prevents a user from submitting a crafted form that bypasses activation
   # anything else you want your user to change should be added here.
-  attr_accessible :login, :email, :name, :password, :password_confirmation, :external_identity, :external_identity_provider
-  attr_accessor :token_authenticated, :external_identity, :external_identity_provider
+  attr_accessible :login, :email, :name, :password, :password_confirmation, :external_identity, :external_identity_provider, :user_local
+  attr_accessor :token_authenticated, :external_identity, :external_identity_provider, :user_local
 
   ####
   # As now dates are saved in long they should be no more automatically managed by Rails
@@ -93,6 +93,10 @@ class User < ActiveRecord::Base
     write_attribute :external_identity_provider, value
   end
 
+  def user_local=(value)
+    write_attribute :user_local, value
+  end
+
   # SCM accounts should also contain login and email
   def full_scm_accounts
     new_scm_accounts = self.scm_accounts.split(/\r?\n/).reject { |c| c.empty? } if self.scm_accounts
index b3fb607fa07afc4a347641da119a900f683899a0..e6c0bd18d878a5e02f7fb5bf830d830fd18e3427 100644 (file)
@@ -49,8 +49,8 @@ class PluginRealm
   end
 
   def authenticate?(username, password, servlet_request)
-    local_users = Api::Utils.java_facade.getSettings().getStringArray('sonar.security.localUsers')
-    if local_users.include? username
+    countUserLocal = User.count('id', :conditions => ['login=? and user_local=?', username, true])
+    if countUserLocal > 0
       local_auth(username, password)
     else
       auth(username, password, servlet_request)
@@ -134,6 +134,7 @@ class PluginRealm
         user = User.new(:login => username, :name => username, :email => '', :created_at => now, :updated_at => now)
         user.external_identity = username
         user.external_identity_provider = 'sonarqube'
+        user.user_local = false
 
         if details
           user.name = details.getName()