diff options
| author | Xinhui | 2016-11-08 12:24:13 +0100 |
|---|---|---|
| committer | Xinhui | 2016-11-08 12:24:13 +0100 |
| commit | 9418590690f14907b87fe22376281bd1bf3cb5a3 (patch) | |
| tree | 0f08b217aea6ce4c91a67929d813690ec37bf46e | |
| parent | e7e8a0e8a7253b358b2f44c4812881f21993402c (diff) | |
| download | chouette-core-9418590690f14907b87fe22376281bd1bf3cb5a3.tar.bz2 | |
Refactoring sso sync user & organisation
| -rw-r--r-- | app/models/organisation.rb | 26 | ||||
| -rw-r--r-- | app/models/user.rb | 41 |
2 files changed, 26 insertions, 41 deletions
diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 86386772c..f98de567e 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -39,20 +39,22 @@ class Organisation < ActiveRecord::Base end end + def self.sync_update code, name, scope + org = Organisation.find_or_initialize_by(code: code) + if scope + org.sso_attributes ||= {} + org.sso_attributes[:functional_scope] = scope.delete('\\"') + end + org.name = name + org.synced_at = Time.now + org.save + org + end + def self.portail_sync self.portail_api_request.each do |el| - Organisation.find_or_create_by(code: el['code']).tap do |org| - org.name = el['name'] - if el['functional_scope'] - org.sso_attributes ||= {} - org.sso_attributes[:functional_scope] = el['functional_scope'].delete('\\"') - end - if org.changed? - org.synced_at = Time.now - org.save - puts "✓ Organisation #{org.name} has been updated" unless Rails.env.test? - end - end + org = self.sync_update el['code'], el['name'], el['functional_scope'] + puts "✓ Organisation #{org.name} has been updated" unless Rails.env.test? end end end diff --git a/app/models/user.rb b/app/models/user.rb index 8f0c32c54..5cfdf0605 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -29,16 +29,10 @@ class User < ActiveRecord::Base after_destroy :check_destroy_organisation def cas_extra_attributes=(extra_attributes) - extra = extra_attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} - self.name = extra[:full_name] - self.email = extra[:email] - - self.organisation = Organisation.find_or_create_by(code: extra[:organisation_code]).tap do |org| - org.name = extra[:organisation_name] - org.sso_attributes ||= {} - org.sso_attributes[:functional_scope] = extra[:functional_scope].delete('\\"') if extra[:functional_scope] - org.synced_at = Time.now - end + extra = extra_attributes.inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo} + self.name = extra[:full_name] + self.email = extra[:email] + self.organisation = Organisation.sync_update extra[:organisation_code], extra[:organisation_name], extra[:functional_scope] end def self.portail_api_request @@ -60,25 +54,14 @@ class User < ActiveRecord::Base def self.portail_sync self.portail_api_request.each do |el| - User.find_or_create_by(username: el['username']).tap do |user| - user.name = "#{el['firstname']} #{el['lastname']}" - user.email = el['email'] - user.locked_at = el['locked_at'] - - # Set organisation - user.organisation = Organisation.find_or_create_by(code: el['organization_code']).tap do |org| - org.name = el['organization_name'] - org.sso_attributes ||= {} - org.sso_attributes[:functional_scope] = el['functional_scope'].delete('\\"') if el['functional_scope'] - org.synced_at = Time.now - end - - if user.changed? - user.synced_at = Time.now - user.save - puts "✓ user #{user.username} has been updated" unless Rails.env.test? - end - end + user = User.find_or_initialize_by(username: el['username']) + user.name = "#{el['firstname']} #{el['lastname']}" + user.email = el['email'] + user.locked_at = el['locked_at'] + user.organisation = Organisation.sync_update el['organization_code'], el['organization_name'], el['functional_scope'] + user.synced_at = Time.now + user.save + puts "✓ user #{user.username} has been updated" unless Rails.env.test? end end |
