Commit 9a5190a5cecb611a73e45fc93bbd7c4e1395c540
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>
Showing
2 changed files
with
24 additions
and
7 deletions
Show diff stats
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb
... | ... | @@ -5,7 +5,13 @@ class OauthClientPluginPublicController < 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 < 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 | ... | ... |