identity_linker.rb 987 Bytes
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12
module Gitlab
  module Auth
    module GroupSaml
      class IdentityLinker < Gitlab::Auth::Saml::IdentityLinker
        attr_reader :saml_provider

        def initialize(current_user, oauth, saml_provider)
          super(current_user, oauth)

          @saml_provider = saml_provider
        end

13 14 15 16 17 18
        def link
          super

          update_group_membership unless failed?
        end

19 20
        protected

21
        # rubocop: disable CodeReuse/ActiveRecord
22 23 24 25 26 27
        def identity
          @identity ||= current_user.identities.where(provider: :group_saml,
                                                      saml_provider: saml_provider,
                                                      extern_uid: uid.to_s)
                                    .first_or_initialize
        end
28
        # rubocop: enable CodeReuse/ActiveRecord
29 30 31 32

        def update_group_membership
          MembershipUpdater.new(current_user, saml_provider).execute
        end
33 34 35 36
      end
    end
  end
end