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.
- data/bin/warden-hmac-authentication +54 -0
- data/lib/hmac_signer.rb +1 -1
- metadata +88 -83
@@ -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
|
-
|
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:
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '0'
|
26
24
|
type: :runtime
|
27
|
-
|
28
|
-
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
81
90
|
type: :development
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
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:
|
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:
|
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
|
-
|