Commit 9a5190a5cecb611a73e45fc93bbd7c4e1395c540

Authored by Gabriel Silva
1 parent fa46a8f5

Adds OAuth login without creating a Noosfero user

Signed-off-by: Gabriel Silva <gabriel93.silva@gmail.com>
Signed-off-by: Sabryna Sousa <sabryna.sousa1323@gmail.com>
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb
... ... @@ -5,7 +5,13 @@ class OauthClientPluginPublicController &lt; PublicController
5 5 def callback
6 6 auth = request.env["omniauth.auth"]
7 7 auth_user = environment.users.where(email: auth.info.email).first
8   - if auth_user then login auth_user.person else signup auth end
  8 +
  9 + oauth_params = request.env["omniauth.params"]
  10 + if oauth_params && oauth_params["action"] == "external_login"
  11 + login(auth)
  12 + else
  13 + signup(auth)
  14 + end
9 15 end
10 16  
11 17 def failure
... ... @@ -20,12 +26,23 @@ class OauthClientPluginPublicController &lt; PublicController
20 26  
21 27 protected
22 28  
23   - def login person
  29 + def login auth
24 30 provider = OauthClientPlugin::Provider.find(session[:provider_id])
25   - auth = person.oauth_auths.where(provider_id: provider.id).first
26   - auth ||= person.oauth_auths.create! profile: person, provider: provider, enabled: true
27   - if auth.enabled? && provider.enabled?
28   - self.current_user = person.user
  31 +
  32 + if provider.enabled?
  33 + user = User.new
  34 + user.email = auth.info.email
  35 + user.login = auth.info.name.to_slug
  36 +
  37 + webfinger = OpenStruct.new(
  38 + identifier: user.login,
  39 + name: auth.info.name,
  40 + created_at: Time.now,
  41 + domain: auth.provider,
  42 + email: user.email)
  43 + user.external_person_id = ExternalPerson.get_or_create(webfinger).id
  44 + user.store_oauth_providers
  45 + self.current_user = user
29 46 else
30 47 session[:notice] = _("Can't login with %s") % provider.name
31 48 end
... ...
plugins/oauth_client/views/auth/_oauth_login.html.erb
... ... @@ -4,7 +4,7 @@
4 4 <% end %>
5 5 <% providers.each do |provider| %>
6 6 <span class="provider">
7   - <%= 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 %>
  7 + <%= 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 %>
8 8 </span>
9 9 <% end %>
10 10  
... ...