witness 2.0.0 → 2.1.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/VERSION +1 -1
- data/lib/witness/base.rb +52 -8
- data/spec/support/sample_verification_response.rb +2 -26
- data/spec/witness/sample_verification_response_spec.rb +11 -11
- data/witness.gemspec +2 -2
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.1.0
|
data/lib/witness/base.rb
CHANGED
@@ -2,19 +2,21 @@ module Witness
|
|
2
2
|
class Base
|
3
3
|
VALID_TYPES = [:string, :integer, :symbol]
|
4
4
|
|
5
|
-
class_inheritable_accessor :actions, :
|
5
|
+
class_inheritable_accessor :actions, :columns, :validates_presence, :validates_signature
|
6
6
|
|
7
|
-
self.actions
|
8
|
-
self.columns
|
9
|
-
self.
|
7
|
+
self.actions ||= []
|
8
|
+
self.columns ||= {}
|
9
|
+
self.validates_presence ||= {}
|
10
|
+
self.validates_signature ||= {}
|
10
11
|
|
11
12
|
def self.action(*action_names)
|
12
13
|
[*action_names].each do |action_name|
|
13
14
|
self.actions << action_name.to_sym
|
14
15
|
|
15
16
|
class_eval <<-end_eval
|
16
|
-
def self.#{action_name.to_sym}(provided_params)
|
17
|
+
def self.#{action_name.to_sym}(provided_params, key = nil)
|
17
18
|
command = "#{action_name}".to_sym
|
19
|
+
provided_params.merge!(:key => key) if key.present?
|
18
20
|
construct(provided_params.update(:command => command))
|
19
21
|
end
|
20
22
|
end_eval
|
@@ -35,14 +37,30 @@ module Witness
|
|
35
37
|
configuration.update(attr_names.extract_options!)
|
36
38
|
|
37
39
|
[*configuration[:on]].each do |on|
|
38
|
-
self.
|
40
|
+
self.validates_presence[on] ||= []
|
39
41
|
|
40
42
|
[*attr_names].each do |attr_name|
|
41
|
-
self.
|
43
|
+
self.validates_presence[on] << attr_name
|
42
44
|
end
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
48
|
+
def self.validates_signature_of(*attr_names)
|
49
|
+
configuration = { :on => self.actions }
|
50
|
+
configuration.update(attr_names.extract_options!)
|
51
|
+
|
52
|
+
[*configuration[:on]].each do |on|
|
53
|
+
self.validates_signature[on] ||= []
|
54
|
+
|
55
|
+
[*attr_names].each do |attr_name|
|
56
|
+
self.validates_signature[on] << attr_name
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
column :signature
|
61
|
+
column :key
|
62
|
+
end
|
63
|
+
|
46
64
|
protected :initialize
|
47
65
|
|
48
66
|
private
|
@@ -54,7 +72,7 @@ module Witness
|
|
54
72
|
|
55
73
|
self.columns.each do |column, configuration|
|
56
74
|
if provided_params[column] == nil || provided_params[column] == ""
|
57
|
-
if self.
|
75
|
+
if self.validates_presence[command] && self.validates_presence[command].include?(column)
|
58
76
|
raise Witness::Error, "#{configuration[:name]} not set"
|
59
77
|
end
|
60
78
|
else
|
@@ -82,6 +100,32 @@ module Witness
|
|
82
100
|
end
|
83
101
|
end
|
84
102
|
|
103
|
+
if self.validates_signature[command]
|
104
|
+
|
105
|
+
if provided_params[:key].blank?
|
106
|
+
raise Witness::Error, "Key not set"
|
107
|
+
end
|
108
|
+
|
109
|
+
if provided_params[:signature].blank?
|
110
|
+
raise Witness::Error, "Signature not set"
|
111
|
+
end
|
112
|
+
|
113
|
+
secure_params = {}
|
114
|
+
|
115
|
+
self.validates_signature[command].each do |key|
|
116
|
+
secure_params[key] = provided_params[key]
|
117
|
+
end
|
118
|
+
|
119
|
+
sigil = Sigil::Base.new(secure_params, provided_params[:key])
|
120
|
+
|
121
|
+
verified = sigil.verify(provided_params[:signature])
|
122
|
+
|
123
|
+
if !verified
|
124
|
+
raise Witness::Error, "Signature does not match"
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
85
129
|
result
|
86
130
|
end
|
87
131
|
|
@@ -8,12 +8,11 @@ class SampleVerificationResponse < Witness::Base
|
|
8
8
|
column :receive_contact_url, :name => "Receive Contact URL"
|
9
9
|
column :contact_id, :type => :integer, :name => "Contact ID"
|
10
10
|
column :authorized, :type => :boolean, :name => "Authorization"
|
11
|
-
column :key
|
12
11
|
|
13
|
-
validates_presence_of :slice_slug, :request_url, :contact_id
|
12
|
+
validates_presence_of :slice_slug, :request_url, :contact_id
|
14
13
|
validates_presence_of :receive_contact_url, :on => :generate
|
15
14
|
|
16
|
-
|
15
|
+
validates_signature_of :slice_slug, :contact_id, :secure_area_id, :authorized, :request_url, :on => :receive
|
17
16
|
|
18
17
|
def url
|
19
18
|
Witness.update_url(receive_contact_url, params)
|
@@ -36,27 +35,4 @@ class SampleVerificationResponse < Witness::Base
|
|
36
35
|
_params.update(:signature => sigil.signature).reject { |k, v| v.nil? }
|
37
36
|
end
|
38
37
|
|
39
|
-
def self.construct(provided_params)
|
40
|
-
response = super(provided_params)
|
41
|
-
|
42
|
-
command = provided_params[:command]
|
43
|
-
|
44
|
-
if command == :receive
|
45
|
-
if provided_params[:signature].blank?
|
46
|
-
raise Witness::Error, "Signature not set"
|
47
|
-
end
|
48
|
-
|
49
|
-
sigil = Sigil::Base.new(response.secure_params, response.key)
|
50
|
-
|
51
|
-
verified = sigil.verify(provided_params[:signature])
|
52
|
-
|
53
|
-
if !verified
|
54
|
-
raise Witness::Error, "Signature does not match"
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
response
|
60
|
-
end
|
61
|
-
|
62
38
|
end
|
@@ -53,11 +53,6 @@ describe SampleVerificationResponse do
|
|
53
53
|
lambda { SampleVerificationResponse.generate(@valid_generate_params) }.should raise_error(Witness::Error, /Contact ID not set/)
|
54
54
|
end
|
55
55
|
|
56
|
-
it "should raise an error if Key is not set" do
|
57
|
-
@valid_generate_params.delete(:key)
|
58
|
-
lambda { SampleVerificationResponse.generate(@valid_generate_params) }.should raise_error(Witness::Error, /Key not set/)
|
59
|
-
end
|
60
|
-
|
61
56
|
it "should recognise true authorizations" do
|
62
57
|
@valid_generate_params[:authorized] = true
|
63
58
|
response = SampleVerificationResponse.generate(@valid_generate_params)
|
@@ -124,13 +119,14 @@ describe SampleVerificationResponse do
|
|
124
119
|
describe "receive" do
|
125
120
|
|
126
121
|
before do
|
122
|
+
@key = "deadbeef"
|
123
|
+
|
127
124
|
@valid_generate_params = {
|
128
125
|
:slice_slug => "banana",
|
129
126
|
:secure_area_id => 42,
|
130
127
|
:request_url => "http://www.example.com/secure",
|
131
128
|
:contact_id => 1234,
|
132
129
|
:authorized => true,
|
133
|
-
:key => "deadbeef",
|
134
130
|
:signature => "ffb581dbdf4d72f2c3c4d61af2fbaaa6fbcf66af",
|
135
131
|
}
|
136
132
|
end
|
@@ -138,27 +134,31 @@ describe SampleVerificationResponse do
|
|
138
134
|
describe "initialization" do
|
139
135
|
|
140
136
|
it "should generate" do
|
141
|
-
SampleVerificationResponse.receive(@valid_generate_params)
|
137
|
+
SampleVerificationResponse.receive(@valid_generate_params, @key)
|
142
138
|
end
|
143
139
|
|
144
140
|
it "should raise an error if Slice slug is not set" do
|
145
141
|
@valid_generate_params.delete(:slice_slug)
|
146
|
-
lambda { SampleVerificationResponse.receive(@valid_generate_params) }.should raise_error(Witness::Error, /Slice not set/)
|
142
|
+
lambda { SampleVerificationResponse.receive(@valid_generate_params, @key) }.should raise_error(Witness::Error, /Slice not set/)
|
147
143
|
end
|
148
144
|
|
149
145
|
it "should raise an error if Request URL is not set" do
|
150
146
|
@valid_generate_params.delete(:request_url)
|
151
|
-
lambda { SampleVerificationResponse.receive(@valid_generate_params) }.should raise_error(Witness::Error, /Request URL not set/)
|
147
|
+
lambda { SampleVerificationResponse.receive(@valid_generate_params, @key) }.should raise_error(Witness::Error, /Request URL not set/)
|
152
148
|
end
|
153
149
|
|
154
150
|
it "should raise an error if Signature is not set" do
|
155
151
|
@valid_generate_params.delete(:signature)
|
156
|
-
lambda { SampleVerificationResponse.receive(@valid_generate_params) }.should raise_error(Witness::Error, /Signature not set/)
|
152
|
+
lambda { SampleVerificationResponse.receive(@valid_generate_params, @key) }.should raise_error(Witness::Error, /Signature not set/)
|
157
153
|
end
|
158
154
|
|
159
155
|
it "should raise an error if Signature does not match" do
|
160
156
|
@valid_generate_params[:signature] = "incorrect"
|
161
|
-
lambda { SampleVerificationResponse.receive(@valid_generate_params) }.should raise_error(Witness::Error, /Signature does not match/)
|
157
|
+
lambda { SampleVerificationResponse.receive(@valid_generate_params, @key) }.should raise_error(Witness::Error, /Signature does not match/)
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should raise an error if Key is not set" do
|
161
|
+
lambda { SampleVerificationResponse.receive(@valid_generate_params, "" ) }.should raise_error(Witness::Error, /Key not set/)
|
162
162
|
end
|
163
163
|
|
164
164
|
end
|
data/witness.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{witness}
|
8
|
-
s.version = "2.
|
8
|
+
s.version = "2.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Steve Hoeksema"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-13}
|
13
13
|
s.description = %q{Witness}
|
14
14
|
s.email = %q{steve@seven.net.nz}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 2
|
7
|
+
- 1
|
7
8
|
- 0
|
8
|
-
|
9
|
-
version: 2.0.0
|
9
|
+
version: 2.1.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Steve Hoeksema
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-13 00:00:00 +13:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -174,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
174
|
requirements:
|
175
175
|
- - ">="
|
176
176
|
- !ruby/object:Gem::Version
|
177
|
-
hash:
|
177
|
+
hash: -3102975516984677801
|
178
178
|
segments:
|
179
179
|
- 0
|
180
180
|
version: "0"
|