diff --git a/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb b/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb index 16bf9bc..9fbe799 100644 --- a/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb +++ b/plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb @@ -5,7 +5,13 @@ class OauthClientPluginPublicController < PublicController 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 + + oauth_params = request.env["omniauth.params"] + if oauth_params && oauth_params["action"] == "external_login" + login(auth) + else + signup(auth) + end end def failure @@ -20,12 +26,23 @@ class OauthClientPluginPublicController < PublicController protected - def login person + def login auth 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 + + if provider.enabled? + user = User.new + user.email = auth.info.email + user.login = auth.info.name.to_slug + + webfinger = OpenStruct.new( + identifier: user.login, + name: auth.info.name, + created_at: Time.now, + domain: auth.provider, + email: user.email) + user.external_person_id = ExternalPerson.get_or_create(webfinger).id + user.store_oauth_providers + self.current_user = user else session[:notice] = _("Can't login with %s") % provider.name end diff --git a/plugins/oauth_client/views/auth/_oauth_login.html.erb b/plugins/oauth_client/views/auth/_oauth_login.html.erb index 209b21a..6f59ea0 100644 --- a/plugins/oauth_client/views/auth/_oauth_login.html.erb +++ b/plugins/oauth_client/views/auth/_oauth_login.html.erb @@ -4,7 +4,7 @@ <% end %> <% providers.each do |provider| %> - <%= link_to provider.image ? image_tag(provider.image.public_filename) : provider.name, "/plugin/oauth_client/#{provider.strategy}?id=#{provider.id}", :class => provider.strategy, :title => provider.name %> + <%= link_to provider.image ? image_tag(provider.image.public_filename) : provider.name, "/plugin/oauth_client/#{provider.strategy}?id=#{provider.id}&action=external_login", :class => provider.strategy, :title => provider.name %> <% end %> -- libgit2 0.21.2