/
lol_tumblr.rb
128 lines (113 loc) · 4.01 KB
/
lol_tumblr.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# -*- encoding : utf-8 -*-
require 'yaml'
require 'oauth'
require 'webrick'
require 'cgi'
require 'tumblr_client'
module Lolcommits
class LolTumblr < Plugin
TUMBLR_API_ENDPOINT = 'https://www.tumblr.com'
TUMBLR_CONSUMER_KEY = '2FtMEDpEPkxjoUdkpHh42h9wqTu9IVS7Ra0QyNZGixdCvhllN2'
TUMBLR_CONSUMER_SECRET = 'qWuvxgFUR2YyWKtbWOkDTMAiBEbj7ZGaNLaNQPba0PI1N4JpBs'
def run_postcapture
return unless valid_configuration?
puts 'Posting to Tumblr'
r = client.photo(configuration['tumblr_name'], :data => runner.main_image)
if r.key?('id')
puts "\t--> Post successful!"
else
puts "Tumblr post FAILED! #{r}"
end
end
def configure_options!
options = super
# ask user to configure tokens if enabling
if options['enabled']
auth_config = configure_auth!
if auth_config
options = options.merge(auth_config).merge(configure_tumblr_name)
else
return # return nil if configure_auth failed
end
end
options
end
def configure_auth!
puts '---------------------------'
puts 'Need to grab tumblr tokens'
puts '---------------------------'
request_token = oauth_consumer.get_request_token(:exclude_callback => true)
print "\n1) Please open this url in your browser to authorize lolcommits:\n\n"
puts request_token.authorize_url
print "\n2) Launching a local server to complete the OAuth authentication process:\n\n"
begin
server = WEBrick::HTTPServer.new :Port => 3000
server.mount_proc '/', server_callback(server)
server.start
debug "Requesting Tumblr OAuth Token with verifier: #{@verifier}"
access_token = request_token.get_access_token(:oauth_verifier => @verifier)
rescue Errno::EADDRINUSE
puts "\nERROR You have something running on port 3000. Please turn it off to complete the authorization process"
return
rescue OAuth::Unauthorized
puts "\nERROR: Tumblr OAuth verification faile!"
return
end
return unless access_token.token && access_token.secret
puts ''
puts '------------------------------'
puts 'Thanks! Tumblr Auth Succeeded'
puts '------------------------------'
{
'access_token' => access_token.token,
'secret' => access_token.secret
}
end
def configure_tumblr_name
print "\n3) What's your tumblr name? (i.e. 'http://[THIS PART HERE].tumblr.com'): "
{ 'tumblr_name' => STDIN.gets.strip }
end
def configured?
!configuration['enabled'].nil? &&
configuration['access_token'] &&
configuration['secret']
end
def client
@client ||= Tumblr.new(:consumer_key => TUMBLR_CONSUMER_KEY,
:consumer_secret => TUMBLR_CONSUMER_SECRET,
:oauth_token => configuration['access_token'],
:oauth_token_secret => configuration['secret']
)
end
def oauth_consumer
@oauth_consumer ||= OAuth::Consumer.new(TUMBLR_CONSUMER_KEY,
TUMBLR_CONSUMER_SECRET,
:site => TUMBLR_API_ENDPOINT,
:request_endpoint => TUMBLR_API_ENDPOINT,
:http_methdo => :get
)
end
def config_with_default(key, default = nil)
if configuration[key]
configuration[key].strip.empty? ? default : configuration[key]
else
default
end
end
def self.name
'tumblr'
end
def self.runner_order
:postcapture
end
protected
def server_callback(server)
proc do |req, res|
q = CGI.parse req.request_uri.query
@verifier = q['oauth_verifier'][0]
server.stop
res.body = 'Lolcommits authorization complete!'
end
end
end
end