warden-hmac-authentication 0.2.0 → 0.3.0

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.
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'trollop'
4
+ require 'hmac_signer'
5
+
6
+ opts = Trollop::options do
7
+
8
+ version "warden-hmac-sign 0.3.0 (c) 2011 Felix Gilcher, Florian Gilcher"
9
+ banner <<-EOS
10
+ warden-hmac-authentication is used to create and validate signed urls for
11
+ usage with the HMAC authentication scheme used by
12
+ https://github.com/Asquera/warden-hmac-authentication
13
+
14
+ Usage:
15
+ warden-hmac-authentication [options] <command> url
16
+
17
+ where command is one of
18
+
19
+ sign: signs the given url
20
+ validate: validates the given url
21
+
22
+ and where [options] are:
23
+
24
+ EOS
25
+
26
+ opt :algorithm, "The hashing algorithm to use for the HMAC", :type => :string, :default => "sha1"
27
+ opt :secret, "The shared secret for the HMAC", :type => :string, :required => true
28
+ opt :"auth-param", "The name for the auth param in the url", :default => "auth"
29
+ opt :"date", "The date to use for the signature (defaults to now)"
30
+ end
31
+
32
+ cmd = ARGV.shift
33
+ Trollop::die "You must give a command" if cmd.nil?
34
+ Trollop::die "You command must be one of [sign, validate]" unless ["sign", "validate"].include? cmd
35
+ Trollop::die "You must provide a URL" if ARGV.empty?
36
+ url = ARGV.shift
37
+
38
+ secret = opts.delete(:secret)
39
+ algorithm = opts.delete(:algorithm)
40
+
41
+ signer = HMACSigner.new(algorithm)
42
+
43
+ if "sign" == cmd
44
+ puts signer.sign_url(url, secret, opts)
45
+ else
46
+ success = signer.validate_url_signature(url, secret, opts)
47
+ if success
48
+ puts "URL #{url} is valid"
49
+ exit 0
50
+ else
51
+ puts "URL #{url} does not contain a valid signature"
52
+ exit 1
53
+ end
54
+ end
data/lib/hmac_signer.rb CHANGED
@@ -195,7 +195,7 @@ class HMACSigner
195
195
  }
196
196
  auth_params[:nonce] = opts[:nonce] unless opts[:nonce].nil?
197
197
 
198
- query_values = uri.query_values
198
+ query_values = uri.query_values || {}
199
199
  query_values[opts[:auth_param]] = auth_params
200
200
  uri.query_values = query_values
201
201
  else
metadata CHANGED
@@ -1,103 +1,111 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: warden-hmac-authentication
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
4
5
  prerelease:
5
- version: 0.2.0
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Felix Gilcher
9
9
  - Florian Gilcher
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
-
14
- date: 2011-07-16 00:00:00 +02:00
13
+ date: 2011-07-16 00:00:00.000000000 +02:00
15
14
  default_executable:
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
18
17
  name: addressable
19
- prerelease: false
20
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &10322600 !ruby/object:Gem::Requirement
21
19
  none: false
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: "0"
20
+ requirements:
21
+ - - ! '>='
22
+ - !ruby/object:Gem::Version
23
+ version: '0'
26
24
  type: :runtime
27
- version_requirements: *id001
28
- - !ruby/object:Gem::Dependency
25
+ prerelease: false
26
+ version_requirements: *10322600
27
+ - !ruby/object:Gem::Dependency
29
28
  name: rack
29
+ requirement: &10322100 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
30
36
  prerelease: false
31
- requirement: &id002 !ruby/object:Gem::Requirement
37
+ version_requirements: *10322100
38
+ - !ruby/object:Gem::Dependency
39
+ name: trollop
40
+ requirement: &10321580 !ruby/object:Gem::Requirement
32
41
  none: false
33
- requirements:
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
37
46
  type: :runtime
38
- version_requirements: *id002
39
- - !ruby/object:Gem::Dependency
40
- name: yard
41
47
  prerelease: false
42
- requirement: &id003 !ruby/object:Gem::Requirement
48
+ version_requirements: *10321580
49
+ - !ruby/object:Gem::Dependency
50
+ name: yard
51
+ requirement: &10321140 !ruby/object:Gem::Requirement
43
52
  none: false
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: "0"
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
48
57
  type: :development
49
- version_requirements: *id003
50
- - !ruby/object:Gem::Dependency
51
- name: rdiscount
52
58
  prerelease: false
53
- requirement: &id004 !ruby/object:Gem::Requirement
59
+ version_requirements: *10321140
60
+ - !ruby/object:Gem::Dependency
61
+ name: rdiscount
62
+ requirement: &10320640 !ruby/object:Gem::Requirement
54
63
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- version: "0"
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
59
68
  type: :development
60
- version_requirements: *id004
61
- - !ruby/object:Gem::Dependency
62
- name: simplecov
63
69
  prerelease: false
64
- requirement: &id005 !ruby/object:Gem::Requirement
70
+ version_requirements: *10320640
71
+ - !ruby/object:Gem::Dependency
72
+ name: simplecov
73
+ requirement: &10320200 !ruby/object:Gem::Requirement
65
74
  none: false
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- version: "0"
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
70
79
  type: :development
71
- version_requirements: *id005
72
- - !ruby/object:Gem::Dependency
73
- name: simplecov-html
74
80
  prerelease: false
75
- requirement: &id006 !ruby/object:Gem::Requirement
81
+ version_requirements: *10320200
82
+ - !ruby/object:Gem::Dependency
83
+ name: simplecov-html
84
+ requirement: &10319660 !ruby/object:Gem::Requirement
76
85
  none: false
77
- requirements:
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: "0"
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
81
90
  type: :development
82
- version_requirements: *id006
83
- description: |-
84
- This gem provides request authentication via [HMAC](http://en.wikipedia.org/wiki/Hmac). The main usage is request based, noninteractive
85
- authentication for API implementations. Two strategies are supported that differ mainly in how the authentication information is
86
- transferred to the server: One header-based authentication method and one query-based. The authentication scheme is in some parts based
87
- on ideas laid out in this article and the following discussion:
88
- http://broadcast.oreilly.com/2009/12/principles-for-standardized-rest-authentication.html
89
-
90
- The gem also provides a small helper class that can be used to generate request signatures.
91
- email:
91
+ prerelease: false
92
+ version_requirements: *10319660
93
+ description: ! "This gem provides request authentication via [HMAC](http://en.wikipedia.org/wiki/Hmac).
94
+ The main usage is request based, noninteractive\n authentication for API implementations.
95
+ Two strategies are supported that differ mainly in how the authentication information
96
+ is\n transferred to the server: One header-based authentication method and one
97
+ query-based. The authentication scheme is in some parts based\n on ideas laid out
98
+ in this article and the following discussion: \n http://broadcast.oreilly.com/2009/12/principles-for-standardized-rest-authentication.html\n\n
99
+ \ The gem also provides a small helper class that can be used to generate request
100
+ signatures."
101
+ email:
92
102
  - felix.gilcher@asquera.de
93
103
  - florian.gilcher@asquera.de
94
- executables: []
95
-
104
+ executables:
105
+ - warden-hmac-authentication
96
106
  extensions: []
97
-
98
107
  extra_rdoc_files: []
99
-
100
- files:
108
+ files:
101
109
  - README.md
102
110
  - Rakefile
103
111
  - LICENSE
@@ -105,33 +113,30 @@ files:
105
113
  - lib/strategies/hmac_header_strategy.rb
106
114
  - lib/strategies/base.rb
107
115
  - lib/hmac_signer.rb
116
+ - bin/warden-hmac-authentication
108
117
  has_rdoc: true
109
118
  homepage: https://github.com/Asquera/warden-hmac-authentication
110
119
  licenses: []
111
-
112
120
  post_install_message:
113
121
  rdoc_options: []
114
-
115
- require_paths:
122
+ require_paths:
116
123
  - lib
117
- required_ruby_version: !ruby/object:Gem::Requirement
124
+ required_ruby_version: !ruby/object:Gem::Requirement
118
125
  none: false
119
- requirements:
120
- - - ">="
121
- - !ruby/object:Gem::Version
122
- version: "0"
123
- required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ! '>='
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
131
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- version: "0"
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
129
136
  requirements: []
130
-
131
137
  rubyforge_project:
132
138
  rubygems_version: 1.6.2
133
139
  signing_key:
134
140
  specification_version: 3
135
141
  summary: Provides request based, non-interactive authentication for APIs
136
142
  test_files: []
137
-