king_hmac 1.0.0 → 1.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.
- data/README.rdoc +8 -8
- data/VERSION +1 -1
- data/king_hmac.gemspec +2 -2
- data/lib/king_hmac/rack/middleware.rb +8 -7
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
=
|
1
|
+
= king_hmac
|
2
2
|
|
3
3
|
This gem started with a copy & disection of auth-hmac gem v1.1.1
|
4
4
|
|
5
|
-
|
5
|
+
king_hmac is a Ruby implementation of HMAC[http://en.wikipedia.org/wiki/HMAC]
|
6
6
|
based authentication of HTTP requests. HMAC authentication involves a client and
|
7
7
|
server having a shared secret key. When sending the request the client, signs
|
8
8
|
the request using the secret key. This involves building a canonical
|
@@ -26,12 +26,12 @@ but without the Amazon specific components, i.e. it is HMAC for the rest of us.
|
|
26
26
|
|
27
27
|
== INSTALL:
|
28
28
|
Gem hosted on gemcutter.org
|
29
|
-
sudo gem install
|
29
|
+
sudo gem install king_hmac
|
30
30
|
|
31
31
|
== Source Code
|
32
|
-
See http://github.com/salesking/
|
32
|
+
See http://github.com/salesking/king_hmac
|
33
33
|
The source repository:
|
34
|
-
git clone git://github.com/salesking/
|
34
|
+
git clone git://github.com/salesking/king_hmac.git
|
35
35
|
|
36
36
|
== When to use it?
|
37
37
|
|
@@ -126,7 +126,7 @@ following:
|
|
126
126
|
|
127
127
|
The result is then Base64 encoded and added to the headers of the request as the
|
128
128
|
+Authorization+ header in the format:
|
129
|
-
Authorization: KingHmac::Auth <access_id>:<base64 encoded
|
129
|
+
Authorization: KingHmac::Auth <access_id>:<base64 encoded king_hmac>
|
130
130
|
|
131
131
|
When authenaticating a request, KingHmac::Auth looks for the Authorization
|
132
132
|
header in the above format, parses out the components, regenerates a HMAC for
|
@@ -140,6 +140,6 @@ KingHmac::Auth style requests in other languages.
|
|
140
140
|
|
141
141
|
== Authors and Contributors
|
142
142
|
|
143
|
-
This gem started with a copy & disection of auth-
|
143
|
+
This gem started with a copy & disection of auth-king_hmac gem v1.1.1.
|
144
144
|
Most of this doc was written by Sean Geoghegan
|
145
|
-
auth-
|
145
|
+
auth-king_hmac was developed by Sean Geoghegan http://rubyforge.org/projects/auth-king_hmac && by Peerworks[http://peerworks.org].
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.1
|
data/king_hmac.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{king_hmac}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Georg Leciejewski"]
|
12
|
-
s.date = %q{2010-04-
|
12
|
+
s.date = %q{2010-04-23}
|
13
13
|
s.description = %q{A Ruby Gem for authenticating HTTP requests using a HMAC}
|
14
14
|
s.email = %q{gl@salesking.eu}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -4,28 +4,29 @@ module KingHmac
|
|
4
4
|
class Middleware
|
5
5
|
|
6
6
|
# === Parameter
|
7
|
-
#
|
7
|
+
# app<Object>:: Another Rack app, just a class responding to .call
|
8
|
+
# opts<Hash>:: {'keys'=>{'my_access_key'=>'my_secret'}, 'only'=>['a path', 'backend', 'api'] }
|
8
9
|
# === opts params:
|
9
|
-
# keys<Hash{String=>String}>::
|
10
|
+
# keys<Hash{String=>String}>:: Multiple sets of accesskey=> secret
|
10
11
|
# respond to the [] method and return a secret for access key id
|
11
|
-
# only<Array[String]>:: path's to protect
|
12
|
+
# only<Array[String]>:: path's to protect ['admin', 'backend', 'api']
|
12
13
|
def initialize(app, opts={})
|
13
14
|
@app = app
|
14
15
|
@opts = opts
|
15
|
-
@
|
16
|
+
@error = "HMAC Authentication failed. Get yourself a valid HMAC Key .. Dude .. or ask your admin to get you some credentials"
|
16
17
|
@hmac_auth = KingHmac::Auth.new(@opts['keys'])
|
17
18
|
end
|
18
19
|
|
19
20
|
def call(env)
|
20
|
-
path = env['PATH_INFO']
|
21
|
+
path = env['PATH_INFO'] || '' #root path / does not have path info
|
21
22
|
do_hmac_check = @opts['only'].detect{|i| path.include?(i) }
|
22
23
|
if do_hmac_check
|
23
24
|
unless hmac_authenticated?(::Rack::Request.new(env))
|
24
25
|
headers = {'Content-Type' => "text/plain",
|
25
|
-
'Content-Length' => "#{@
|
26
|
+
'Content-Length' => "#{@error.length}",
|
26
27
|
'WWW-Authenticate' => 'AuthHMAC'
|
27
28
|
}
|
28
|
-
[401, headers, [@
|
29
|
+
[401, headers, [@error]]
|
29
30
|
else #valid credentials
|
30
31
|
@app.call(env)
|
31
32
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 1.0.
|
8
|
+
- 1
|
9
|
+
version: 1.0.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Georg Leciejewski
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-23 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|