update and fix services

This commit is contained in:
Jonne Haß 2012-10-20 02:59:23 +02:00
parent 6302181582
commit 5a70311fe7
10 changed files with 63 additions and 68 deletions

View file

@ -23,6 +23,7 @@
## Bug Fixes ## Bug Fixes
* Fix posting to Facebook and Tumblr. Have a look at the updated [services guide](https://github.com/diaspora/diaspora/wiki/Howto-setup-services) for new Facebook instructions.
* Fix issue with interacted_at in post fetcher. [#3607](https://github.com/diaspora/diaspora/pull/3607) * Fix issue with interacted_at in post fetcher. [#3607](https://github.com/diaspora/diaspora/pull/3607)
* Fix error with show post Community Spotlight. [#3658](https://github.com/diaspora/diaspora/pull/3658) * Fix error with show post Community Spotlight. [#3658](https://github.com/diaspora/diaspora/pull/3658)
* Fix javascripts problem with read/unread notifications. [#3656](https://github.com/diaspora/diaspora/pull/3656) * Fix javascripts problem with read/unread notifications. [#3656](https://github.com/diaspora/diaspora/pull/3656)

View file

@ -21,11 +21,11 @@ gem 'devise', '2.1.2'
gem 'remotipart', '1.0.2' gem 'remotipart', '1.0.2'
gem 'omniauth', '1.1.1' gem 'omniauth', '1.1.1'
gem 'omniauth-facebook', '1.3.0' gem 'omniauth-facebook', '1.4.1'
gem 'omniauth-tumblr', '1.1' gem 'omniauth-tumblr', '1.1'
gem 'omniauth-twitter', '0.0.11' gem 'omniauth-twitter', '0.0.13'
gem 'twitter', '2.0.2' gem 'twitter', '4.1.1'
# mail # mail

View file

@ -184,7 +184,7 @@ GEM
highline (1.6.12) highline (1.6.12)
hike (1.2.1) hike (1.2.1)
http_accept_language (1.0.2) http_accept_language (1.0.2)
httpauth (0.1) httpauth (0.2.0)
i18n (0.6.1) i18n (0.6.1)
i18n-inflector (2.6.6) i18n-inflector (2.6.6)
i18n (>= 0.4.1) i18n (>= 0.4.1)
@ -207,6 +207,8 @@ GEM
railties (>= 3.1.0) railties (>= 3.1.0)
jruby-pageant (1.1.1) jruby-pageant (1.1.1)
json (1.7.5) json (1.7.5)
jwt (0.1.5)
multi_json (>= 1.0)
kaminari (0.14.1) kaminari (0.14.1)
actionpack (>= 3.0.0) actionpack (>= 3.0.0)
activesupport (>= 3.0.0) activesupport (>= 3.0.0)
@ -240,25 +242,27 @@ GEM
net-ssh-gateway (1.1.0) net-ssh-gateway (1.1.0)
net-ssh (>= 1.99.1) net-ssh (>= 1.99.1)
nokogiri (1.5.5) nokogiri (1.5.5)
oauth (0.4.6) oauth (0.4.7)
oauth2 (0.6.1) oauth2 (0.8.0)
faraday (~> 0.7) faraday (~> 0.8)
httpauth (~> 0.1) httpauth (~> 0.1)
multi_json (~> 1.3) jwt (~> 0.1.4)
multi_json (~> 1.0)
rack (~> 1.2)
omniauth (1.1.1) omniauth (1.1.1)
hashie (~> 1.2) hashie (~> 1.2)
rack rack
omniauth-facebook (1.3.0) omniauth-facebook (1.4.1)
omniauth-oauth2 (~> 1.0.2) omniauth-oauth2 (~> 1.1.0)
omniauth-oauth (1.0.1) omniauth-oauth (1.0.1)
oauth oauth
omniauth (~> 1.0) omniauth (~> 1.0)
omniauth-oauth2 (1.0.2) omniauth-oauth2 (1.1.1)
oauth2 (~> 0.6.0) oauth2 (~> 0.8.0)
omniauth (~> 1.0) omniauth (~> 1.0)
omniauth-tumblr (1.1) omniauth-tumblr (1.1)
omniauth-oauth (~> 1.0) omniauth-oauth (~> 1.0)
omniauth-twitter (0.0.11) omniauth-twitter (0.0.13)
multi_json (~> 1.3) multi_json (~> 1.3)
omniauth-oauth (~> 1.0) omniauth-oauth (~> 1.0)
orm_adapter (0.4.0) orm_adapter (0.4.0)
@ -361,7 +365,7 @@ GEM
libwebsocket (~> 0.1.3) libwebsocket (~> 0.1.3)
multi_json (~> 1.0) multi_json (~> 1.0)
rubyzip rubyzip
simple_oauth (0.1.8) simple_oauth (0.1.9)
sinatra (1.3.3) sinatra (1.3.3)
rack (~> 1.3, >= 1.3.6) rack (~> 1.3, >= 1.3.6)
rack-protection (~> 1.2) rack-protection (~> 1.2)
@ -378,11 +382,10 @@ GEM
treetop (1.4.10) treetop (1.4.10)
polyglot polyglot
polyglot (>= 0.3.1) polyglot (>= 0.3.1)
twitter (2.0.2) twitter (4.1.1)
activesupport (>= 2.3.9, < 4) faraday (~> 0.8)
faraday (~> 0.7) multi_json (~> 1.3)
multi_json (~> 1.0) simple_oauth (~> 0.1.6)
simple_oauth (~> 0.1)
typhoeus (0.3.3) typhoeus (0.3.3)
mime-types mime-types
tzinfo (0.3.33) tzinfo (0.3.33)
@ -452,9 +455,9 @@ DEPENDENCIES
mysql2 (= 0.3.11) mysql2 (= 0.3.11)
nokogiri (= 1.5.5) nokogiri (= 1.5.5)
omniauth (= 1.1.1) omniauth (= 1.1.1)
omniauth-facebook (= 1.3.0) omniauth-facebook (= 1.4.1)
omniauth-tumblr (= 1.1) omniauth-tumblr (= 1.1)
omniauth-twitter (= 0.0.11) omniauth-twitter (= 0.0.13)
rack-cors (= 0.2.7) rack-cors (= 0.2.7)
rack-google-analytics (= 0.11.0) rack-google-analytics (= 0.11.0)
rack-piwik (= 0.1.3) rack-piwik (= 0.1.3)
@ -476,7 +479,7 @@ DEPENDENCIES
selenium-webdriver (= 2.25.0) selenium-webdriver (= 2.25.0)
spork (= 1.0.0rc3) spork (= 1.0.0rc3)
timecop (= 0.5.1) timecop (= 0.5.1)
twitter (= 2.0.2) twitter (= 4.1.1)
typhoeus (= 0.3.3) typhoeus (= 0.3.3)
uglifier (= 1.3.0) uglifier (= 1.3.0)
unicorn (= 4.3.1) unicorn (= 4.3.1)

View file

@ -12,7 +12,7 @@ class Services::Facebook < Service
def post(post, url='') def post(post, url='')
Rails.logger.debug("event=post_to_service type=facebook sender_id=#{self.user_id}") Rails.logger.debug("event=post_to_service type=facebook sender_id=#{self.user_id}")
if post.public? if post.public?
post_to_facebook("https://graph.facebook.com/me/joindiaspora:make", create_open_graph_params(post).to_param) post_to_facebook("https://graph.facebook.com/me/#{AppConfig.services.facebook.open_graph_namespace}:make", create_open_graph_params(post).to_param)
else else
post_to_facebook("https://graph.facebook.com/me/feed", create_post_params(post).to_param) post_to_facebook("https://graph.facebook.com/me/feed", create_post_params(post).to_param)
end end

View file

@ -17,28 +17,28 @@ class Services::Tumblr < Service
end end
def post(post, url='') def post(post, url='')
consumer = OAuth::Consumer.new(consumer_key, consumer_secret, :site => 'http://api.tumblr.com')
consumer = OAuth::Consumer.new(consumer_key, consumer_secret, :site => 'http://tumblr.com')
access = OAuth::AccessToken.new(consumer, self.access_token, self.access_secret) access = OAuth::AccessToken.new(consumer, self.access_token, self.access_secret)
body = build_tumblr_post(post, url) body = build_tumblr_post(post, url)
begin user_info = JSON.parse(access.get("/v2/user/info").body)
resp = access.post('http://tumblr.com/api/write', body) blogs = user_info["response"]["user"]["blogs"].map { |blog| URI.parse(blog['url']) }
resp blogs.each do |blog|
rescue => e access.post("/v2/blog/#{blog.host}/post", body)
nil
end end
end end
def build_tumblr_post(post, url) def build_tumblr_post(post, url)
{:generator => 'diaspora', :type => 'regular', :body => tumblr_template(post, url)} { :type => 'text', :format => "markdown", :body => tumblr_template(post, url) }
end end
def tumblr_template(post, url) def tumblr_template(post, url)
html = '' html = ''
post.photos.each do |photo| post.photos.each do |photo|
html += "<img src='#{photo.url(:scaled_full)}'/><br>" html += "![photo](#{photo.url(:scaled_full)})\n\n"
end end
html += auto_link(post.text, :link => :urls) html += post.text
html += "\n\n[original post](#{url})"
end end
end end

View file

@ -12,9 +12,7 @@ class Services::Twitter < Service
Rails.logger.debug("event=post_to_service type=twitter sender_id=#{self.user_id}") Rails.logger.debug("event=post_to_service type=twitter sender_id=#{self.user_id}")
message = public_message(post, url) message = public_message(post, url)
configure_twitter client.update(message)
Twitter.update(message)
end end
@ -28,25 +26,14 @@ class Services::Twitter < Service
end end
def profile_photo_url def profile_photo_url
configure_twitter client.user(nickname).profile_image_url_https("original")
Twitter.profile_image(nickname, :size => "original")
end end
private private
def configure_twitter def client
twitter_key = AppConfig.services.twitter.key @client ||= Twitter::Client.new(
twitter_consumer_secret = AppConfig.services.twitter.secret oauth_token: self.access_token,
oauth_token_secret: self.access_secret
if twitter_key.blank? || twitter_consumer_secret.blank? )
Rails.logger.info "you have a blank twitter key or secret.... you should look into that"
end
Twitter.configure do |config|
config.consumer_key = twitter_key
config.consumer_secret = twitter_consumer_secret
config.oauth_token = self.access_token
config.oauth_token_secret = self.access_secret
end
end end
end end

View file

@ -5,10 +5,16 @@
Rails.application.config.middleware.use OmniAuth::Builder do Rails.application.config.middleware.use OmniAuth::Builder do
if AppConfig.services.twitter.enable? if AppConfig.services.twitter.enable?
provider :twitter, AppConfig.services.twitter.key, AppConfig.services.twitter.secret provider :twitter, AppConfig.services.twitter.key, AppConfig.services.twitter.secret
Twitter.configure do |config|
config.consumer_key = AppConfig.services.twitter.key
config.consumer_secret = AppConfig.services.twitter.secret
end
end end
if AppConfig.services.tumblr.enable? if AppConfig.services.tumblr.enable?
provider :tumblr, AppConfig.services.tumblr.key, AppConfig.services.tumblr.secret provider :tumblr, AppConfig.services.tumblr.key, AppConfig.services.tumblr.secret
end end
if AppConfig.services.facebook.enable? if AppConfig.services.facebook.enable?
provider :facebook, AppConfig.services.facebook.app_id, AppConfig.services.facebook.secret, provider :facebook, AppConfig.services.facebook.app_id, AppConfig.services.facebook.secret,
{ :display => "popup", :scope => "publish_actions,publish_stream,offline_access", { :display => "popup", :scope => "publish_actions,publish_stream,offline_access",

View file

@ -11,7 +11,7 @@ describe Services::Facebook do
describe '#post' do describe '#post' do
it 'posts a status message to facebook' do it 'posts a status message to facebook' do
stub_request(:post, "https://graph.facebook.com/me/joindiaspora:make"). stub_request(:post, "https://graph.facebook.com/me/#{AppConfig.services.facebook.open_graph_namespace}:make").
to_return(:status => 200, :body => "", :headers => {}) to_return(:status => 200, :body => "", :headers => {})
@service.post(@post) @service.post(@post)
end end
@ -19,13 +19,13 @@ describe Services::Facebook do
it 'swallows exception raised by facebook always being down' do it 'swallows exception raised by facebook always being down' do
pending "temporarily disabled to figure out while some requests are failing" pending "temporarily disabled to figure out while some requests are failing"
stub_request(:post,"https://graph.facebook.com/me/joindiaspora:make"). stub_request(:post,"https://graph.facebook.com/me/#{AppConfig.services.facebook.open_graph_namespace}:make").
to_raise(StandardError) to_raise(StandardError)
@service.post(@post) @service.post(@post)
end end
it 'should call public message' do it 'should call public message' do
stub_request(:post, "https://graph.facebook.com/me/joindiaspora:make"). stub_request(:post, "https://graph.facebook.com/me/#{AppConfig.services.facebook.open_graph_namespace}:make").
to_return(:status => 200) to_return(:status => 200)
url = "foo" url = "foo"
@service.should_not_receive(:public_message) @service.should_not_receive(:public_message)

View file

@ -11,14 +11,12 @@ describe Services::Tumblr do
describe '#post' do describe '#post' do
it 'posts a status message to tumblr' do it 'posts a status message to tumblr' do
response = mock
response.stub(:body).and_return('{"response": {"user": {"blogs": [{"url": "http://foo.tumblr.com"}]}}}')
OAuth::AccessToken.any_instance.should_receive(:get).with("/v2/user/info").and_return(response)
OAuth::AccessToken.any_instance.should_receive(:post) OAuth::AccessToken.any_instance.should_receive(:post)
@service.post(@post) @service.post(@post)
end end
it 'swallows exception raised by tumblr not being webscale' do
OAuth::AccessToken.any_instance.should_receive(:post).and_raise(StandardError)
@service.post(@post)
end
end end
end end

View file

@ -11,18 +11,18 @@ describe Services::Twitter do
describe '#post' do describe '#post' do
it 'posts a status message to twitter' do it 'posts a status message to twitter' do
Twitter.should_receive(:update).with(instance_of(String)) Twitter::Client.any_instance.should_receive(:update).with(instance_of(String))
@service.post(@post) @service.post(@post)
end end
it 'swallows exception raised by twitter always being down' do it 'swallows exception raised by twitter always being down' do
pending pending
Twitter.should_receive(:update).and_raise(StandardError) Twitter::Client.any_instance.should_receive(:update).and_raise(StandardError)
@service.post(@post) @service.post(@post)
end end
it 'should call public message' do it 'should call public message' do
Twitter.stub!(:update) Twitter::Client.any_instance.stub(:update)
url = "foo" url = "foo"
@service.should_receive(:public_message).with(@post, url) @service.should_receive(:public_message).with(@post, url)
@service.post(@post, url) @service.post(@post, url)
@ -74,12 +74,12 @@ describe Services::Twitter do
end end
describe "#profile_photo_url" do describe "#profile_photo_url" do
it 'returns the original profile photo url' do it 'returns the original profile photo url' do
stub_request(:get, "https://api.twitter.com/1/users/profile_image/joindiaspora?size=original"). user_stub = stub
to_return(:status => 302, :body => "", :headers => {:location => "http://a2.twimg.com/profile_images/uid/avatar.png"}) user_stub.should_receive(:profile_image_url_https).with("original").and_return("http://a2.twimg.com/profile_images/uid/avatar.png")
Twitter::Client.any_instance.should_receive(:user).with("joindiaspora").and_return(user_stub)
@service.nickname = "joindiaspora" @service.nickname = "joindiaspora"
@service.profile_photo_url.should == @service.profile_photo_url.should == "http://a2.twimg.com/profile_images/uid/avatar.png"
"http://a2.twimg.com/profile_images/uid/avatar.png"
end end
end end
end end