Commit a651debcf71483e4d8042e57608bd948048f489d
1 parent
ef5d596c
Fixes ExternalUser info override
Signed-off-by: Gabriel Silva <gabriel93.silva@gmail.com>
Showing
7 changed files
with
81 additions
and
44 deletions
Show diff stats
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb
... | ... | @@ -30,13 +30,13 @@ class OauthClientPluginPublicController < PublicController |
30 | 30 | provider = OauthClientPlugin::Provider.find(session[:provider_id]) |
31 | 31 | |
32 | 32 | user = User.new(email: auth_data.info.email, login: auth_data.info.name.to_slug) |
33 | - person_data = OpenStruct.new( | |
33 | + person = OauthClientPlugin::OauthExternalPerson.find_or_create_by( | |
34 | 34 | identifier: auth_data.info.nickname || user.login, |
35 | 35 | name: auth_data.info.name, |
36 | 36 | created_at: Time.now, |
37 | - domain: provider.site || auth_data.provider, | |
38 | - email: user.email) | |
39 | - person = ExternalPerson.get_or_create(person_data) | |
37 | + source: provider.site || auth_data.provider, | |
38 | + email: user.email | |
39 | + ) | |
40 | 40 | user.external_person_id = person.id |
41 | 41 | |
42 | 42 | oauth_auth = person.oauth_auth | ... | ... |
plugins/oauth_client/db/migrate/20160809181708_adds_type_to_external_person.rb
0 → 100644
plugins/oauth_client/lib/ext/external_person.rb
... | ... | @@ -1,38 +0,0 @@ |
1 | -require_dependency 'external_person' | |
2 | - | |
3 | -class ExternalPerson | |
4 | - | |
5 | - has_one :oauth_auth, as: :profile, class_name: 'OauthClientPlugin::Auth', dependent: :destroy | |
6 | - has_one :oauth_provider, through: :oauth_auth, source: :provider | |
7 | - | |
8 | - def avatar | |
9 | - self.oauth_auth.image_url | |
10 | - end | |
11 | - | |
12 | - def image | |
13 | - ExternalPerson::Image.new(self.oauth_auth) | |
14 | - end | |
15 | - | |
16 | - def public_profile_url | |
17 | - self.oauth_auth.profile_url | |
18 | - end | |
19 | - | |
20 | - def url | |
21 | - self.oauth_auth.profile_url | |
22 | - end | |
23 | - | |
24 | - def admin_url | |
25 | - self.oauth_auth.settings_url | |
26 | - end | |
27 | - | |
28 | - class ExternalPerson::Image | |
29 | - def initialize(oauth_auth) | |
30 | - @oauth_auth = oauth_auth | |
31 | - end | |
32 | - | |
33 | - def public_filename(size = nil) | |
34 | - URI(@oauth_auth.image_url(size)) | |
35 | - end | |
36 | - end | |
37 | - | |
38 | -end |
plugins/oauth_client/models/oauth_client_plugin/oauth_external_person.rb
0 → 100644
... | ... | @@ -0,0 +1,35 @@ |
1 | +class OauthClientPlugin::OauthExternalPerson < ExternalPerson | |
2 | + | |
3 | + has_one :oauth_auth, as: :profile, class_name: 'OauthClientPlugin::Auth', dependent: :destroy | |
4 | + has_one :oauth_provider, through: :oauth_auth, source: :provider | |
5 | + | |
6 | + def avatar | |
7 | + self.oauth_auth.image_url | |
8 | + end | |
9 | + | |
10 | + def image | |
11 | + OauthClientPlugin::OauthExternalPerson::Image.new(self.oauth_auth) | |
12 | + end | |
13 | + | |
14 | + def public_profile_url | |
15 | + self.oauth_auth.profile_url | |
16 | + end | |
17 | + | |
18 | + def url | |
19 | + self.oauth_auth.profile_url | |
20 | + end | |
21 | + | |
22 | + def admin_url | |
23 | + self.oauth_auth.settings_url | |
24 | + end | |
25 | + | |
26 | + class OauthClientPlugin::OauthExternalPerson::Image < ExternalPerson::Image | |
27 | + def initialize(oauth_auth) | |
28 | + @oauth_auth = oauth_auth | |
29 | + end | |
30 | + | |
31 | + def public_filename(size = nil) | |
32 | + URI(@oauth_auth.image_url(size)) | |
33 | + end | |
34 | + end | |
35 | +end | ... | ... |
plugins/oauth_client/test/functional/oauth_client_plugin_public_controller_test.rb
... | ... | @@ -95,7 +95,7 @@ class OauthClientPluginPublicControllerTest < ActionController::TestCase |
95 | 95 | request.env["omniauth.params"] = {"action" => "external_login"} |
96 | 96 | |
97 | 97 | get :callback |
98 | - external_person = ExternalPerson.find_by(identifier: auth.info.nickname) | |
98 | + external_person = OauthClientPlugin::OauthExternalPerson.find_by(identifier: auth.info.nickname) | |
99 | 99 | assert_equal provider, external_person.oauth_auth.provider |
100 | 100 | end |
101 | 101 | end | ... | ... |
plugins/oauth_client/test/unit/oauth_external_person_test.rb
0 → 100644
... | ... | @@ -0,0 +1,31 @@ |
1 | + | |
2 | +require 'test_helper' | |
3 | + | |
4 | +class OauthExternalPersonTest < ActiveSupport::TestCase | |
5 | + | |
6 | + def setup | |
7 | + provider = fast_create(OauthClientPlugin::Provider, name: "GitHub") | |
8 | + @external_person = fast_create(ExternalPerson, name: "testuser", email: "test@email.com", | |
9 | + identifier: "testuser") | |
10 | + OauthClientPlugin::GithubAuth.create!(profile: @external_person, provider: provider) | |
11 | + | |
12 | + @oauth_external_person = fast_create(OauthClientPlugin::OauthExternalPerson, | |
13 | + name: "testuser", email: "test@email.com", | |
14 | + identifier: "testuser") | |
15 | + OauthClientPlugin::GithubAuth.create!(profile: @oauth_external_person, | |
16 | + provider: provider) | |
17 | + end | |
18 | + | |
19 | + should "not orverride info from a regular external person" do | |
20 | + assert_not_equal @external_person.avatar, @oauth_external_person.avatar | |
21 | + assert_not_equal @external_person.url, @oauth_external_person.url | |
22 | + assert_not_equal @external_person.admin_url, @oauth_external_person.admin_url | |
23 | + assert_not_equal @external_person.public_profile_url, | |
24 | + @oauth_external_person.public_profile_url | |
25 | + end | |
26 | + | |
27 | + should "not override the Image class from a regular external person" do | |
28 | + assert @external_person.image.is_a? ExternalPerson::Image | |
29 | + assert @oauth_external_person.image.is_a? OauthClientPlugin::OauthExternalPerson::Image | |
30 | + end | |
31 | +end | ... | ... |
plugins/oauth_client/test/unit/provider_test.rb
... | ... | @@ -2,7 +2,7 @@ require 'test_helper' |
2 | 2 | |
3 | 3 | class ProviderTest < ActiveSupport::TestCase |
4 | 4 | |
5 | - should "only create a noosfero provider without a site" do | |
5 | + should "only create a noosfero provider with a site" do | |
6 | 6 | provider = OauthClientPlugin::Provider.new(:name => 'noosfero', :strategy => 'noosfero_oauth2') |
7 | 7 | assert_not provider.valid? |
8 | 8 | ... | ... |