# class Users::OmniauthCallbacksController

### Public Instance Methods

shibboleth() click to toggle source

    # File app/controllers/users/omniauth_callback_controller.rb, line 3
    def shibboleth
      if user_signed_in? && current_user.shibboleth_id.present? && current_user.shibboleth_id.length > 0 then
        flash[:warning] = I18n.t('devise.failure.already_authenticated')
        redirect_to root_path
      else
        auth = request.env['omniauth.auth'] || {}
        eppn = auth['extra']['raw_info']['eppn']
        uid = nil
        if !eppn.blank? then
          uid = eppn
        elsif !auth['uid'].blank? then
          uid = auth['uid']
        elsif !auth['extra']['raw_info']['targeted-id'].blank? then
          uid = auth['extra']['raw_info']['targeted-id']
        end

        if !uid.nil? && !uid.blank? then
                                  s_user = User.where(shibboleth_id: uid).first
                                  # Take out previous record if was not confirmed.

                                  if !s_user.nil? && s_user.confirmed_at.nil? then
                                          sign_out s_user
                                          User.delete(s_user.id)
                                          s_user = nil
                                  end

                                  # Stops Shibboleth ID being blocked if email incorrectly entered.

                                  if !s_user.nil? && s_user.try(:persisted?) then
                                          flash[:notice] = I18n.t('devise.omniauth_callbacks.success', :kind => 'Shibboleth')
                                          sign_in s_user
                      redirect_to root_path
                                  else
                                          if user_signed_in? then
                                                  current_user.update_attribute('shibboleth_id', uid)
                                                  user_id = current_user.id
                                                  sign_out current_user
                                                  session.delete(:shibboleth_data)
                                                  s_user = User.find(user_id)
                                                  sign_in s_user
                          redirect_to edit_user_registration_path
                                          else
                                                  session[:shibboleth_data] = request.env['omniauth.auth']
                                                  session[:shibboleth_data][:uid] = uid
                                                  redirect_to new_user_registration_url(:nosplash => 'true')
                                          end
                                  end
        else
          redirect_to root_path
        end
      end
    end