Compare View

switch
from
...
to
 
Commits (5)
app/models/external_person.rb
@@ -122,6 +122,10 @@ class ExternalPerson < ActiveRecord::Base @@ -122,6 +122,10 @@ class ExternalPerson < ActiveRecord::Base
122 "#{jid(options)}/#{self.name}" 122 "#{jid(options)}/#{self.name}"
123 end 123 end
124 124
  125 + def name
  126 + "#{self[:name]}@#{self.source}"
  127 + end
  128 +
125 class ExternalPerson::Image 129 class ExternalPerson::Image
126 def initialize(path) 130 def initialize(path)
127 @path = path 131 @path = path
plugins/oauth_client/controllers/public/oauth_client_plugin_public_controller.rb
@@ -32,17 +32,18 @@ class OauthClientPluginPublicController < PublicController @@ -32,17 +32,18 @@ class OauthClientPluginPublicController < PublicController
32 if provider.enabled? 32 if provider.enabled?
33 user = User.new(email: auth.info.email, login: auth.info.name.to_slug) 33 user = User.new(email: auth.info.email, login: auth.info.name.to_slug)
34 webfinger = OpenStruct.new( 34 webfinger = OpenStruct.new(
35 - identifier: user.login, 35 + identifier: auth.info.nickname || user.login,
36 name: auth.info.name, 36 name: auth.info.name,
37 created_at: Time.now, 37 created_at: Time.now,
38 - domain: auth.provider, 38 + domain: provider.site || auth.provider,
39 email: user.email) 39 email: user.email)
40 person = ExternalPerson.get_or_create(webfinger) 40 person = ExternalPerson.get_or_create(webfinger)
41 user.external_person_id = person.id 41 user.external_person_id = person.id
42 42
43 if person.oauth_auth.nil? 43 if person.oauth_auth.nil?
44 - OauthClientPlugin::Auth.create_for_strategy(provider.strategy, external_person: person,  
45 - provider: provider, uid: auth.uid, enabled: true) 44 + auth_data = { external_person: person, provider: provider, enabled: true,
  45 + external_person_uid: auth.uid, external_person_image_url: auth.info.image }
  46 + OauthClientPlugin::Auth.create_for_strategy(provider.strategy, auth_data)
46 end 47 end
47 self.current_user = user 48 self.current_user = user
48 else 49 else
plugins/oauth_client/db/migrate/20160720165808_add_external_profile_to_oauth_auth.rb
1 class AddExternalProfileToOauthAuth < ActiveRecord::Migration 1 class AddExternalProfileToOauthAuth < ActiveRecord::Migration
2 def up 2 def up
3 add_column :oauth_client_plugin_auths, :external_person_id, :integer 3 add_column :oauth_client_plugin_auths, :external_person_id, :integer
4 - add_column :oauth_client_plugin_auths, :uid, :string 4 + add_column :oauth_client_plugin_auths, :external_person_uid, :string
  5 + add_column :oauth_client_plugin_auths, :external_person_image_url, :string
5 add_index :oauth_client_plugin_auths, :external_person_id 6 add_index :oauth_client_plugin_auths, :external_person_id
6 end 7 end
7 8
8 def down 9 def down
9 remove_index :oauth_client_plugin_auths, :external_person_id 10 remove_index :oauth_client_plugin_auths, :external_person_id
10 remove_column :oauth_client_plugin_auths, :external_person_id 11 remove_column :oauth_client_plugin_auths, :external_person_id
11 - remove_column :oauth_client_plugin_auths, :uid 12 + remove_column :oauth_client_plugin_auths, :external_person_uid
  13 + remove_column :oauth_client_plugin_auths, :external_person_image_url
12 end 14 end
13 end 15 end
plugins/oauth_client/lib/ext/external_person.rb
@@ -10,21 +10,19 @@ class ExternalPerson @@ -10,21 +10,19 @@ class ExternalPerson
10 end 10 end
11 11
12 def image 12 def image
13 - ExternalPerson::Image.new(oauth_auth) 13 + ExternalPerson::Image.new(self.oauth_auth)
14 end 14 end
15 15
16 - # This method is un alias to 'url' method of ExternalPerson < ActiveRecord::Base  
17 def public_profile_url 16 def public_profile_url
18 - self.oauth_auth.perfil_url 17 + self.oauth_auth.profile_url
19 end 18 end
20 19
21 -  
22 def url 20 def url
23 - self.oauth_auth.perfil_url 21 + self.oauth_auth.profile_url
24 end 22 end
25 23
26 def admin_url 24 def admin_url
27 - self.oauth_auth.setting_url 25 + self.oauth_auth.settings_url
28 end 26 end
29 27
30 class ExternalPerson::Image 28 class ExternalPerson::Image
plugins/oauth_client/lib/oauth_client_plugin.rb
@@ -105,7 +105,7 @@ class OauthClientPlugin &lt; Noosfero::Plugin @@ -105,7 +105,7 @@ class OauthClientPlugin &lt; Noosfero::Plugin
105 end 105 end
106 106
107 def js_files 107 def js_files
108 - ["script.js"] 108 + ["script.js", "provider.js"]
109 end 109 end
110 110
111 end 111 end
plugins/oauth_client/models/oauth_client_plugin/auth.rb
1 class OauthClientPlugin::Auth < ApplicationRecord 1 class OauthClientPlugin::Auth < ApplicationRecord
2 2
3 attr_accessible :profile, :external_person, :provider, 3 attr_accessible :profile, :external_person, :provider,
4 - :enabled, :access_token, :expires_in, :type, :uid 4 + :enabled, :access_token, :expires_in, :type,
  5 + :external_person_uid, :external_person_image_url
5 6
6 belongs_to :profile, class_name: 'Profile' 7 belongs_to :profile, class_name: 'Profile'
7 belongs_to :external_person, class_name: 'ExternalPerson' 8 belongs_to :external_person, class_name: 'ExternalPerson'
@@ -41,6 +42,14 @@ class OauthClientPlugin::Auth &lt; ApplicationRecord @@ -41,6 +42,14 @@ class OauthClientPlugin::Auth &lt; ApplicationRecord
41 end 42 end
42 end 43 end
43 44
  45 + IMAGE_SIZES = {
  46 + :big => "150",
  47 + :thumb => "100",
  48 + :portrait => "64",
  49 + :minor => "50",
  50 + :icon => "18"
  51 + }
  52 +
44 # Should be implemented by the Provider specific Auth classes 53 # Should be implemented by the Provider specific Auth classes
45 def image_url(size = nil) 54 def image_url(size = nil)
46 nil 55 nil
plugins/oauth_client/models/oauth_client_plugin/facebook_auth.rb
1 class OauthClientPlugin::FacebookAuth < OauthClientPlugin::Auth 1 class OauthClientPlugin::FacebookAuth < OauthClientPlugin::Auth
2 2
3 - IMAGE_SIZES = {  
4 - :big => "150",  
5 - :thumb => "100",  
6 - :portrait => "64",  
7 - :minor => "50",  
8 - :icon => "20"  
9 - }  
10 -  
11 def image_url(size = nil) 3 def image_url(size = nil)
12 - size = ""  
13 - "http://graph.facebook.com/#{self.uid}/picture" 4 + size = IMAGE_SIZES[size] || IMAGE_SIZES[:icon]
  5 + "#{self.external_person_image_url}?width=#{size}"
14 end 6 end
15 7
16 - def perfil_url  
17 - "https://www.facebook.com/#{self.uid}" 8 + def profile_url
  9 + "https://www.facebook.com/#{self.external_person_uid}"
18 end 10 end
19 11
20 - def setting_url 12 + def settings_url
21 "https://www.facebook.com/settings" 13 "https://www.facebook.com/settings"
22 end 14 end
23 15
plugins/oauth_client/models/oauth_client_plugin/github_auth.rb
1 class OauthClientPlugin::GithubAuth < OauthClientPlugin::Auth 1 class OauthClientPlugin::GithubAuth < OauthClientPlugin::Auth
2 2
3 - IMAGE_SIZE = {  
4 - :big => "150",  
5 - :thumb => "100",  
6 - :portrait => "64",  
7 - :minor => "50",  
8 - :icon => "18"  
9 - }  
10 -  
11 def image_url(size = nil) 3 def image_url(size = nil)
12 size = IMAGE_SIZES[size] || IMAGE_SIZES[:icon] 4 size = IMAGE_SIZES[size] || IMAGE_SIZES[:icon]
13 - "https://avatars.githubusercontent.com/u/#{self.uid}?v=3&size=#{size}" 5 + "#{self.external_person_image_url}&size=#{size}"
  6 + end
  7 +
  8 + def profile_url
  9 + "https://www.github.com/#{self.external_person.identifier}"
  10 + end
  11 +
  12 + def settings_url
  13 + "https://www.github.com/settings"
14 end 14 end
15 end 15 end
plugins/oauth_client/models/oauth_client_plugin/google_oauth2_auth.rb 0 → 100644
@@ -0,0 +1,15 @@ @@ -0,0 +1,15 @@
  1 +class OauthClientPlugin::GoogleOauth2Auth < OauthClientPlugin::Auth
  2 +
  3 + def image_url(size = nil)
  4 + size = IMAGE_SIZES[size] || IMAGE_SIZES[:icon]
  5 + "#{self.external_person_image_url}?sz=#{size}"
  6 + end
  7 +
  8 + def profile_url
  9 + "https://plus.google.com/#{self.external_person_uid}"
  10 + end
  11 +
  12 + def settings_url
  13 + "https://plus.google.com/u/0/settings"
  14 + end
  15 +end
plugins/oauth_client/models/oauth_client_plugin/noosfero_oauth2_auth.rb 0 → 100644
@@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
  1 +class OauthClientPlugin::NoosferoOauth2Auth < OauthClientPlugin::Auth
  2 +
  3 + def image_url(size = nil)
  4 + URI.join("http://#{self.provider.client_options[:site]}/profile/#{self.external_person.identifier}/icon/", size)
  5 + end
  6 +
  7 + def profile_url
  8 + "http://#{self.external_person.source}/profile/#{self.external_person.identifier}"
  9 + end
  10 +
  11 + def settings_url
  12 + "http://#{self.external_person.source}/myprofile/#{self.external_person.identifier}"
  13 + end
  14 +end
plugins/oauth_client/models/oauth_client_plugin/provider.rb
@@ -4,6 +4,8 @@ class OauthClientPlugin::Provider &lt; ApplicationRecord @@ -4,6 +4,8 @@ class OauthClientPlugin::Provider &lt; ApplicationRecord
4 4
5 validates_presence_of :name, :strategy 5 validates_presence_of :name, :strategy
6 6
  7 + validate :noosfero_provider_must_have_a_site
  8 +
7 acts_as_having_image 9 acts_as_having_image
8 acts_as_having_settings field: :options 10 acts_as_having_settings field: :options
9 11
@@ -18,4 +20,10 @@ class OauthClientPlugin::Provider &lt; ApplicationRecord @@ -18,4 +20,10 @@ class OauthClientPlugin::Provider &lt; ApplicationRecord
18 20
19 acts_as_having_image 21 acts_as_having_image
20 22
  23 + def noosfero_provider_must_have_a_site
  24 + if self.strategy == 'noosfero_oauth2' && (self.client_options.nil? || self.client_options[:site].blank?)
  25 + self.errors.add(:site, "A Noosfero provider must have a site")
  26 + end
  27 + end
  28 +
21 end 29 end
plugins/oauth_client/models/oauth_client_plugin/twitter_auth.rb 0 → 100644
@@ -0,0 +1,23 @@ @@ -0,0 +1,23 @@
  1 +class OauthClientPlugin::TwitterAuth < OauthClientPlugin::Auth
  2 +
  3 + IMAGE_SIZES = {
  4 + :big => "",
  5 + :thumb => "_bigger",
  6 + :portrait => "_normal",
  7 + :minor => "_normal",
  8 + :icon => "_mini"
  9 + }
  10 +
  11 + def image_url(size = nil)
  12 + size = IMAGE_SIZES[size] || IMAGE_SIZES[:icon]
  13 + self.external_person_image_url.gsub("_normal", size)
  14 + end
  15 +
  16 + def profile_url
  17 + "https://twitter.com/#{self.external_person.identifier}"
  18 + end
  19 +
  20 + def settings_url
  21 + "https://twitter.com/settings"
  22 + end
  23 +end
plugins/oauth_client/public/provider.js 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +function toggle_strategy(strategyName) {
  2 + if (strategyName == "noosfero_oauth2") {
  3 + $(".client-url").addClass("required-field");
  4 + } else {
  5 + $(".client-url").removeClass("required-field");
  6 + }
  7 +}
  8 +
  9 +$(document).on("change", "select#oauth_client_plugin_provider_strategy", function() {
  10 + var selectedOption = $(this).find(":selected").text();
  11 + toggle_strategy(selectedOption);
  12 +});
plugins/oauth_client/test/unit/provider_test.rb 0 → 100644
@@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
  1 +require 'test_helper'
  2 +
  3 +class ProviderTest < ActiveSupport::TestCase
  4 +
  5 + should "only create a noosfero provider without a site" do
  6 + provider = OauthClientPlugin::Provider.new(:name => 'noosfero', :strategy => 'noosfero_oauth2')
  7 + assert_not provider.valid?
  8 +
  9 + provider.client_options = { :site => "http://noosfero.org" }
  10 + assert provider.valid?
  11 + end
  12 +
  13 + should "create a regular provider without a site" do
  14 + provider = OauthClientPlugin::Provider.new(:name => 'github', :strategy => 'github')
  15 + assert provider.valid?
  16 + end
  17 +end
plugins/oauth_client/views/oauth_client_plugin_admin/edit.html.erb
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 </div> 8 </div>
9 9
10 <div class="name"> 10 <div class="name">
11 - <%= labelled_form_field _('Name'), f.text_field(:name) %> 11 + <%= required labelled_form_field _('Name'), f.text_field(:name) %>
12 </div> 12 </div>
13 13
14 <div class="strategy"> 14 <div class="strategy">
@@ -27,8 +27,10 @@ @@ -27,8 +27,10 @@
27 <%= labelled_form_field _('Client Secret'), f.text_field(:client_secret) %> 27 <%= labelled_form_field _('Client Secret'), f.text_field(:client_secret) %>
28 </div> 28 </div>
29 29
30 - <% if File.exists?(File.join(File.dirname(__FILE__), "_#{@provider.strategy}.html.erb")) %>  
31 - <%= render :partial => "#{@provider.strategy}", :locals => {:f => f, :provider => @provider} %> 30 + <%= f.fields_for :client_options, OpenStruct.new(@provider.options[:client_options]) do |c| %>
  31 + <div class="client-url <%= "required-field" if @provider.strategy == "noosfero_oauth2" %>">
  32 + <%= labelled_form_field _('Client Url'), c.text_field(:site) %>
  33 + </div>
32 <% end %> 34 <% end %>
33 35
34 <div class="image-icon"> 36 <div class="image-icon">