warden-hmac-authentication 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
-