vidibus-secure 0.1.0 → 0.1.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.md +27 -0
- data/lib/vidibus/secure.rb +1 -1
- data/lib/vidibus/secure/version.rb +1 -1
- metadata +10 -20
- data/.bundle/config +0 -2
- data/.gitignore +0 -6
- data/.rspec +0 -2
- data/.travis.yml +0 -1
- data/Gemfile +0 -4
- data/README.rdoc +0 -45
- data/spec/spec_helper.rb +0 -21
- data/spec/vidibus/secure/extensions/controller_spec.rb +0 -65
- data/spec/vidibus/secure/mongoid_spec.rb +0 -89
- data/spec/vidibus/secure_spec.rb +0 -368
- data/vidibus-secure.gemspec +0 -37
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Vidibus::Secure [](http://travis-ci.org/vidibus/vidibus-secure) [](http://stillmaintained.com/vidibus/vidibus-secure)
|
2
|
+
|
3
|
+
Allows encryption and signing of requests and storing encrypted data within Mongoid documents.
|
4
|
+
|
5
|
+
This gem is part of [Vidibus](http://vidibus.org), an open source toolset for building distributed (video) applications.
|
6
|
+
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add `gem "vidibus-secure"` to your Gemfile. Then call `bundle install` on your console.
|
11
|
+
|
12
|
+
If you want to use Vidibus::Secure::Mongoid on your models, you should generate an initializer to set an unique encryption key by calling `rails generate vidibus_secure_key`, also on your console.
|
13
|
+
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
TODO
|
18
|
+
|
19
|
+
|
20
|
+
## TODO
|
21
|
+
|
22
|
+
* Documentation
|
23
|
+
|
24
|
+
|
25
|
+
## Copyright
|
26
|
+
|
27
|
+
© 2010-2011 Andre Pankratz. See LICENSE for details.
|
data/lib/vidibus/secure.rb
CHANGED
@@ -145,7 +145,7 @@ module Vidibus
|
|
145
145
|
def params_identifier(params, level = 1)
|
146
146
|
array = []
|
147
147
|
for key, value in params
|
148
|
-
if
|
148
|
+
if value.is_a?(Array) or value.is_a?(Hash)
|
149
149
|
value = params_identifier(value, level + 1)
|
150
150
|
end
|
151
151
|
array << "#{level}:#{key}:#{value}"
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vidibus-secure
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Andre Pankratz
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-07-
|
18
|
+
date: 2011-07-14 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -199,26 +199,16 @@ extensions: []
|
|
199
199
|
extra_rdoc_files: []
|
200
200
|
|
201
201
|
files:
|
202
|
-
- .bundle/config
|
203
|
-
- .gitignore
|
204
|
-
- .rspec
|
205
|
-
- .travis.yml
|
206
|
-
- Gemfile
|
207
|
-
- LICENSE
|
208
|
-
- README.rdoc
|
209
|
-
- Rakefile
|
210
202
|
- lib/generators/vidibus_secure_key/vidibus_secure_key_generator.rb
|
211
|
-
- lib/vidibus-secure.rb
|
212
|
-
- lib/vidibus/secure.rb
|
213
|
-
- lib/vidibus/secure/extensions.rb
|
214
203
|
- lib/vidibus/secure/extensions/controller.rb
|
204
|
+
- lib/vidibus/secure/extensions.rb
|
215
205
|
- lib/vidibus/secure/mongoid.rb
|
216
206
|
- lib/vidibus/secure/version.rb
|
217
|
-
-
|
218
|
-
-
|
219
|
-
-
|
220
|
-
-
|
221
|
-
-
|
207
|
+
- lib/vidibus/secure.rb
|
208
|
+
- lib/vidibus-secure.rb
|
209
|
+
- LICENSE
|
210
|
+
- README.md
|
211
|
+
- Rakefile
|
222
212
|
has_rdoc: true
|
223
213
|
homepage: https://github.com/vidibus/vidibus-secure
|
224
214
|
licenses: []
|
data/.bundle/config
DELETED
data/.gitignore
DELETED
data/.rspec
DELETED
data/.travis.yml
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
script: "bundle exec rspec spec --format progress"
|
data/Gemfile
DELETED
data/README.rdoc
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
= Vidibus::Secure
|
2
|
-
|
3
|
-
Allows encryption and signing of requests and storing encrypted data within Mongoid documents.
|
4
|
-
|
5
|
-
This gem is part of {Vidibus}[http://vidibus.org], an open source toolset for building distributed (video) applications.
|
6
|
-
|
7
|
-
|
8
|
-
== Compatibility
|
9
|
-
|
10
|
-
Vidibus::Secure is tested against Ruby 1.8.7.
|
11
|
-
|
12
|
-
http://travis-ci.org/vidibus/vidibus-secure.png {Build History}[http://travis-ci.org/vidibus/vidibus-secure]
|
13
|
-
|
14
|
-
|
15
|
-
== Installation
|
16
|
-
|
17
|
-
Add the dependency to the Gemfile of your application:
|
18
|
-
|
19
|
-
gem "vidibus-secure"
|
20
|
-
|
21
|
-
Then call `bundle install` on your console.
|
22
|
-
|
23
|
-
If you want to use Vidibus::Secure::Mongoid on your models, you should generate an initializer to set an unique encryption key:
|
24
|
-
|
25
|
-
rails generate vidibus_secure_key
|
26
|
-
|
27
|
-
|
28
|
-
== Usage
|
29
|
-
|
30
|
-
TODO: Describe
|
31
|
-
|
32
|
-
|
33
|
-
=== Usage in Mongoid model
|
34
|
-
|
35
|
-
TODO: Describe
|
36
|
-
|
37
|
-
|
38
|
-
== TODO
|
39
|
-
|
40
|
-
* Documentation
|
41
|
-
|
42
|
-
|
43
|
-
== Copyright
|
44
|
-
|
45
|
-
Copyright (c) 2010-2011 Andre Pankratz. See LICENSE for details.
|
data/spec/spec_helper.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
-
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
|
3
|
-
|
4
|
-
require "rubygems"
|
5
|
-
require "mongoid"
|
6
|
-
require "rspec"
|
7
|
-
require "rr"
|
8
|
-
require "vidibus-secure"
|
9
|
-
|
10
|
-
Mongoid.configure do |config|
|
11
|
-
name = "vidibus-secure_test"
|
12
|
-
host = "localhost"
|
13
|
-
config.master = Mongo::Connection.new.db(name)
|
14
|
-
end
|
15
|
-
|
16
|
-
RSpec.configure do |config|
|
17
|
-
config.mock_with :rr
|
18
|
-
config.after :suite do
|
19
|
-
Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
|
20
|
-
end
|
21
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
require "ostruct"
|
2
|
-
require "spec_helper"
|
3
|
-
require "action_controller"
|
4
|
-
|
5
|
-
class Controller < ActionController::Base; end
|
6
|
-
|
7
|
-
describe "Vidibus::Secure::Extensions::Controller" do
|
8
|
-
let(:controller) { Controller.new }
|
9
|
-
let(:secret) { "mysecret" }
|
10
|
-
|
11
|
-
before do
|
12
|
-
stub(controller).request do
|
13
|
-
@request ||= begin
|
14
|
-
Struct.new("Request", :protocol, :host_with_port, :fullpath, :method, :request_parameters) unless defined?(Struct::Request)
|
15
|
-
Struct::Request.new("http://", "vidibus.org", "/", "get", {})
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
describe "#valid_request?" do
|
21
|
-
it "should be available to controllers that stem from ActionController::Base" do
|
22
|
-
controller.should respond_to(:valid_request?)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should build URI from request object if no :uri is provided" do
|
26
|
-
mock(controller.request).protocol {"http://"}
|
27
|
-
mock(controller.request).host_with_port {"vidibus.org"}
|
28
|
-
mock(controller.request).fullpath {"/"}
|
29
|
-
controller.valid_request?(secret, :method => "get", :params => {})
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should use request.method if no :method is provided" do
|
33
|
-
mock(controller.request).method {"get"}
|
34
|
-
controller.valid_request?(secret, :uri => "something", :params => {})
|
35
|
-
end
|
36
|
-
|
37
|
-
it "should use request_parameters unless params are provided" do
|
38
|
-
mock(controller.request).request_parameters
|
39
|
-
controller.valid_request?(secret, :uri => "something/?with=params", :method => "get")
|
40
|
-
end
|
41
|
-
|
42
|
-
it "should use given params" do
|
43
|
-
dont_allow(controller).request
|
44
|
-
controller.valid_request?(secret, :method => "get", :uri => "something", :params => {})
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should return true for valid requests" do
|
48
|
-
params = {}
|
49
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/", params, secret)
|
50
|
-
controller.request.fullpath = "?sign=#{params[:sign]}"
|
51
|
-
controller.valid_request?(secret).should be_true
|
52
|
-
end
|
53
|
-
|
54
|
-
it "should use given custom params" do
|
55
|
-
params = { :action => "index", :controller => "application", :id => "12" }
|
56
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/", params, secret)
|
57
|
-
controller.valid_request?(secret, :params => params).should be_true
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should call Vidibus::Secure.verify_request" do
|
61
|
-
mock(Vidibus::Secure).verify_request("get", "http://vidibus.org/", {}, secret)
|
62
|
-
controller.valid_request?(secret)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,89 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
ENV["VIDIBUS_SECURE_KEY"] = "c4l60HC/lyerr2VEnrP7s2YAldyZGfIBePUzCl+tBsTs1EWJOc8dEJ7F2Vty7KPEeRuBWGxZHVAbku8pLo+UvXRpLcRiF7lxKiKl"
|
4
|
-
|
5
|
-
class Model
|
6
|
-
include Mongoid::Document
|
7
|
-
include Vidibus::Secure::Mongoid
|
8
|
-
attr_encrypted :my_secret, :another_secret
|
9
|
-
end
|
10
|
-
|
11
|
-
describe "Vidibus::Secure::Mongoid" do
|
12
|
-
let(:model) { Model.new }
|
13
|
-
let(:secret) { "My name is Bond." }
|
14
|
-
let(:encrypted_secret) { "+PlBG1ChiqUAYMrHlJzDL4NwXHtGBIUm/KQ2ZWfwxjM=\n" }
|
15
|
-
|
16
|
-
it "should add a field :my_secret_encrypted" do
|
17
|
-
model.should respond_to(:my_secret_encrypted)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "should add a setter for :my_secret" do
|
21
|
-
model.should respond_to(:my_secret=)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should add a getter for :my_secret" do
|
25
|
-
model.should respond_to(:my_secret)
|
26
|
-
end
|
27
|
-
|
28
|
-
it "should add a field :another_secret_encrypted" do
|
29
|
-
model.should respond_to(:another_secret_encrypted)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should add a setter for :another_secret" do
|
33
|
-
model.should respond_to(:another_secret=)
|
34
|
-
end
|
35
|
-
|
36
|
-
it "should add a getter for :another_secret" do
|
37
|
-
model.should respond_to(:another_secret)
|
38
|
-
end
|
39
|
-
|
40
|
-
describe "#my_secret=" do
|
41
|
-
it "should set :my_secret_encrypted" do
|
42
|
-
model.my_secret_encrypted.should be_nil
|
43
|
-
model.my_secret = "my_secret"
|
44
|
-
model.my_secret_encrypted.should_not be_nil
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should encrypt a given value" do
|
48
|
-
model.my_secret = secret
|
49
|
-
model.my_secret_encrypted.should eql(encrypted_secret)
|
50
|
-
end
|
51
|
-
|
52
|
-
it "should be persistent" do
|
53
|
-
model.my_secret = secret
|
54
|
-
model.save!
|
55
|
-
model.reload
|
56
|
-
model.my_secret_encrypted.should eql(encrypted_secret)
|
57
|
-
end
|
58
|
-
|
59
|
-
it "should not encrypt nil" do
|
60
|
-
model.my_secret = nil
|
61
|
-
model.my_secret_encrypted.should eql(nil)
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "#my_secret" do
|
66
|
-
it "should get :my_secret_encrypted" do
|
67
|
-
model.my_secret.should be_nil
|
68
|
-
model.my_secret_encrypted = encrypted_secret
|
69
|
-
model.my_secret.should_not be_nil
|
70
|
-
end
|
71
|
-
|
72
|
-
it "should decrypt value of :my_secret_encrypted" do
|
73
|
-
model.my_secret_encrypted = encrypted_secret
|
74
|
-
model.my_secret.should eql(secret)
|
75
|
-
end
|
76
|
-
|
77
|
-
it "should be persistent" do
|
78
|
-
model.my_secret_encrypted = encrypted_secret
|
79
|
-
model.save!
|
80
|
-
model.reload
|
81
|
-
model.my_secret.should eql(secret)
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should not decrypt nil" do
|
85
|
-
model.my_secret_encrypted = nil
|
86
|
-
model.my_secret.should eql(nil)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
end
|
data/spec/vidibus/secure_spec.rb
DELETED
@@ -1,368 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "Vidibus::Secure" do
|
4
|
-
let(:key) { "8KTbTanrBTQ5c8CjANpJQjPWcIstFxq/uFIUQBF3gRnztM565xIfe8MStVcLilbEhjYwfZiD4lFWINF22Aw8gVEbkSf2rLN0fnuO9YtNqFLQU6m/OldO5JbsBJPCwuzsPYmZ1w==" }
|
5
|
-
let(:data) { "My name is Bond. You know the rest." }
|
6
|
-
let(:data_hash) {{"name" => "James Bond"}}
|
7
|
-
let(:data_array) {["Bond", "James"]}
|
8
|
-
let(:encrypted_base64) { "hXUWa3gHRpYr/Fi2qm9xdTyZg7NSpYq8X2p1EL+/wffUg9IeIjVbSvyUYAvy\nTLbc\n" }
|
9
|
-
let(:encrypted_base64_array) { "pG9SNq9r2fQVxCiN8jYNciukklnZ+5YagtCE0LAj2bg=\n" }
|
10
|
-
let(:encrypted_base64_hash) { "kjV3/v52KcsGKoNs7zgcmHih90uvc+hP5X90s6X27GE=\n" }
|
11
|
-
let(:encrypted_hex) { "8575166b780746962bfc58b6aa6f71753c9983b352a58abc5f6a7510bfbfc1f7d483d21e22355b4afc94600bf24cb6dc" }
|
12
|
-
let(:encrypted_hex_array) { "8575166b780746962bfc58b6aa6f71753c9983b352a58abc5f6a7510bfbfc1f7d483d21e22355b4afc94600bf24cb6dc" }
|
13
|
-
let(:encrypted_hex_hash) { "8575166b780746962bfc58b6aa6f71753c9983b352a58abc5f6a7510bfbfc1f7d483d21e22355b4afc94600bf24cb6dc" }
|
14
|
-
let(:signature_base64) { "AhTlmymUI9q2bdrtJ0vLdyV8Y8eUf2U5xrzoK5PdWKQ=\n" }
|
15
|
-
let(:signature_hex) { "0214e59b299423dab66ddaed274bcb77257c63c7947f6539c6bce82b93dd58a4" }
|
16
|
-
let(:base64_format) { /([A-Z]|\+|\/)/ }
|
17
|
-
let(:hex_format) { /^[0-9a-f]+$/ }
|
18
|
-
|
19
|
-
describe ".settings" do
|
20
|
-
context "for :random" do
|
21
|
-
it "should default to a length of 50" do
|
22
|
-
Vidibus::Secure.settings[:random][:length].should eql(50)
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should default to base64 encoding" do
|
26
|
-
Vidibus::Secure.settings[:random][:encoding].should eql(:base64)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
context "for :sign" do
|
31
|
-
it "should default to SHA256 algorithm" do
|
32
|
-
Vidibus::Secure.settings[:sign][:algorithm].should eql("SHA256")
|
33
|
-
end
|
34
|
-
|
35
|
-
it "should default to hex encoding" do
|
36
|
-
Vidibus::Secure.settings[:sign][:encoding].should eql(:hex)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
context "for :crypt" do
|
41
|
-
it "should default to AES-256-CBC algorithm" do
|
42
|
-
Vidibus::Secure.settings[:crypt][:algorithm].should eql("AES-256-CBC")
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should default to base64 encoding" do
|
46
|
-
Vidibus::Secure.settings[:crypt][:encoding].should eql(:base64)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
describe ".random" do
|
52
|
-
it "should create a base64 random string with a length of 50 chars" do
|
53
|
-
random = Vidibus::Secure.random
|
54
|
-
random.length.should eql(50)
|
55
|
-
random.should match(base64_format)
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should create a hexadecimal random string with a length of 50 chars if :encoding is provided" do
|
59
|
-
random = Vidibus::Secure.random(:encoding => :hex)
|
60
|
-
random.length.should eql(50)
|
61
|
-
random.should match(hex_format)
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should create a random string with a length of 60 chars if :length is provided" do
|
65
|
-
Vidibus::Secure.random(:length => 60).length.should eql(60)
|
66
|
-
end
|
67
|
-
|
68
|
-
it "should create a hexadecimal random string if settings for :random are changed" do
|
69
|
-
Vidibus::Secure.settings[:random][:encoding] = :hex
|
70
|
-
Vidibus::Secure.random.should match(hex_format)
|
71
|
-
Vidibus::Secure.settings[:random][:encoding] = :base64
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe ".sign" do
|
76
|
-
it "should create a hexadecimal signature of given data by default" do
|
77
|
-
Vidibus::Secure.sign(data, key).should eql(signature_hex)
|
78
|
-
end
|
79
|
-
|
80
|
-
it "should create a base64 signature of given data if :encoding is provided" do
|
81
|
-
Vidibus::Secure.sign(data, key, :encoding => :base64).should eql(signature_base64)
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should create a base64 signature of given data if settings for :sign are changed" do
|
85
|
-
Vidibus::Secure.settings[:sign][:encoding] = :base64
|
86
|
-
Vidibus::Secure.sign(data, key).should eql(signature_base64)
|
87
|
-
Vidibus::Secure.settings[:sign][:encoding] = :hex
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should raise a KeyError if given secret key is nil" do
|
91
|
-
expect {Vidibus::Secure.sign(data, nil)}.to raise_error(Vidibus::Secure::KeyError)
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
describe ".encrypt" do
|
96
|
-
it "should encrypt data as base64 string" do
|
97
|
-
Vidibus::Secure.encrypt(data, key).should eql(encrypted_base64)
|
98
|
-
end
|
99
|
-
|
100
|
-
it "should encrypt data as hexadecimal string if :encoding is provided" do
|
101
|
-
Vidibus::Secure.encrypt(data, key, :encoding => :hex).should eql(encrypted_hex)
|
102
|
-
end
|
103
|
-
|
104
|
-
it "should encrypt data as hexadecimal string if encoding settings for :crypt are set to hex" do
|
105
|
-
Vidibus::Secure.settings[:crypt][:encoding] = :hex
|
106
|
-
Vidibus::Secure.encrypt(data, key).should eql(encrypted_hex)
|
107
|
-
Vidibus::Secure.settings[:crypt][:encoding] = :base64
|
108
|
-
end
|
109
|
-
|
110
|
-
it "should raise an error if given secret key is nil" do
|
111
|
-
expect {Vidibus::Secure.sign(data, nil)}.to raise_error(Vidibus::Secure::KeyError)
|
112
|
-
end
|
113
|
-
|
114
|
-
it "should encrypt array data" do
|
115
|
-
Vidibus::Secure.encrypt(data_array, key).should eql(encrypted_base64_array)
|
116
|
-
end
|
117
|
-
|
118
|
-
it "should encrypt hash data" do
|
119
|
-
Vidibus::Secure.encrypt(data_hash, key).should eql(encrypted_base64_hash)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe ".decrypt" do
|
124
|
-
it "should decrypt a base64 string" do
|
125
|
-
Vidibus::Secure.decrypt(encrypted_base64, key).should eql(data)
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should decrypt array data from base64 string" do
|
129
|
-
Vidibus::Secure.decrypt(encrypted_base64_array, key).should eql(data_array)
|
130
|
-
end
|
131
|
-
|
132
|
-
it "should decrypt hash data from base64 string" do
|
133
|
-
Vidibus::Secure.decrypt(encrypted_base64_hash, key).should eql(data_hash)
|
134
|
-
end
|
135
|
-
|
136
|
-
it "should decrypt a hexadecimal string if :encoding is provided" do
|
137
|
-
Vidibus::Secure.decrypt(encrypted_hex, key, :encoding => :hex).should eql(data)
|
138
|
-
end
|
139
|
-
|
140
|
-
it "should decrypt a hexadecimal string if encoding settings for :crypt are set to hex" do
|
141
|
-
Vidibus::Secure.settings[:crypt][:encoding] = :hex
|
142
|
-
Vidibus::Secure.decrypt(encrypted_hex, key).should eql(data)
|
143
|
-
Vidibus::Secure.settings[:crypt][:encoding] = :base64
|
144
|
-
end
|
145
|
-
|
146
|
-
it "should raise a KeyError if given secret key is nil" do
|
147
|
-
expect {Vidibus::Secure.sign(data, nil)}.to raise_error(Vidibus::Secure::KeyError)
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
describe ".sign_request" do
|
152
|
-
it "should not modifiy path for POST and PUT requests" do
|
153
|
-
for verb in %w[post put]
|
154
|
-
path, params = Vidibus::Secure.sign_request(verb, "/whazzup", {}, key)
|
155
|
-
path.should eql("/whazzup")
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should raise an InputError if given params is not a Hash" do
|
160
|
-
params = %w[1 2 3]
|
161
|
-
expect {Vidibus::Secure.sign_request(:post, "/", params, key)}.to raise_error(Vidibus::Secure::InputError, "Given params is not a Hash.")
|
162
|
-
end
|
163
|
-
|
164
|
-
context "for requests without body" do
|
165
|
-
it "should add signature to params, if no params are given in URI and params argument is a hash" do
|
166
|
-
path = "http://vidibus.org/status"
|
167
|
-
params = {}
|
168
|
-
Vidibus::Secure.sign_request(:get, path, params, key)
|
169
|
-
path.should eql("http://vidibus.org/status")
|
170
|
-
params.should eql(:sign => "09247a2534f14e57081193ef6834b08843352c796af264f77e76445472dae9ed")
|
171
|
-
end
|
172
|
-
|
173
|
-
it "should add signature to URI, if no params are given in URI and params argument nil" do
|
174
|
-
path = "http://vidibus.org/status"
|
175
|
-
params = nil
|
176
|
-
Vidibus::Secure.sign_request(:get, path, params, key)
|
177
|
-
path.should eql("http://vidibus.org/status?sign=09247a2534f14e57081193ef6834b08843352c796af264f77e76445472dae9ed")
|
178
|
-
params.should be_nil
|
179
|
-
end
|
180
|
-
|
181
|
-
it "should add signature to URI, if params argument is a hash, but params are also given in URI" do
|
182
|
-
path = "http://vidibus.org/status?feel=good"
|
183
|
-
params = {}
|
184
|
-
Vidibus::Secure.sign_request(:get, path, params, key)
|
185
|
-
path.should eql("http://vidibus.org/status?feel=good&sign=2be2169f27f11ccc519456887838dcbfef54eb461492d60b847d2f01adca9326")
|
186
|
-
params.should eql({})
|
187
|
-
end
|
188
|
-
|
189
|
-
it "should accept a custom name as signature param" do
|
190
|
-
path = "http://vidibus.org/status"
|
191
|
-
Vidibus::Secure.sign_request(:get, path, nil, key, "privado")
|
192
|
-
path.should eql("http://vidibus.org/status?privado=09247a2534f14e57081193ef6834b08843352c796af264f77e76445472dae9ed")
|
193
|
-
end
|
194
|
-
|
195
|
-
it "should create a signature of a given URL" do
|
196
|
-
path = "http://vidibus.org/"
|
197
|
-
Vidibus::Secure.sign_request(:get, path, nil, key)
|
198
|
-
path.should eql("http://vidibus.org/?sign=0ff9ec7056fd6a2b8ea1d2a1f462458719e3cf0b65485c55035ac906fd3d3368")
|
199
|
-
end
|
200
|
-
|
201
|
-
it "should create identical signatures for URLs with and without trailing slash" do
|
202
|
-
signature = "0ff9ec7056fd6a2b8ea1d2a1f462458719e3cf0b65485c55035ac906fd3d3368"
|
203
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org", nil, key).first.should match(signature)
|
204
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/", nil, key).first.should match(signature)
|
205
|
-
end
|
206
|
-
|
207
|
-
it "should create a signature of a given URI" do
|
208
|
-
path = "http://vidibus.org/status"
|
209
|
-
Vidibus::Secure.sign_request(:get, path, nil, key)
|
210
|
-
path.should eql("http://vidibus.org/status?sign=09247a2534f14e57081193ef6834b08843352c796af264f77e76445472dae9ed")
|
211
|
-
end
|
212
|
-
|
213
|
-
it "should create identical signatures for URIs with and without trailing slash" do
|
214
|
-
signature = "09247a2534f14e57081193ef6834b08843352c796af264f77e76445472dae9ed"
|
215
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/status", nil, key).first.should match(signature)
|
216
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/status/", nil, key).first.should match(signature)
|
217
|
-
end
|
218
|
-
|
219
|
-
it "should create a signature of URI with params" do
|
220
|
-
path = "http://vidibus.org/status?type=server"
|
221
|
-
Vidibus::Secure.sign_request(:get, path, {}, key)
|
222
|
-
path.should eql("http://vidibus.org/status?type=server&sign=ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0")
|
223
|
-
end
|
224
|
-
|
225
|
-
it "should create identical signatures for URIs with params with and without trailing slash" do
|
226
|
-
signature = "ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0"
|
227
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/status?type=server", {}, key).first.should match(signature)
|
228
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/status/?type=server", {}, key).first.should match(signature)
|
229
|
-
end
|
230
|
-
|
231
|
-
it "should replace signature in URI with params" do
|
232
|
-
path = "http://vidibus.org/status?interval=2&sign=something&type=server"
|
233
|
-
Vidibus::Secure.sign_request(:get, path, {}, key)
|
234
|
-
path.should eql("http://vidibus.org/status?interval=2&sign=bd66fe642c39d01005090bb9d0a7f62f5c6d563878e6397261ed12bd79bdb92d&type=server")
|
235
|
-
end
|
236
|
-
|
237
|
-
it "should replace signature in URI without other params" do
|
238
|
-
path = "http://vidibus.org/status?sign=something"
|
239
|
-
Vidibus::Secure.sign_request(:get, path, {}, key)
|
240
|
-
path.should eql("http://vidibus.org/status?sign=09247a2534f14e57081193ef6834b08843352c796af264f77e76445472dae9ed")
|
241
|
-
end
|
242
|
-
|
243
|
-
it "should create identical signatures for URIs with different params order" do
|
244
|
-
signature = "116b6628f5b79a42ea9f8eb0e7901404ff641c34baa289dc32b6e2aa57c9281d"
|
245
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/status?a=1&b=2", {}, key).first.should match(signature)
|
246
|
-
Vidibus::Secure.sign_request(:get, "http://vidibus.org/status/?b=2&a=1", {}, key).first.should match(signature)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
context "for request with body" do
|
251
|
-
it "should create a signature of path and params" do
|
252
|
-
params = {:some => "thing"}
|
253
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
254
|
-
params[:sign].should eql("a41b51acf01f7207d250a0a486e60ed385050f848237251efcdb58448e57d20d")
|
255
|
-
end
|
256
|
-
|
257
|
-
it "should create a signature of path and nested params" do
|
258
|
-
params = {:some => {:nested => "params", :are => {:really => ["serious", "stuff"]}}}
|
259
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
260
|
-
params[:sign].should eql("3a899c65b9a68fa473e3bc3388b7656538c85498cc63cdcac59eebfe9f68ce07")
|
261
|
-
end
|
262
|
-
|
263
|
-
it "should create a different signature of path and nested params with switched keys" do
|
264
|
-
params = {:some => {:are => "params", :nested => {:really => ["serious", "stuff"]}}}
|
265
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
266
|
-
params[:sign].should eql("d28b073381dad3c30bc8f5ff5984d7ff29e04dd95bc9ca04cd1ac95e878e4663")
|
267
|
-
end
|
268
|
-
|
269
|
-
it "should replace existing signature" do
|
270
|
-
params = {:some => "thing", :sign => "something"}
|
271
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
272
|
-
params[:sign].should eql("a41b51acf01f7207d250a0a486e60ed385050f848237251efcdb58448e57d20d")
|
273
|
-
end
|
274
|
-
|
275
|
-
it "should add signature param as string if params are given as strings" do
|
276
|
-
params = {"some" => "thing"}
|
277
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
278
|
-
params["some"].should eql("thing")
|
279
|
-
params["sign"].should_not be_nil
|
280
|
-
params[:sign].should be_nil
|
281
|
-
end
|
282
|
-
|
283
|
-
it "should add signature param as symbol if params are given as symbols" do
|
284
|
-
params = {:some => "thing"}
|
285
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
286
|
-
params[:some].should eql("thing")
|
287
|
-
params[:sign].should_not be_nil
|
288
|
-
params["sign"].should be_nil
|
289
|
-
end
|
290
|
-
|
291
|
-
it "should add signature param as symbol if no params are given" do
|
292
|
-
params = {}
|
293
|
-
Vidibus::Secure.sign_request(:post, "/", params, key)
|
294
|
-
params[:sign].should_not be_nil
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
|
299
|
-
describe ".verify_request" do
|
300
|
-
it "should return true for a valid GET request" do
|
301
|
-
path = "http://vidibus.org/status?type=server&sign=ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0"
|
302
|
-
Vidibus::Secure.verify_request(:get, path, {}, key).should be_true
|
303
|
-
end
|
304
|
-
|
305
|
-
it "should return true for a valid GET request even if verb is upcase" do
|
306
|
-
path = "http://vidibus.org/status?type=server&sign=ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0"
|
307
|
-
Vidibus::Secure.verify_request("GET", path, {}, key).should be_true
|
308
|
-
end
|
309
|
-
|
310
|
-
it "should return true for a valid GET request if params are given as hash" do
|
311
|
-
path = "http://vidibus.org/status"
|
312
|
-
params = {:type => "server", :sign => "ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0"}
|
313
|
-
Vidibus::Secure.verify_request("GET", path, params, key).should be_true
|
314
|
-
end
|
315
|
-
|
316
|
-
it "should return false if additional params are given" do
|
317
|
-
path = "http://vidibus.org/status?type=server&sign=ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0"
|
318
|
-
Vidibus::Secure.verify_request("GET", path, { :some => "thing" }, key).should be_false
|
319
|
-
end
|
320
|
-
|
321
|
-
it "should return true for a valid POST request with params given as symbols" do
|
322
|
-
params = {:some => "thing", :sign => "a41b51acf01f7207d250a0a486e60ed385050f848237251efcdb58448e57d20d"}
|
323
|
-
Vidibus::Secure.verify_request(:post, "/", params, key).should be_true
|
324
|
-
end
|
325
|
-
|
326
|
-
it "should return true for a valid POST request with params given as string" do
|
327
|
-
params = {"some"=>"thing", "sign"=>"a41b51acf01f7207d250a0a486e60ed385050f848237251efcdb58448e57d20d"}
|
328
|
-
Vidibus::Secure.verify_request(:post, "/", params, key).should be_true
|
329
|
-
end
|
330
|
-
|
331
|
-
it "should return true for a valid POST request with nested params" do
|
332
|
-
params = {
|
333
|
-
:sign => "3a899c65b9a68fa473e3bc3388b7656538c85498cc63cdcac59eebfe9f68ce07",
|
334
|
-
:some => {:nested => "params", :are => {:really => ["serious", "stuff"]}}
|
335
|
-
}
|
336
|
-
Vidibus::Secure.verify_request(:post, "/", params, key).should be_true
|
337
|
-
end
|
338
|
-
|
339
|
-
it "should return false if signature is invalid" do
|
340
|
-
path = "http://vidibus.org/status?type=server&sign=invalid"
|
341
|
-
Vidibus::Secure.verify_request(:get, path, {}, key).should be_false
|
342
|
-
end
|
343
|
-
|
344
|
-
it "should return false if path does not match signature" do
|
345
|
-
path = "http://vidibus.org/invalid?type=server&sign=068dbf2695798e3cda2710ae34d74043653eae41d82cbbdf39edebd7e2ae9a50"
|
346
|
-
Vidibus::Secure.verify_request(:get, path, {}, key).should be_false
|
347
|
-
end
|
348
|
-
|
349
|
-
it "should return false if request verb does not match signature" do
|
350
|
-
path = "http://vidibus.org/status?type=server&sign=ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0"
|
351
|
-
Vidibus::Secure.verify_request(:delete, path, {}, key).should be_false
|
352
|
-
end
|
353
|
-
|
354
|
-
it "should return false if params do not match signature" do
|
355
|
-
params = {"sign" => "ff98a086cca8af703537afe873009f16ea5554826fa5d2665c212a13e44f7da0", "some" => "invalid"}
|
356
|
-
Vidibus::Secure.verify_request(:post, "/", params, key).should be_false
|
357
|
-
end
|
358
|
-
|
359
|
-
it "should return false if signature does not match params" do
|
360
|
-
params = {"sign" => "invalid", "some" => "thing"}
|
361
|
-
Vidibus::Secure.verify_request(:post, "/", params, key).should be_false
|
362
|
-
end
|
363
|
-
|
364
|
-
it "should accept nil params" do
|
365
|
-
expect { Vidibus::Secure.verify_request(:get, "", nil, key) }.to_not raise_error
|
366
|
-
end
|
367
|
-
end
|
368
|
-
end
|
data/vidibus-secure.gemspec
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path("../lib/", __FILE__)
|
3
|
-
$:.unshift lib unless $:.include?(lib)
|
4
|
-
|
5
|
-
require "vidibus/secure/version"
|
6
|
-
|
7
|
-
Gem::Specification.new do |s|
|
8
|
-
s.name = "vidibus-secure"
|
9
|
-
s.version = Vidibus::Secure::VERSION
|
10
|
-
s.platform = Gem::Platform::RUBY
|
11
|
-
s.authors = "Andre Pankratz"
|
12
|
-
s.email = "andre@vidibus.com"
|
13
|
-
s.homepage = "https://github.com/vidibus/vidibus-secure"
|
14
|
-
s.summary = "Security tools for Vidibus applications"
|
15
|
-
s.description = "Allows encryption and signing of requests and storing encrypted data within Mongoid documents."
|
16
|
-
|
17
|
-
s.required_rubygems_version = ">= 1.3.6"
|
18
|
-
s.rubyforge_project = "vidibus-resource"
|
19
|
-
|
20
|
-
s.add_dependency "rack", "~> 1.2.1"
|
21
|
-
s.add_dependency "mongoid", "~> 2"
|
22
|
-
s.add_dependency "activesupport", "~> 3"
|
23
|
-
s.add_dependency "json"
|
24
|
-
s.add_dependency "vidibus-core_extensions"
|
25
|
-
|
26
|
-
s.add_development_dependency "bundler", ">= 1.0.0"
|
27
|
-
s.add_development_dependency "rake"
|
28
|
-
s.add_development_dependency "rdoc"
|
29
|
-
s.add_development_dependency "rspec", "~> 2"
|
30
|
-
s.add_development_dependency "rr"
|
31
|
-
s.add_development_dependency "rcov"
|
32
|
-
s.add_development_dependency "actionpack", "~> 3"
|
33
|
-
|
34
|
-
s.files = `git ls-files`.split("\n")
|
35
|
-
s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact
|
36
|
-
s.require_path = 'lib'
|
37
|
-
end
|