|  | @@ -1,78 +1,80 @@
 | 
	
		
			
				|  |  | -class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
 | 
	
		
			
				|  |  | -  before_action :set_service
 | 
	
		
			
				|  |  | -  before_action :set_user
 | 
	
		
			
				|  |  | +module Users
 | 
	
		
			
				|  |  | +  class OmniauthCallbacksController < Devise::OmniauthCallbacksController
 | 
	
		
			
				|  |  | +    before_action :set_service
 | 
	
		
			
				|  |  | +    before_action :set_user
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  attr_reader :service, :user
 | 
	
		
			
				|  |  | +    attr_reader :service, :user
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def facebook
 | 
	
		
			
				|  |  | -    handle_auth "Facebook"
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  | +    def facebook
 | 
	
		
			
				|  |  | +      handle_auth "Facebook"
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def twitter
 | 
	
		
			
				|  |  | -    handle_auth "Twitter"
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  | +    def twitter
 | 
	
		
			
				|  |  | +      handle_auth "Twitter"
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def github
 | 
	
		
			
				|  |  | -    handle_auth "Github"
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  | +    def github
 | 
	
		
			
				|  |  | +      handle_auth "Github"
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  private
 | 
	
		
			
				|  |  | +    private
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def handle_auth(kind)
 | 
	
		
			
				|  |  | -    if service.present?
 | 
	
		
			
				|  |  | -      service.update(service_attrs)
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -      user.services.create(service_attrs)
 | 
	
		
			
				|  |  | +    def handle_auth(kind)
 | 
	
		
			
				|  |  | +      if service.present?
 | 
	
		
			
				|  |  | +        service.update(service_attrs)
 | 
	
		
			
				|  |  | +      else
 | 
	
		
			
				|  |  | +        user.services.create(service_attrs)
 | 
	
		
			
				|  |  | +      end
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      if user_signed_in?
 | 
	
		
			
				|  |  | +        flash[:notice] = "Your #{kind} account was connected."
 | 
	
		
			
				|  |  | +        redirect_to edit_user_registration_path
 | 
	
		
			
				|  |  | +      else
 | 
	
		
			
				|  |  | +        sign_in_and_redirect user, event: :authentication
 | 
	
		
			
				|  |  | +        set_flash_message :notice, :success, kind: kind
 | 
	
		
			
				|  |  | +      end
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if user_signed_in?
 | 
	
		
			
				|  |  | -      flash[:notice] = "Your #{kind} account was connected."
 | 
	
		
			
				|  |  | -      redirect_to edit_user_registration_path
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -      sign_in_and_redirect user, event: :authentication
 | 
	
		
			
				|  |  | -      set_flash_message :notice, :success, kind: kind
 | 
	
		
			
				|  |  | +    def auth
 | 
	
		
			
				|  |  | +      request.env['omniauth.auth']
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def auth
 | 
	
		
			
				|  |  | -    request.env['omniauth.auth']
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  | +    def set_service
 | 
	
		
			
				|  |  | +      @service = Service.where(provider: auth.provider, uid: auth.uid).first
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def set_service
 | 
	
		
			
				|  |  | -    @service = Service.where(provider: auth.provider, uid: auth.uid).first
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  | +    def set_user
 | 
	
		
			
				|  |  | +      if user_signed_in?
 | 
	
		
			
				|  |  | +        @user = current_user
 | 
	
		
			
				|  |  | +      elsif service.present?
 | 
	
		
			
				|  |  | +        @user = service.user
 | 
	
		
			
				|  |  | +      elsif User.where(email: auth.info.email).any?
 | 
	
		
			
				|  |  | +        # 5. User is logged out and they login to a new account which doesn't match their old one
 | 
	
		
			
				|  |  | +        flash[:alert] = "An account with this email already exists. Please sign in with that account before connecting your #{auth.provider.titleize} account."
 | 
	
		
			
				|  |  | +        redirect_to new_user_session_path
 | 
	
		
			
				|  |  | +      else
 | 
	
		
			
				|  |  | +        @user = create_user
 | 
	
		
			
				|  |  | +      end
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def set_user
 | 
	
		
			
				|  |  | -    if user_signed_in?
 | 
	
		
			
				|  |  | -      @user = current_user
 | 
	
		
			
				|  |  | -    elsif service.present?
 | 
	
		
			
				|  |  | -      @user = service.user
 | 
	
		
			
				|  |  | -    elsif User.where(email: auth.info.email).any?
 | 
	
		
			
				|  |  | -      # 5. User is logged out and they login to a new account which doesn't match their old one
 | 
	
		
			
				|  |  | -      flash[:alert] = "An account with this email already exists. Please sign in with that account before connecting your #{auth.provider.titleize} account."
 | 
	
		
			
				|  |  | -      redirect_to new_user_session_path
 | 
	
		
			
				|  |  | -    else
 | 
	
		
			
				|  |  | -      @user = create_user
 | 
	
		
			
				|  |  | +    def service_attrs
 | 
	
		
			
				|  |  | +      expires_at = auth.credentials.expires_at.present? ? Time.at(auth.credentials.expires_at) : nil
 | 
	
		
			
				|  |  | +      {
 | 
	
		
			
				|  |  | +          provider: auth.provider,
 | 
	
		
			
				|  |  | +          uid: auth.uid,
 | 
	
		
			
				|  |  | +          expires_at: expires_at,
 | 
	
		
			
				|  |  | +          access_token: auth.credentials.token,
 | 
	
		
			
				|  |  | +          access_token_secret: auth.credentials.secret,
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      end
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def service_attrs
 | 
	
		
			
				|  |  | -    expires_at = auth.credentials.expires_at.present? ? Time.at(auth.credentials.expires_at) : nil
 | 
	
		
			
				|  |  | -    {
 | 
	
		
			
				|  |  | -        provider: auth.provider,
 | 
	
		
			
				|  |  | -        uid: auth.uid,
 | 
	
		
			
				|  |  | -        expires_at: expires_at,
 | 
	
		
			
				|  |  | -        access_token: auth.credentials.token,
 | 
	
		
			
				|  |  | -        access_token_secret: auth.credentials.secret,
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  end
 | 
	
		
			
				|  |  | +    def create_user
 | 
	
		
			
				|  |  | +      User.create(
 | 
	
		
			
				|  |  | +        email: auth.info.email,
 | 
	
		
			
				|  |  | +        #name: auth.info.name,
 | 
	
		
			
				|  |  | +        password: Devise.friendly_token[0,20]
 | 
	
		
			
				|  |  | +      )
 | 
	
		
			
				|  |  | +    end
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  def create_user
 | 
	
		
			
				|  |  | -    User.create(
 | 
	
		
			
				|  |  | -      email: auth.info.email,
 | 
	
		
			
				|  |  | -      #name: auth.info.name,
 | 
	
		
			
				|  |  | -      password: Devise.friendly_token[0,20]
 | 
	
		
			
				|  |  | -    )
 | 
	
		
			
				|  |  |    end
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -end
 | 
	
		
			
				|  |  | +end
 |