macaroons 0.4.1 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0508eba529a303aa89f79c571ea2442b20fb75cc
4
- data.tar.gz: 255ec20fcb68b79e52c91ad7a255daa80544c5ac
3
+ metadata.gz: b14107765c3e83a14fc187461933dfe1e729e8b0
4
+ data.tar.gz: 2e84c062ea4002193849926bf7922fc73a81d900
5
5
  SHA512:
6
- metadata.gz: 17c468d3f49514b6343f39cebcae01842d2e5443af7d291e05a58e0c7fed8b99fd1b98af59a2cdf258f96a347e8ddd1304bfe81aa88d797bfb7aedc2e6329813
7
- data.tar.gz: d2812e8e5fccd3a7e7285eaf4843b2df32d2b5301bf24f8736ec6dced8f04171418fb4fdf21c7771f834e268d1542c658407d07547207688891cff66b61b2d27
6
+ metadata.gz: da89cecf838fa7f57ee11ac0fb278a59adcb48cc6a5636a03723c520f2e69ffd9cd9af6cf03e53fe245292da01bc524d77e83231a7e4a4f4ac47e74d7e1f68ca
7
+ data.tar.gz: 58a3c3bd502981104c3aa409a07ac6e749561d8af8a82456df4a10304aca1de79b89329f9c7fb2b75073672cb09b9b779a3062cc1e915c98835b58ee92c249d3
@@ -1,26 +1,17 @@
1
+ require 'forwardable'
2
+
1
3
  require 'macaroons/raw_macaroon'
2
4
 
3
5
  module Macaroons
4
6
  class Macaroon
7
+ extend Forwardable
8
+
5
9
  def initialize(key: nil, identifier: nil, location: nil, raw_macaroon: nil)
6
10
  @raw_macaroon = raw_macaroon || RawMacaroon.new(key: key, identifier: identifier, location: location)
7
11
  end
8
12
 
9
- def identifier
10
- @raw_macaroon.identifier
11
- end
12
-
13
- def location
14
- @raw_macaroon.location
15
- end
16
-
17
- def signature
18
- @raw_macaroon.signature
19
- end
20
-
21
- def caveats
22
- @raw_macaroon.caveats
23
- end
13
+ def_delegators :@raw_macaroon, :identifier, :location, :signature, :caveats,
14
+ :serialize, :serialize_json, :add_first_party_caveat, :add_third_party_caveat, :prepare_for_request
24
15
 
25
16
  def self.from_binary(serialized)
26
17
  raw_macaroon = RawMacaroon.from_binary(serialized: serialized)
@@ -32,32 +23,13 @@ module Macaroons
32
23
  macaroon = Macaroons::Macaroon.new(raw_macaroon: raw_macaroon)
33
24
  end
34
25
 
35
- def serialize
36
- @raw_macaroon.serialize()
37
- end
38
-
39
- def serialize_json
40
- @raw_macaroon.serialize_json()
41
- end
42
-
43
- def add_first_party_caveat(predicate)
44
- @raw_macaroon.add_first_party_caveat(predicate)
45
- end
46
-
47
26
  def first_party_caveats
48
27
  caveats.select(&:first_party?)
49
28
  end
50
29
 
51
- def add_third_party_caveat(caveat_key, caveat_id, caveat_location)
52
- @raw_macaroon.add_third_party_caveat(caveat_key, caveat_id, caveat_location)
53
- end
54
-
55
30
  def third_party_caveats
56
31
  caveats.select(&:third_party?)
57
32
  end
58
33
 
59
- def prepare_for_request(macaroon)
60
- @raw_macaroon.prepare_for_request(macaroon)
61
- end
62
34
  end
63
35
  end
@@ -23,12 +23,12 @@ module Macaroons
23
23
  'signature',
24
24
  Utils.unhexlify(macaroon.signature)
25
25
  )
26
- Base64.urlsafe_encode64(combined)
26
+ base64_url_encode(combined)
27
27
  end
28
28
 
29
29
  def deserialize(serialized)
30
30
  caveats = []
31
- decoded = Base64.urlsafe_decode64(serialized)
31
+ decoded = base64_url_decode(serialized)
32
32
 
33
33
  index = 0
34
34
 
@@ -85,5 +85,13 @@ module Macaroons
85
85
  [key, value]
86
86
  end
87
87
 
88
+ def base64_url_decode(str)
89
+ str += '=' * (4 - str.length.modulo(4)).modulo(4)
90
+ Base64.urlsafe_decode64(str)
91
+ end
92
+
93
+ def base64_url_encode(str)
94
+ Base64.urlsafe_encode64(str).tr('=', '')
95
+ end
88
96
  end
89
97
  end
@@ -1,4 +1,4 @@
1
- require 'json'
1
+ require 'multi_json'
2
2
 
3
3
  module Macaroons
4
4
  class JsonSerializer
@@ -10,11 +10,11 @@ module Macaroons
10
10
  caveats: macaroon.caveats.map!(&:to_h),
11
11
  signature: macaroon.signature
12
12
  }
13
- return serialized.to_json
13
+ MultiJson.dump(serialized)
14
14
  end
15
15
 
16
16
  def deserialize(serialized)
17
- deserialized = JSON.parse(serialized)
17
+ deserialized = MultiJson.load(serialized)
18
18
  macaroon = Macaroons::RawMacaroon.new(key: 'no_key', identifier: deserialized['identifier'], location: deserialized['location'])
19
19
  deserialized['caveats'].each do |c|
20
20
  caveat = Macaroons::Caveat.new(c['cid'], c['vid'], c['cl'])
@@ -1,3 +1,3 @@
1
1
  module Macaroons
2
- VERSION = '0.4.1'
2
+ VERSION = '0.5.1'
3
3
  end
data/lib/macaroons.rb CHANGED
@@ -1,24 +1,6 @@
1
1
  require 'macaroons/macaroons'
2
2
  require 'macaroons/verifier'
3
3
 
4
- module Macaroon
5
- class << self
6
- def new(location: location, identifier: identifier, key: key)
7
- Macaroons::Macaroon.new(location:location, identifier:identifier, key:key)
8
- end
9
-
10
- def from_binary(serialized)
11
- Macaroons::Macaroon.from_binary(serialized)
12
- end
13
-
14
- def from_json(serialized)
15
- Macaroons::Macaroon.from_json(serialized)
16
- end
17
- end
18
-
19
- class Verifier
20
- def self.new()
21
- Macaroons::Verifier.new()
22
- end
23
- end
4
+ class Macaroon < Macaroons::Macaroon
5
+ class Verifier < Macaroons::Verifier; end
24
6
  end
data/macaroons.gemspec CHANGED
@@ -16,7 +16,7 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
  spec.required_ruby_version = "~> 2.0"
19
- spec.add_dependency "json"
19
+ spec.add_dependency "multi_json", "~> 1.10.1"
20
20
  spec.add_dependency "rbnacl", "~> 3.1.2"
21
21
 
22
22
  spec.add_development_dependency "bundler", "> 1.3"
@@ -38,6 +38,18 @@ describe 'Macaroon' do
38
38
  end
39
39
  end
40
40
 
41
+ context 'when serilizing as binary with padding' do
42
+ it 'should strip the padding' do
43
+ m = Macaroon.new(
44
+ location: 'http://mybank/',
45
+ identifier: 'we used our secret key',
46
+ key: 'this is our super secret key; only we should know it'
47
+ )
48
+ m.add_first_party_caveat('test = a caveat')
49
+ expect(m.serialize()).to eql('MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudGlmaWVyIHdlIHVzZWQgb3VyIHNlY3JldCBrZXkKMDAxOGNpZCB0ZXN0ID0gYSBjYXZlYXQKMDAyZnNpZ25hdHVyZSAOX3fqTY3ESWO6a5DZltZZReCDkfjbcdwSQDTdBrhApwo')
50
+ end
51
+ end
52
+
41
53
  context 'when deserializing binary' do
42
54
  it 'should deserialize properly' do
43
55
  m = Macaroon.from_binary(
@@ -47,6 +59,15 @@ describe 'Macaroon' do
47
59
  end
48
60
  end
49
61
 
62
+ context 'when deserializing binary without padding' do
63
+ it 'should add padding' do
64
+ m = Macaroon.from_binary(
65
+ 'MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudGlmaWVyIHdlIHVzZWQgb3VyIHNlY3JldCBrZXkKMDAxOGNpZCB0ZXN0ID0gYSBjYXZlYXQKMDAyZnNpZ25hdHVyZSAOX3fqTY3ESWO6a5DZltZZReCDkfjbcdwSQDTdBrhApwo='
66
+ )
67
+ expect(m.signature).to eql('0e5f77ea4d8dc44963ba6b90d996d65945e08391f8db71dc124034dd06b840a7')
68
+ end
69
+ end
70
+
50
71
  context 'when serilizing as json' do
51
72
  it 'should serialize properly' do
52
73
  m = Macaroon.new(
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: macaroons
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Cordell
@@ -10,22 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2014-12-11 00:00:00.000000000 Z
13
+ date: 2015-03-05 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: json
16
+ name: multi_json
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - '>='
19
+ - - ~>
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 1.10.1
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
- - - '>='
26
+ - - ~>
27
27
  - !ruby/object:Gem::Version
28
- version: '0'
28
+ version: 1.10.1
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rbnacl
31
31
  requirement: !ruby/object:Gem::Requirement