oauth1 0.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4ca906e79f1d51b69b98d0b74a942eeaa9ec5666
4
+ data.tar.gz: cd36870a23d68a0fc888c3a1ed55e4a551436dda
5
+ SHA512:
6
+ metadata.gz: eb8b8819e07b01661fc2ab05a1865fb857e4580b0a9233bb63d79a17780b05bca59542987e7ad5d20210e8b1a7b768304875f4728b3b12981d972aa6c55aed43
7
+ data.tar.gz: cc6b1c07a31934fb4c741cad7a528c0cb3c1fad0de8a8455ab68f3cb9adbe07c5297e64ccee46b0545e633b0f67f86cd664351a242b3fc4c90f436a960e8d160
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ oauth1
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in oauth1.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Matheus Bras
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # OAuth1
2
+
3
+ Simple OAuth 1.0 helper. Take a look at the specs on how to use it.
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'oauth1'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install oauth1
18
+
19
+ ## Contributing
20
+
21
+ 1. Fork it
22
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
23
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
24
+ 4. Push to the branch (`git push origin my-new-feature`)
25
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/lib/oauth1.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "oauth1/version"
2
+ require "oauth1/helper"
3
+
4
+ module OAuth1
5
+ end
@@ -0,0 +1,55 @@
1
+ require 'active_support/core_ext/hash/reverse_merge'
2
+ require 'addressable/uri'
3
+ require 'cgi'
4
+ require 'base64'
5
+ require 'openssl'
6
+
7
+ module OAuth1
8
+ class Helper
9
+ attr_reader :url_params
10
+
11
+ def initialize(method, url, params, options)
12
+ options.reverse_update({
13
+ version: "1.0",
14
+ signature_method: 'HMAC-SHA1',
15
+ timestamp: Time.now.to_i.to_s,
16
+ nonce: SecureRandom.uuid,
17
+ token: ""
18
+ })
19
+
20
+ @consumer_secret = options.delete(:consumer_secret)
21
+ @url_params = params.merge(prepend_oauth_to_key(options))
22
+
23
+ @method = method.to_s.upcase
24
+ @url = Addressable::URI.parse(url)
25
+ end
26
+
27
+ def signature_base
28
+ [@method, @url.to_s, url_with_params.query].map{|v| CGI.escape(v) }.join('&')
29
+ end
30
+
31
+ def append_signature_to_params
32
+ @url_params[:oauth_signature] = hmac_sha1_signature("#{CGI.escape(@consumer_secret)}&", signature_base)
33
+ end
34
+
35
+ def full_url
36
+ append_signature_to_params
37
+ url_with_params.to_s
38
+ end
39
+
40
+ private
41
+ def url_with_params
42
+ @url.dup.tap{|url| url.query_values = url_params}
43
+ end
44
+
45
+ def prepend_oauth_to_key(options)
46
+ Hash[options.map{|key, value| ["oauth_#{key}".to_sym, value]}]
47
+ end
48
+
49
+ def hmac_sha1_signature(key, signature_string)
50
+ digest = OpenSSL::Digest::Digest.new('sha1')
51
+ hmac = OpenSSL::HMAC.digest(digest, key, signature_string)
52
+ Base64.encode64(hmac).chomp.gsub(/\n/, '')
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,3 @@
1
+ module OAuth1
2
+ VERSION = "0.0.1"
3
+ end
data/oauth1.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'oauth1/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "oauth1"
8
+ spec.version = OAuth1::VERSION
9
+ spec.authors = ["Matheus Bras", "Pedro Nascimento"]
10
+ spec.email = ["matheus@helabs.com.br", "pedro@helabs.com.br"]
11
+ spec.description = %q{Simple OAuth 1.0 Helper to generate URLs with HMAC-SHA1 encoding.}
12
+ spec.summary = %q{In case you need to craft an OAuth 1.0 URL with HMAC-SHA1, this may be helpful.}
13
+ spec.homepage = "http://helabs.com.br/opensource"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec", "~> 2.13.0"
24
+ spec.add_dependency "addressable"
25
+ spec.add_dependency "activesupport", "> 3.0.11"
26
+ end
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe OAuth1::Helper do
4
+ let(:url) { "http://example.com" }
5
+ let(:params) { {my_special_param: "params"} }
6
+ let(:consumer_key) { "some_key" }
7
+ let(:consumer_secret) { "some_secret" }
8
+
9
+ let(:helper) { OAuth1::Helper.new(:get, url, params, {consumer_key: consumer_key, consumer_secret: consumer_secret}) }
10
+
11
+ describe "#url_params" do
12
+ let(:url_params) { helper.url_params }
13
+ it "prepends oauth_ to option keys" do
14
+ url_params.keys.should include(:oauth_consumer_key)
15
+ end
16
+
17
+ it "has some default options" do
18
+ url_params.keys.should include(:oauth_version)
19
+ end
20
+
21
+ it "doesn't include the consumer_secret" do
22
+ url_params.keys.should_not include("oauth_consumer_secret")
23
+ end
24
+
25
+ it "has oauth_token as an empty string" do
26
+ url_params[:oauth_token].should eq("")
27
+ end
28
+ end
29
+
30
+ describe "#url_params" do
31
+ let(:url_params) { helper.url_params }
32
+ it "returns an array with the options and the params" do
33
+ url_params.should have(7).params
34
+ end
35
+
36
+ it "has the user-specified params" do
37
+ url_params.keys.should include(:my_special_param)
38
+ end
39
+ end
40
+
41
+ describe "#signature_base" do
42
+ let(:signature_base) { helper.signature_base }
43
+ it "returns an escaped string with method" do
44
+ signature_base.should match(/GET/)
45
+ end
46
+
47
+ it "returns an escaped string with url" do
48
+ signature_base.should match(/example.com/)
49
+ end
50
+
51
+ it "returns an escaped string with the params" do
52
+ signature_base.should match(/oauth_consumer_key/)
53
+ signature_base.should match(/my_special_param/)
54
+ end
55
+ end
56
+
57
+ describe "#full_url" do
58
+ let(:full_url) { helper.full_url }
59
+ it "returns the url with the params for auth" do
60
+ full_url.should match(/oauth_consumer_key=#{consumer_key}/)
61
+ full_url.should match(/oauth_signature_method=HMAC-SHA1/)
62
+ full_url.should match(/oauth_signature=/)
63
+ full_url.should match(/my_special_param/)
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,8 @@
1
+ require 'oauth1'
2
+
3
+ RSpec.configure do |config|
4
+ config.treat_symbols_as_metadata_keys_with_true_values = true
5
+ config.run_all_when_everything_filtered = true
6
+ config.filter_run :focus
7
+ config.order = 'random'
8
+ end
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: oauth1
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matheus Bras
8
+ - Pedro Nascimento
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ~>
19
+ - !ruby/object:Gem::Version
20
+ version: '1.3'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ~>
26
+ - !ruby/object:Gem::Version
27
+ version: '1.3'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 2.13.0
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 2.13.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: addressable
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: activesupport
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>'
75
+ - !ruby/object:Gem::Version
76
+ version: 3.0.11
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - '>'
82
+ - !ruby/object:Gem::Version
83
+ version: 3.0.11
84
+ description: Simple OAuth 1.0 Helper to generate URLs with HMAC-SHA1 encoding.
85
+ email:
86
+ - matheus@helabs.com.br
87
+ - pedro@helabs.com.br
88
+ executables: []
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - .gitignore
93
+ - .ruby-gemset
94
+ - .ruby-version
95
+ - Gemfile
96
+ - LICENSE.txt
97
+ - README.md
98
+ - Rakefile
99
+ - lib/oauth1.rb
100
+ - lib/oauth1/helper.rb
101
+ - lib/oauth1/version.rb
102
+ - oauth1.gemspec
103
+ - spec/oauth1/helper_spec.rb
104
+ - spec/spec_helper.rb
105
+ homepage: http://helabs.com.br/opensource
106
+ licenses:
107
+ - MIT
108
+ metadata: {}
109
+ post_install_message:
110
+ rdoc_options: []
111
+ require_paths:
112
+ - lib
113
+ required_ruby_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ required_rubygems_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - '>='
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ requirements: []
124
+ rubyforge_project:
125
+ rubygems_version: 2.0.3
126
+ signing_key:
127
+ specification_version: 4
128
+ summary: In case you need to craft an OAuth 1.0 URL with HMAC-SHA1, this may be helpful.
129
+ test_files:
130
+ - spec/oauth1/helper_spec.rb
131
+ - spec/spec_helper.rb