- if Rails.configuration.new_users_are_active
- # Update is_active to whatever it is at the remote end
- updates[:is_active] = remote_user[:is_active]
- elsif !updates[:is_active]
- # Remote user is inactive; our mirror should be, too.
- updates[:is_active] = false
+ user = User.find_by_uuid(remote_user['uuid'])
+
+ if !user
+ # Create a new record for this user.
+ user = User.new(uuid: remote_user['uuid'],
+ is_active: false,
+ is_admin: false,
+ email: remote_user['email'],
+ owner_uuid: system_user_uuid)
+ user.set_initial_username(requested: remote_user['username'])
+ end
+
+ # Sync user record.
+ if remote_user_prefix == Rails.configuration.Login.LoginCluster
+ # Remote cluster controls our user database, copy both
+ # 'is_active' and 'is_admin'
+ user.is_active = remote_user['is_active']
+ user.is_admin = remote_user['is_admin']
+ else
+ if Rails.configuration.Users.NewUsersAreActive ||
+ Rails.configuration.RemoteClusters[remote_user_prefix].andand["ActivateUsers"]
+ # Default policy is to activate users, so match activate
+ # with the remote record.
+ user.is_active = remote_user['is_active']
+ elsif !remote_user['is_active']
+ # Deactivate user if the remote is inactive, otherwise don't
+ # change 'is_active'.
+ user.is_active = false