From 87da8ed256874185cbc92134f07761f5570e19ec Mon Sep 17 00:00:00 2001 From: 404 Date: Wed, 27 Jun 2012 20:43:35 +0800 Subject: [PATCH] added access_key and secret_key auth supported --- Gemfile | 2 +- lib/qiniu/rs/auth.rb | 15 ++++++++++--- lib/qiniu/rs/config.rb | 8 +++++-- lib/qiniu/rs/utils.rb | 24 ++++++++++++++++++++- lib/qiniu/rs/version.rb | 2 +- qiniu-rs.gemspec | 19 +++++++++-------- spec/qiniu/rs/image_logo_for_test.png | Bin 0 -> 12886 bytes spec/qiniu/rs/image_spec.rb | 29 ++++++++++++++++++-------- spec/qiniu/rs/io_spec.rb | 2 ++ spec/qiniu/rs/rs_spec.rb | 2 ++ spec/qiniu/rs_spec.rb | 4 +++- spec/spec_helper.rb | 4 ++-- 12 files changed, 82 insertions(+), 29 deletions(-) create mode 100644 spec/qiniu/rs/image_logo_for_test.png diff --git a/Gemfile b/Gemfile index ec8c558..385e48d 100755 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,4 @@ -source 'https://rubygems.org' +source 'http://ruby.taobao.org' # Specify your gem's dependencies in qiniu-s3.gemspec gemspec diff --git a/lib/qiniu/rs/auth.rb b/lib/qiniu/rs/auth.rb index e7b2ca9..ff7aca8 100755 --- a/lib/qiniu/rs/auth.rb +++ b/lib/qiniu/rs/auth.rb @@ -38,7 +38,7 @@ module Qiniu @refresh_token = refresh_token end - def call(url, data, retry_times = 0) + def call_with_logged_in(url, data, retry_times = 0) raise MissingAccessToken if @access_token.nil? code, data = http_request url, data, {:access_token => @access_token} if code == 401 @@ -51,16 +51,25 @@ module Qiniu if code == 200 retry_times += 1 if Config.settings[:auto_reconnect] && retry_times < Config.settings[:max_retry_times] - return call(url, data, retry_times) + return call_with_logged_in(url, data, retry_times) end end end [code, data] end + def call_with_signature(url, data, retry_times = 0) + code, data = http_request url, data, {:signature_auth => true} + [code, data] + end + def request(url, data = nil) begin - code, data = Auth.call(url, data) + if Config.settings[:access_key].empty? || Config.settings[:secret_key].empty? + code, data = Auth.call_with_logged_in(url, data) + else + code, data = Auth.call_with_signature(url, data) + end rescue [MissingAccessToken, MissingRefreshToken, MissingUsernameOrPassword] => e Log.logger.error e code, data = 401, {} diff --git a/lib/qiniu/rs/config.rb b/lib/qiniu/rs/config.rb index 7b1f6e4..28e5a73 100755 --- a/lib/qiniu/rs/config.rb +++ b/lib/qiniu/rs/config.rb @@ -21,9 +21,13 @@ module Qiniu :content_type => 'application/x-www-form-urlencoded', :auth_url => "https://acc.qbox.me/oauth2/token", :rs_host => "http://rs.qbox.me:10100", + #:rs_host => "http://localhost:10100", :io_host => "http://iovip.qbox.me", - :client_id => "", - :client_secret => "", + #:io_host => "http://localhost:10200", + :client_id => "a75604760c4da4caaa456c0c5895c061c3065c5a", + :client_secret => "75df554a39f58accb7eb293b550fa59618674b7d", + :access_key => "", + :secret_key => "", :auto_reconnect => true, :max_retry_times => 5 } diff --git a/lib/qiniu/rs/utils.rb b/lib/qiniu/rs/utils.rb index 0009cde..0175524 100755 --- a/lib/qiniu/rs/utils.rb +++ b/lib/qiniu/rs/utils.rb @@ -5,6 +5,7 @@ require 'json' require 'zlib' require 'base64' require 'rest_client' +require 'hmac-sha1' require 'qiniu/rs/exceptions' module Qiniu @@ -37,7 +38,12 @@ module Qiniu :accept => :json, :user_agent => Config.settings[:user_agent] } - header_options.merge!('Authorization' => "Bearer #{options[:access_token]}") if options[:access_token] + if options[:signature_auth] && options[:signature_auth] == true + signature_token = generate_qbox_signature(Config.settings[:access_key], Config.settings[:secret_key], url, data) + header_options.merge!('Authorization' => "QBox #{signature_token}") + elsif options[:access_token] + header_options.merge!('Authorization' => "Bearer #{options[:access_token]}") + end case options[:method] when :get response = RestClient.get url, header_options @@ -124,6 +130,22 @@ module Qiniu File.open(filepath, "rb") { |f| Zlib.crc32 f.read } end + def generate_qbox_signature(access_key, secret_key, url, params) + uri = URI.parse(url) + signature = uri.path + query_string = uri.query + signature += '?' + query_string if !query_string.nil? && !query_string.empty? + signature += "\n"; + if params.is_a?(Hash) + total_param = params.map { |key, value| key.to_s+"="+value.to_s } + signature += total_param.join("&") + end + hmac = HMAC::SHA1.new(secret_key) + hmac.update(signature) + encoded_digest = urlsafe_base64_encode(hmac.digest) + %Q(#{access_key}:#{encoded_digest}) + end + end end end diff --git a/lib/qiniu/rs/version.rb b/lib/qiniu/rs/version.rb index 4a7eaf0..d72d0e4 100755 --- a/lib/qiniu/rs/version.rb +++ b/lib/qiniu/rs/version.rb @@ -2,6 +2,6 @@ module Qiniu module RS - VERSION = "1.1.0" + VERSION = "2.0.1" end end diff --git a/qiniu-rs.gemspec b/qiniu-rs.gemspec index 5844ef0..ef1bb5f 100755 --- a/qiniu-rs.gemspec +++ b/qiniu-rs.gemspec @@ -5,8 +5,8 @@ require File.expand_path('../lib/qiniu/rs/version', __FILE__) Gem::Specification.new do |gem| gem.authors = ["why404"] gem.email = ["why404@gmail.com"] - gem.description = %q{Qiniu Cloud Storage SDK for Ruby. See: http://docs.qiniutek.com/v1/sdk/ruby/} - gem.summary = %q{Qiniu Cloud Storage SDK for Ruby} + gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://docs.qiniutek.com/v2/sdk/ruby/} + gem.summary = %q{Qiniu Resource (Cloud) Storage SDK for Ruby} gem.homepage = "https://github.com/why404/qiniu-rs" gem.files = `git ls-files`.split($\) @@ -17,11 +17,12 @@ Gem::Specification.new do |gem| gem.version = Qiniu::RS::VERSION # specify any dependencies here; for example: - gem.add_development_dependency "rake" - gem.add_development_dependency "rspec" - gem.add_development_dependency "fakeweb" - gem.add_runtime_dependency "json" - gem.add_runtime_dependency "rest-client" - gem.add_runtime_dependency "mime-types" - gem.add_runtime_dependency "jruby-openssl" if RUBY_PLATFORM == "java" + gem.add_development_dependency "rake", "~> 0.9.2.2" + gem.add_development_dependency "rspec", "~> 2.10.0" + gem.add_development_dependency "fakeweb", "~> 1.3.0" + gem.add_runtime_dependency "json", "~> 1.7.3" + gem.add_runtime_dependency "rest-client", "~> 1.6.7" + gem.add_runtime_dependency "mime-types", "~> 1.19" + gem.add_runtime_dependency "ruby-hmac", "~> 0.4.0" + gem.add_runtime_dependency "jruby-openssl", "~> 0.7.7" if RUBY_PLATFORM == "java" end diff --git a/spec/qiniu/rs/image_logo_for_test.png b/spec/qiniu/rs/image_logo_for_test.png new file mode 100644 index 0000000000000000000000000000000000000000..571c069a94f4f1fb2a1e16962d8406fd45662e15 GIT binary patch literal 12886 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 A`2YX_ literal 0 HcmV?d00001 diff --git a/spec/qiniu/rs/image_spec.rb b/spec/qiniu/rs/image_spec.rb index dc96723..9075040 100755 --- a/spec/qiniu/rs/image_spec.rb +++ b/spec/qiniu/rs/image_spec.rb @@ -2,14 +2,15 @@ require 'spec_helper' require 'qiniu/rs/auth' -require 'qiniu/rs/rs' +require 'qiniu/rs' require 'qiniu/rs/image' module Qiniu module RS describe Image do - before :all do + before :each do +=begin code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test") code.should == 200 data.should be_an_instance_of(Hash) @@ -17,20 +18,30 @@ module Qiniu data["refresh_token"].should_not be_empty data["refresh_token"].should_not be_empty puts data.inspect +=end @bucket = "test_images" - @key = "test_image.jpg" - code2, data2 = Qiniu::RS::RS.get(@bucket, @key) - code2.should == 200 - data2["url"].should_not be_empty - puts data2.inspect + @key = "image_logo_for_test.png" - @download_url = data2["url"] + local_file = File.expand_path('../' + @key, __FILE__) + + put_url = Qiniu::RS.put_auth(10) + put_url.should_not be_false + put_url.should_not be_empty + result = Qiniu::RS.upload :url => put_url, + :file => local_file, + :bucket => @bucket, + :key => @key, + :enable_crc32_check => true + result.should be_true end context ".info" do it "should works" do - code, data = Qiniu::RS::Image.info(@download_url) + result = Qiniu::RS.get(@bucket, @key) + result["url"].should_not be_empty + puts result.inspect + code, data = Qiniu::RS::Image.info(result["url"]) code.should == 200 puts data.inspect end diff --git a/spec/qiniu/rs/io_spec.rb b/spec/qiniu/rs/io_spec.rb index 7e4b042..0563ca8 100755 --- a/spec/qiniu/rs/io_spec.rb +++ b/spec/qiniu/rs/io_spec.rb @@ -10,6 +10,7 @@ module Qiniu describe IO do before :all do +=begin code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test") code.should == 200 data.should be_an_instance_of(Hash) @@ -17,6 +18,7 @@ module Qiniu data["refresh_token"].should_not be_empty data["refresh_token"].should_not be_empty puts data.inspect +=end code2, data2 = Qiniu::RS::IO.put_auth() code2.should == 200 diff --git a/spec/qiniu/rs/rs_spec.rb b/spec/qiniu/rs/rs_spec.rb index f48ba29..960ab85 100755 --- a/spec/qiniu/rs/rs_spec.rb +++ b/spec/qiniu/rs/rs_spec.rb @@ -11,6 +11,7 @@ module Qiniu describe RS do before :all do +=begin code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test") code.should == 200 data.should be_an_instance_of(Hash) @@ -18,6 +19,7 @@ module Qiniu data["refresh_token"].should_not be_empty data["refresh_token"].should_not be_empty puts data.inspect +=end code2, data2 = Qiniu::RS::IO.put_auth() code2.should == 200 diff --git a/spec/qiniu/rs_spec.rb b/spec/qiniu/rs_spec.rb index 2ba7500..61ac14e 100755 --- a/spec/qiniu/rs_spec.rb +++ b/spec/qiniu/rs_spec.rb @@ -12,12 +12,14 @@ module Qiniu @domain = 'cdn.example.com' end +=begin context ".login!" do it "should works" do result = Qiniu::RS.login!("test@qbox.net", "test") result.should be_true end end +=end context ".put_auth" do it "should works" do @@ -136,7 +138,7 @@ module Qiniu context ".image_info" do it "should works" do - data = Qiniu::RS.get("test_images", "test_image.jpg") + data = Qiniu::RS.get("test_images", "image_logo_for_test.png") data.should_not be_false data.should_not be_empty puts data.inspect diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index a025c73..4161bd4 100755 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -6,7 +6,7 @@ require 'rspec' RSpec.configure do |config| config.before :all do - Qiniu::RS.establish_connection! :client_id => "abcd0c7edcdf914228ed8aa7c6cee2f2bc6155e2", - :client_secret => "fc9ef8b171a74e197b17f85ba23799860ddf3b9c" + Qiniu::RS.establish_connection! :access_key => "3fPHl_SLkPXdioqI_A8_NGngPWVJhlDk2ktRjogH", + :secret_key => "bXTPMDJrVYRJUiSDRFtFYwycVD_mjXxYWrCYlDHy" end end