qiniu-rs 1.1.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -1
- data/lib/qiniu/rs/auth.rb +12 -3
- data/lib/qiniu/rs/config.rb +6 -2
- data/lib/qiniu/rs/utils.rb +23 -1
- data/lib/qiniu/rs/version.rb +1 -1
- data/qiniu-rs.gemspec +10 -9
- data/spec/qiniu/rs/image_spec.rb +20 -9
- data/spec/qiniu/rs/io_spec.rb +2 -0
- data/spec/qiniu/rs/rs_spec.rb +2 -0
- data/spec/qiniu/rs_spec.rb +3 -1
- data/spec/spec_helper.rb +2 -2
- metadata +46 -30
data/Gemfile
CHANGED
data/lib/qiniu/rs/auth.rb
CHANGED
@@ -38,7 +38,7 @@ module Qiniu
|
|
38
38
|
@refresh_token = refresh_token
|
39
39
|
end
|
40
40
|
|
41
|
-
def
|
41
|
+
def call_with_logged_in(url, data, retry_times = 0)
|
42
42
|
raise MissingAccessToken if @access_token.nil?
|
43
43
|
code, data = http_request url, data, {:access_token => @access_token}
|
44
44
|
if code == 401
|
@@ -51,16 +51,25 @@ module Qiniu
|
|
51
51
|
if code == 200
|
52
52
|
retry_times += 1
|
53
53
|
if Config.settings[:auto_reconnect] && retry_times < Config.settings[:max_retry_times]
|
54
|
-
return
|
54
|
+
return call_with_logged_in(url, data, retry_times)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
58
58
|
[code, data]
|
59
59
|
end
|
60
60
|
|
61
|
+
def call_with_signature(url, data, retry_times = 0)
|
62
|
+
code, data = http_request url, data, {:signature_auth => true}
|
63
|
+
[code, data]
|
64
|
+
end
|
65
|
+
|
61
66
|
def request(url, data = nil)
|
62
67
|
begin
|
63
|
-
|
68
|
+
if Config.settings[:access_key].empty? || Config.settings[:secret_key].empty?
|
69
|
+
code, data = Auth.call_with_logged_in(url, data)
|
70
|
+
else
|
71
|
+
code, data = Auth.call_with_signature(url, data)
|
72
|
+
end
|
64
73
|
rescue [MissingAccessToken, MissingRefreshToken, MissingUsernameOrPassword] => e
|
65
74
|
Log.logger.error e
|
66
75
|
code, data = 401, {}
|
data/lib/qiniu/rs/config.rb
CHANGED
@@ -21,9 +21,13 @@ module Qiniu
|
|
21
21
|
:content_type => 'application/x-www-form-urlencoded',
|
22
22
|
:auth_url => "https://acc.qbox.me/oauth2/token",
|
23
23
|
:rs_host => "http://rs.qbox.me:10100",
|
24
|
+
#:rs_host => "http://localhost:10100",
|
24
25
|
:io_host => "http://iovip.qbox.me",
|
25
|
-
|
26
|
-
:
|
26
|
+
#:io_host => "http://localhost:10200",
|
27
|
+
:client_id => "a75604760c4da4caaa456c0c5895c061c3065c5a",
|
28
|
+
:client_secret => "75df554a39f58accb7eb293b550fa59618674b7d",
|
29
|
+
:access_key => "",
|
30
|
+
:secret_key => "",
|
27
31
|
:auto_reconnect => true,
|
28
32
|
:max_retry_times => 5
|
29
33
|
}
|
data/lib/qiniu/rs/utils.rb
CHANGED
@@ -5,6 +5,7 @@ require 'json'
|
|
5
5
|
require 'zlib'
|
6
6
|
require 'base64'
|
7
7
|
require 'rest_client'
|
8
|
+
require 'hmac-sha1'
|
8
9
|
require 'qiniu/rs/exceptions'
|
9
10
|
|
10
11
|
module Qiniu
|
@@ -37,7 +38,12 @@ module Qiniu
|
|
37
38
|
:accept => :json,
|
38
39
|
:user_agent => Config.settings[:user_agent]
|
39
40
|
}
|
40
|
-
|
41
|
+
if options[:signature_auth] && options[:signature_auth] == true
|
42
|
+
signature_token = generate_qbox_signature(Config.settings[:access_key], Config.settings[:secret_key], url, data)
|
43
|
+
header_options.merge!('Authorization' => "QBox #{signature_token}")
|
44
|
+
elsif options[:access_token]
|
45
|
+
header_options.merge!('Authorization' => "Bearer #{options[:access_token]}")
|
46
|
+
end
|
41
47
|
case options[:method]
|
42
48
|
when :get
|
43
49
|
response = RestClient.get url, header_options
|
@@ -124,6 +130,22 @@ module Qiniu
|
|
124
130
|
File.open(filepath, "rb") { |f| Zlib.crc32 f.read }
|
125
131
|
end
|
126
132
|
|
133
|
+
def generate_qbox_signature(access_key, secret_key, url, params)
|
134
|
+
uri = URI.parse(url)
|
135
|
+
signature = uri.path
|
136
|
+
query_string = uri.query
|
137
|
+
signature += '?' + query_string if !query_string.nil? && !query_string.empty?
|
138
|
+
signature += "\n";
|
139
|
+
if params.is_a?(Hash)
|
140
|
+
total_param = params.map { |key, value| key.to_s+"="+value.to_s }
|
141
|
+
signature += total_param.join("&")
|
142
|
+
end
|
143
|
+
hmac = HMAC::SHA1.new(secret_key)
|
144
|
+
hmac.update(signature)
|
145
|
+
encoded_digest = urlsafe_base64_encode(hmac.digest)
|
146
|
+
%Q(#{access_key}:#{encoded_digest})
|
147
|
+
end
|
148
|
+
|
127
149
|
end
|
128
150
|
end
|
129
151
|
end
|
data/lib/qiniu/rs/version.rb
CHANGED
data/qiniu-rs.gemspec
CHANGED
@@ -5,8 +5,8 @@ require File.expand_path('../lib/qiniu/rs/version', __FILE__)
|
|
5
5
|
Gem::Specification.new do |gem|
|
6
6
|
gem.authors = ["why404"]
|
7
7
|
gem.email = ["why404@gmail.com"]
|
8
|
-
gem.description = %q{Qiniu Cloud Storage SDK for Ruby. See: http://docs.qiniutek.com/
|
9
|
-
gem.summary = %q{Qiniu Cloud Storage SDK for Ruby}
|
8
|
+
gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://docs.qiniutek.com/v2/sdk/ruby/}
|
9
|
+
gem.summary = %q{Qiniu Resource (Cloud) Storage SDK for Ruby}
|
10
10
|
gem.homepage = "https://github.com/why404/qiniu-rs"
|
11
11
|
|
12
12
|
gem.files = `git ls-files`.split($\)
|
@@ -17,11 +17,12 @@ Gem::Specification.new do |gem|
|
|
17
17
|
gem.version = Qiniu::RS::VERSION
|
18
18
|
|
19
19
|
# specify any dependencies here; for example:
|
20
|
-
gem.add_development_dependency "rake"
|
21
|
-
gem.add_development_dependency "rspec"
|
22
|
-
gem.add_development_dependency "fakeweb"
|
23
|
-
gem.add_runtime_dependency "json"
|
24
|
-
gem.add_runtime_dependency "rest-client"
|
25
|
-
gem.add_runtime_dependency "mime-types"
|
26
|
-
gem.add_runtime_dependency "
|
20
|
+
gem.add_development_dependency "rake", "~> 0.9.2.2"
|
21
|
+
gem.add_development_dependency "rspec", "~> 2.10.0"
|
22
|
+
gem.add_development_dependency "fakeweb", "~> 1.3.0"
|
23
|
+
gem.add_runtime_dependency "json", "~> 1.7.3"
|
24
|
+
gem.add_runtime_dependency "rest-client", "~> 1.6.7"
|
25
|
+
gem.add_runtime_dependency "mime-types", "~> 1.19"
|
26
|
+
gem.add_runtime_dependency "ruby-hmac", "~> 0.4.0"
|
27
|
+
gem.add_runtime_dependency "jruby-openssl", "~> 0.7.7" if RUBY_PLATFORM == "java"
|
27
28
|
end
|
data/spec/qiniu/rs/image_spec.rb
CHANGED
@@ -2,14 +2,15 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
require 'qiniu/rs/auth'
|
5
|
-
require 'qiniu/rs
|
5
|
+
require 'qiniu/rs'
|
6
6
|
require 'qiniu/rs/image'
|
7
7
|
|
8
8
|
module Qiniu
|
9
9
|
module RS
|
10
10
|
describe Image do
|
11
11
|
|
12
|
-
before :
|
12
|
+
before :each do
|
13
|
+
=begin
|
13
14
|
code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test")
|
14
15
|
code.should == 200
|
15
16
|
data.should be_an_instance_of(Hash)
|
@@ -17,20 +18,30 @@ module Qiniu
|
|
17
18
|
data["refresh_token"].should_not be_empty
|
18
19
|
data["refresh_token"].should_not be_empty
|
19
20
|
puts data.inspect
|
21
|
+
=end
|
20
22
|
|
21
23
|
@bucket = "test_images"
|
22
|
-
@key = "
|
23
|
-
code2, data2 = Qiniu::RS::RS.get(@bucket, @key)
|
24
|
-
code2.should == 200
|
25
|
-
data2["url"].should_not be_empty
|
26
|
-
puts data2.inspect
|
24
|
+
@key = "image_logo_for_test.png"
|
27
25
|
|
28
|
-
|
26
|
+
local_file = File.expand_path('../' + @key, __FILE__)
|
27
|
+
|
28
|
+
put_url = Qiniu::RS.put_auth(10)
|
29
|
+
put_url.should_not be_false
|
30
|
+
put_url.should_not be_empty
|
31
|
+
result = Qiniu::RS.upload :url => put_url,
|
32
|
+
:file => local_file,
|
33
|
+
:bucket => @bucket,
|
34
|
+
:key => @key,
|
35
|
+
:enable_crc32_check => true
|
36
|
+
result.should be_true
|
29
37
|
end
|
30
38
|
|
31
39
|
context ".info" do
|
32
40
|
it "should works" do
|
33
|
-
|
41
|
+
result = Qiniu::RS.get(@bucket, @key)
|
42
|
+
result["url"].should_not be_empty
|
43
|
+
puts result.inspect
|
44
|
+
code, data = Qiniu::RS::Image.info(result["url"])
|
34
45
|
code.should == 200
|
35
46
|
puts data.inspect
|
36
47
|
end
|
data/spec/qiniu/rs/io_spec.rb
CHANGED
@@ -10,6 +10,7 @@ module Qiniu
|
|
10
10
|
describe IO do
|
11
11
|
|
12
12
|
before :all do
|
13
|
+
=begin
|
13
14
|
code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test")
|
14
15
|
code.should == 200
|
15
16
|
data.should be_an_instance_of(Hash)
|
@@ -17,6 +18,7 @@ module Qiniu
|
|
17
18
|
data["refresh_token"].should_not be_empty
|
18
19
|
data["refresh_token"].should_not be_empty
|
19
20
|
puts data.inspect
|
21
|
+
=end
|
20
22
|
|
21
23
|
code2, data2 = Qiniu::RS::IO.put_auth()
|
22
24
|
code2.should == 200
|
data/spec/qiniu/rs/rs_spec.rb
CHANGED
@@ -11,6 +11,7 @@ module Qiniu
|
|
11
11
|
describe RS do
|
12
12
|
|
13
13
|
before :all do
|
14
|
+
=begin
|
14
15
|
code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test")
|
15
16
|
code.should == 200
|
16
17
|
data.should be_an_instance_of(Hash)
|
@@ -18,6 +19,7 @@ module Qiniu
|
|
18
19
|
data["refresh_token"].should_not be_empty
|
19
20
|
data["refresh_token"].should_not be_empty
|
20
21
|
puts data.inspect
|
22
|
+
=end
|
21
23
|
|
22
24
|
code2, data2 = Qiniu::RS::IO.put_auth()
|
23
25
|
code2.should == 200
|
data/spec/qiniu/rs_spec.rb
CHANGED
@@ -12,12 +12,14 @@ module Qiniu
|
|
12
12
|
@domain = 'cdn.example.com'
|
13
13
|
end
|
14
14
|
|
15
|
+
=begin
|
15
16
|
context ".login!" do
|
16
17
|
it "should works" do
|
17
18
|
result = Qiniu::RS.login!("test@qbox.net", "test")
|
18
19
|
result.should be_true
|
19
20
|
end
|
20
21
|
end
|
22
|
+
=end
|
21
23
|
|
22
24
|
context ".put_auth" do
|
23
25
|
it "should works" do
|
@@ -136,7 +138,7 @@ module Qiniu
|
|
136
138
|
|
137
139
|
context ".image_info" do
|
138
140
|
it "should works" do
|
139
|
-
data = Qiniu::RS.get("test_images", "
|
141
|
+
data = Qiniu::RS.get("test_images", "image_logo_for_test.png")
|
140
142
|
data.should_not be_false
|
141
143
|
data.should_not be_empty
|
142
144
|
puts data.inspect
|
data/spec/spec_helper.rb
CHANGED
@@ -6,7 +6,7 @@ require 'rspec'
|
|
6
6
|
|
7
7
|
RSpec.configure do |config|
|
8
8
|
config.before :all do
|
9
|
-
Qiniu::RS.establish_connection! :
|
10
|
-
:
|
9
|
+
Qiniu::RS.establish_connection! :access_key => "3fPHl_SLkPXdioqI_A8_NGngPWVJhlDk2ktRjogH",
|
10
|
+
:secret_key => "bXTPMDJrVYRJUiSDRFtFYwycVD_mjXxYWrCYlDHy"
|
11
11
|
end
|
12
12
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qiniu-rs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,105 +9,121 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-06-
|
12
|
+
date: 2012-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
|
-
- -
|
19
|
+
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version:
|
21
|
+
version: 0.9.2.2
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
29
|
+
version: 0.9.2.2
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rspec
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 2.10.0
|
38
38
|
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 2.10.0
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: fakeweb
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 1.3.0
|
54
54
|
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 1.3.0
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: json
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
65
65
|
none: false
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ~>
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 1.7.3
|
70
70
|
type: :runtime
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
|
-
- -
|
75
|
+
- - ~>
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 1.7.3
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: rest-client
|
80
80
|
requirement: !ruby/object:Gem::Requirement
|
81
81
|
none: false
|
82
82
|
requirements:
|
83
|
-
- -
|
83
|
+
- - ~>
|
84
84
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
85
|
+
version: 1.6.7
|
86
86
|
type: :runtime
|
87
87
|
prerelease: false
|
88
88
|
version_requirements: !ruby/object:Gem::Requirement
|
89
89
|
none: false
|
90
90
|
requirements:
|
91
|
-
- -
|
91
|
+
- - ~>
|
92
92
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
93
|
+
version: 1.6.7
|
94
94
|
- !ruby/object:Gem::Dependency
|
95
95
|
name: mime-types
|
96
96
|
requirement: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|
99
|
-
- -
|
99
|
+
- - ~>
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '1.19'
|
102
102
|
type: :runtime
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
|
-
- -
|
107
|
+
- - ~>
|
108
108
|
- !ruby/object:Gem::Version
|
109
|
-
version: '
|
110
|
-
|
109
|
+
version: '1.19'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: ruby-hmac
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ~>
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.4.0
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ~>
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: 0.4.0
|
126
|
+
description: ! 'Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://docs.qiniutek.com/v2/sdk/ruby/'
|
111
127
|
email:
|
112
128
|
- why404@gmail.com
|
113
129
|
executables: []
|
@@ -155,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
155
171
|
version: '0'
|
156
172
|
segments:
|
157
173
|
- 0
|
158
|
-
hash: -
|
174
|
+
hash: -3989750708149586731
|
159
175
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
176
|
none: false
|
161
177
|
requirements:
|
@@ -164,13 +180,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
180
|
version: '0'
|
165
181
|
segments:
|
166
182
|
- 0
|
167
|
-
hash: -
|
183
|
+
hash: -3989750708149586731
|
168
184
|
requirements: []
|
169
185
|
rubyforge_project:
|
170
186
|
rubygems_version: 1.8.24
|
171
187
|
signing_key:
|
172
188
|
specification_version: 3
|
173
|
-
summary: Qiniu Cloud Storage SDK for Ruby
|
189
|
+
summary: Qiniu Resource (Cloud) Storage SDK for Ruby
|
174
190
|
test_files:
|
175
191
|
- spec/qiniu/rs/auth_spec.rb
|
176
192
|
- spec/qiniu/rs/image_spec.rb
|