Noosfero/noosfero

View on GitHub
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class OauthClientPluginPublicController < PublicController
  #  skip_before_action :login_required

  def callback
    auth = request.env["omniauth.auth"]
    auth_user = environment.users.where(email: auth.info.email).first
    if auth_user then login auth_user.person else signup auth end
  end

  def failure
    session[:notice] = _("Failed to login")
    redirect_to root_url
  end

  def destroy
    session[:user] = nil
    redirect_to root_url
  end

  protected

    def login(person)
      provider = OauthClientPlugin::Provider.find(session[:provider_id])
      auth = person.oauth_auths.where(provider_id: provider.id).first
      auth ||= person.oauth_auths.create! profile: person, provider: provider, enabled: true
      if auth.enabled? && provider.enabled?
        self.current_user = person.user
      else
        session[:notice] = _("Can't login with %s") % provider.name
      end

      redirect_to controller: :account, action: :login
    end

    def signup(auth)
      login = auth.info.email.split("@").first
      session[:oauth_data] = auth
      name = auth.info.name
      name ||= auth.extra && auth.extra.raw_info ? auth.extra.raw_info.name : ""
      redirect_to controller: :account, action: :signup, user: { login: login, email: auth.info.email }, profile_data: { name: name }
    end
end