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,13 +30,13 @@ class OauthClientPluginPublicController < PublicController | ||
30 | provider = OauthClientPlugin::Provider.find(session[:provider_id]) | 30 | provider = OauthClientPlugin::Provider.find(session[:provider_id]) |
31 | 31 | ||
32 | user = User.new(email: auth_data.info.email, login: auth_data.info.name.to_slug) | 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 | identifier: auth_data.info.nickname || user.login, | 34 | identifier: auth_data.info.nickname || user.login, |
35 | name: auth_data.info.name, | 35 | name: auth_data.info.name, |
36 | created_at: Time.now, | 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 | user.external_person_id = person.id | 40 | user.external_person_id = person.id |
41 | 41 | ||
42 | oauth_auth = person.oauth_auth | 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,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 @@ | @@ -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,7 +95,7 @@ class OauthClientPluginPublicControllerTest < ActionController::TestCase | ||
95 | request.env["omniauth.params"] = {"action" => "external_login"} | 95 | request.env["omniauth.params"] = {"action" => "external_login"} |
96 | 96 | ||
97 | get :callback | 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 | assert_equal provider, external_person.oauth_auth.provider | 99 | assert_equal provider, external_person.oauth_auth.provider |
100 | end | 100 | end |
101 | end | 101 | end |
plugins/oauth_client/test/unit/oauth_external_person_test.rb
0 → 100644
@@ -0,0 +1,31 @@ | @@ -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,7 +2,7 @@ require 'test_helper' | ||
2 | 2 | ||
3 | class ProviderTest < ActiveSupport::TestCase | 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 | provider = OauthClientPlugin::Provider.new(:name => 'noosfero', :strategy => 'noosfero_oauth2') | 6 | provider = OauthClientPlugin::Provider.new(:name => 'noosfero', :strategy => 'noosfero_oauth2') |
7 | assert_not provider.valid? | 7 | assert_not provider.valid? |
8 | 8 |