tokenifier 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +40 -12
- data/lib/tokenifier/cipher.rb +32 -1
- data/lib/tokenifier/cli.rb +10 -10
- data/lib/tokenifier/version.rb +1 -1
- data/lib/tokenifier.rb +0 -1
- data/spec/cipher_spec.rb +24 -0
- data/spec/encrypt_spec.rb +2 -4
- data/spec/spec_helper.rb +34 -1
- data/spec/support/config/tokenifier.yml +2 -0
- data/spec/tekenifier_spec.rb +0 -4
- data/tokenifier.gemspec +1 -1
- metadata +39 -63
- data/lib/tokenifier/rails.rb +0 -18
data/README.md
CHANGED
@@ -1,30 +1,56 @@
|
|
1
1
|
# Tokenifier
|
2
2
|
|
3
3
|
Tokenifier is a Gibberish gem wrapper.
|
4
|
-
It provides an approach to encrypt and decrypt structures like
|
4
|
+
It provides an approach to encrypt and decrypt structures like Numeric, String and Hash.
|
5
|
+
|
6
|
+
[![Build Status](https://secure.travis-ci.org/ludo/tokenifier.png)](http://travis-ci.org/ludo/tokenifier)
|
7
|
+
|
5
8
|
|
6
9
|
## Installation
|
7
10
|
|
11
|
+
Install the gem
|
12
|
+
|
13
|
+
gem install tokenifier
|
14
|
+
|
15
|
+
Tokenifier will install gibberish the gem as dependency
|
16
|
+
|
17
|
+
require "tokenifier"
|
18
|
+
|
19
|
+
Thats it.
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
## Rails
|
24
|
+
|
8
25
|
Put the string into Gemfile
|
9
26
|
|
10
|
-
gem "tokenifier"
|
27
|
+
gem "tokenifier", "~> 0.1"
|
28
|
+
|
29
|
+
Run tokenifier:install generator
|
11
30
|
|
12
|
-
|
31
|
+
rails g tokenifier:install
|
32
|
+
|
33
|
+
Rails generator will create config/tokenifier.yml with unique secret strings.
|
13
34
|
|
14
35
|
development:
|
15
36
|
secret: 7e991d82a0dd42b0afa293a339308c6f
|
16
37
|
|
38
|
+
You have to use a permanent secret string to decrypt tokens.
|
39
|
+
If no secret defined for environment Tokenifier uses random secret string each execution time.
|
40
|
+
|
41
|
+
|
42
|
+
|
17
43
|
## Usage
|
18
44
|
|
19
|
-
To encrypt data
|
45
|
+
To encrypt data
|
20
46
|
|
21
|
-
Tokenifier.encrypt("string") # =>
|
22
|
-
Tokenifier.encrypt(:key => 'value') # =>
|
47
|
+
Tokenifier.encrypt("string") # => "U2FsdGVkX1+YHpkTh..."
|
48
|
+
Tokenifier.encrypt(:key => 'value') # => "U2FsdGVkX18ts+aRd..."
|
23
49
|
|
24
|
-
To decrypt data
|
50
|
+
To decrypt data
|
25
51
|
|
26
|
-
Tokenifier.decrypt("
|
27
|
-
Tokenifier.decrypt("
|
52
|
+
Tokenifier.decrypt("U2FsdGVkX1+...") # => "string"
|
53
|
+
Tokenifier.decrypt("U2FsdGVkX18...") # => {"key" => "value"}
|
28
54
|
|
29
55
|
Errors handling
|
30
56
|
|
@@ -33,12 +59,14 @@ Errors handling
|
|
33
59
|
|
34
60
|
Tokenifier.decrypt("malformed hash") # => raises Tokenifier::Error
|
35
61
|
|
36
|
-
|
62
|
+
Custom secret usage
|
37
63
|
|
38
64
|
data = Tokenifier.encrypt("string", :secret => 'secret')
|
39
65
|
Tokenifier.decrypt(data, :secret => 'secret') # => "string"
|
40
66
|
Tokenifier.decrypt(data) # => raises Tokenifier::Error, "Got a malformed string"
|
41
67
|
|
68
|
+
|
69
|
+
|
42
70
|
## CLI usage
|
43
71
|
|
44
72
|
Usage:
|
@@ -51,8 +79,8 @@ Commands:
|
|
51
79
|
e|encrypt - Does data encryption of any string data
|
52
80
|
d|decrypt - Does data decryption from hashed data.
|
53
81
|
|
54
|
-
NOTE: You have to use permanent secret to
|
55
|
-
Tokinifier generates
|
82
|
+
NOTE: You have to use a permanent secret to decrypt a data.
|
83
|
+
Tokinifier generates random secret string each execution time instead.
|
56
84
|
|
57
85
|
Examples:
|
58
86
|
|
data/lib/tokenifier/cipher.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
module Tokenifier
|
2
4
|
module Cipher
|
3
5
|
|
4
6
|
def secret
|
5
|
-
@secret ||=
|
7
|
+
@secret ||= load_rails_secret
|
8
|
+
@secret ||= Tokenifier::Random.secret
|
9
|
+
@secret
|
6
10
|
end
|
7
11
|
|
8
12
|
def cipher(*args, &block)
|
@@ -10,5 +14,32 @@ module Tokenifier
|
|
10
14
|
block_given? ? yield(aes) : aes
|
11
15
|
end
|
12
16
|
|
17
|
+
def load_rails_secret
|
18
|
+
return unless defined?(Rails)
|
19
|
+
|
20
|
+
filename = Rails.root.join('config', 'tokenifier.yml')
|
21
|
+
|
22
|
+
puts filename
|
23
|
+
|
24
|
+
if File.exists?(filename)
|
25
|
+
config = YAML.load(
|
26
|
+
ERB.new(
|
27
|
+
IO.read(filename)
|
28
|
+
).result
|
29
|
+
)[Rails.env]
|
30
|
+
|
31
|
+
@secret = config['secret']
|
32
|
+
else
|
33
|
+
@secret = Tokenifier::Random.secret
|
34
|
+
|
35
|
+
Rails.logger.warn "*** Tokenifier warning:"
|
36
|
+
Rails.logger.warn "*** Config tokenifier.yml file not found."
|
37
|
+
Rails.logger.warn "*** Run rails g tokenifier:install to generate one"
|
38
|
+
Rails.logger.warn "*** Using secret: #{@secret}"
|
39
|
+
end
|
40
|
+
|
41
|
+
@secret
|
42
|
+
end
|
43
|
+
|
13
44
|
end
|
14
45
|
end
|
data/lib/tokenifier/cli.rb
CHANGED
@@ -14,24 +14,24 @@ module Tokenifier
|
|
14
14
|
|
15
15
|
Usage:
|
16
16
|
|
17
|
-
|
17
|
+
tokenifier [options] COMMAND 'custom string'
|
18
18
|
|
19
19
|
Commands:
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
s|secret - Generates secret string
|
22
|
+
e|encrypt - Does data encryption of any string data
|
23
|
+
d|decrypt - Does data decryption from hashed data.
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
NOTE: You have to use a permanent secret to decrypt a data.
|
26
|
+
Tokinifier generates random secret string each execution time instead.
|
27
27
|
|
28
28
|
Examples:
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
tokenifier encrypt "CUSTOM DATA"
|
31
|
+
tokenifier decrypt "CUSTOM DATA"
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
tokenifier --secret MYSECRET e "CUSTOM DATA"
|
34
|
+
tokenifier --secret MYSECRET d "ENCRYPTED DATA"
|
35
35
|
|
36
36
|
|
37
37
|
USAGE
|
data/lib/tokenifier/version.rb
CHANGED
data/lib/tokenifier.rb
CHANGED
data/spec/cipher_spec.rb
CHANGED
@@ -48,4 +48,28 @@ describe Tokenifier::Cipher do
|
|
48
48
|
|
49
49
|
end
|
50
50
|
|
51
|
+
describe ".load_rails_secret" do
|
52
|
+
|
53
|
+
let(:rails) { Class.new }
|
54
|
+
|
55
|
+
before {
|
56
|
+
rails.stub_chain(:root, :join).and_return(File.expand_path('../support/config/tokenifier.yml', __FILE__))
|
57
|
+
rails.stub_chain(:logger).and_return(mock(:logger, :warn => nil))
|
58
|
+
rails.stub(:env).and_return('test')
|
59
|
+
}
|
60
|
+
|
61
|
+
specify {
|
62
|
+
with_stub_const(:Rails, rails) do
|
63
|
+
subject.load_rails_secret.should == 'aaabbbccc'
|
64
|
+
end
|
65
|
+
}
|
66
|
+
|
67
|
+
specify {
|
68
|
+
without_const(:Rails) do
|
69
|
+
subject.load_rails_secret.should_not == 'aaabbbccc'
|
70
|
+
end
|
71
|
+
}
|
72
|
+
|
73
|
+
end
|
74
|
+
|
51
75
|
end
|
data/spec/encrypt_spec.rb
CHANGED
@@ -22,14 +22,12 @@ describe Tokenifier::Encrypt do
|
|
22
22
|
|
23
23
|
context "a few key-value pairs" do
|
24
24
|
let(:hsh) { {:a => 2, :b => 'string 123', :c => true} }
|
25
|
-
let(:expected) { "
|
25
|
+
let(:expected) { "a:2#b:string 123#c:true" }
|
26
26
|
specify { packed.should == expected }
|
27
27
|
end
|
28
28
|
|
29
29
|
context "we are not supporting nested hashes yet due simplicity of solution" do
|
30
|
-
|
31
|
-
let(:expected) { "sub:a33#a:2#b:string 123" }
|
32
|
-
specify { packed.should == expected }
|
30
|
+
pending
|
33
31
|
end
|
34
32
|
|
35
33
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1 +1,34 @@
|
|
1
|
-
require 'tokenifier'
|
1
|
+
require 'tokenifier'
|
2
|
+
|
3
|
+
def without_const(const)
|
4
|
+
if Object.const_defined?(const)
|
5
|
+
begin
|
6
|
+
@const = const
|
7
|
+
Object.send(:remove_const, const)
|
8
|
+
yield
|
9
|
+
ensure
|
10
|
+
Object.const_set(const, @const)
|
11
|
+
end
|
12
|
+
else
|
13
|
+
yield
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def with_stub_const(const, value)
|
18
|
+
if Object.const_defined?(const)
|
19
|
+
begin
|
20
|
+
@const = const
|
21
|
+
Object.const_set(const, value)
|
22
|
+
yield
|
23
|
+
ensure
|
24
|
+
Object.const_set(const, @const)
|
25
|
+
end
|
26
|
+
else
|
27
|
+
begin
|
28
|
+
Object.const_set(const, value)
|
29
|
+
yield
|
30
|
+
ensure
|
31
|
+
Object.send(:remove_const, const)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/tekenifier_spec.rb
CHANGED
data/tokenifier.gemspec
CHANGED
metadata
CHANGED
@@ -1,63 +1,47 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: tokenifier
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 1
|
10
|
-
version: 0.0.1
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Dmtiry Larkin
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-12-23 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: gibberish
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70275141515140 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
18
|
+
requirements:
|
26
19
|
- - ~>
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 1
|
31
|
-
- 2
|
32
|
-
version: "1.2"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.2'
|
33
22
|
type: :runtime
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: rspec
|
37
23
|
prerelease: false
|
38
|
-
|
24
|
+
version_requirements: *70275141515140
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70275141514640 !ruby/object:Gem::Requirement
|
39
28
|
none: false
|
40
|
-
requirements:
|
41
|
-
- -
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
hash: 23
|
44
|
-
segments:
|
45
|
-
- 2
|
46
|
-
- 6
|
47
|
-
- 0
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
48
32
|
version: 2.6.0
|
49
33
|
type: :development
|
50
|
-
|
51
|
-
|
52
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70275141514640
|
36
|
+
description: Tokenifier is a Gibberish gem wrapper. It provides an aproach to encrypt
|
37
|
+
and decrypt structures like Strings, Hashes.
|
38
|
+
email:
|
53
39
|
- dmitry.larkin@gmail.com
|
54
|
-
executables:
|
40
|
+
executables:
|
55
41
|
- tokenifier
|
56
42
|
extensions: []
|
57
|
-
|
58
43
|
extra_rdoc_files: []
|
59
|
-
|
60
|
-
files:
|
44
|
+
files:
|
61
45
|
- lib/generators/tokenifier/install/install_generator.rb
|
62
46
|
- lib/generators/tokenifier/install/templates/config/tokenifier.yml.erb
|
63
47
|
- lib/generators/tokenifier/install/USAGE
|
@@ -66,7 +50,6 @@ files:
|
|
66
50
|
- lib/tokenifier/decrypt.rb
|
67
51
|
- lib/tokenifier/encrypt.rb
|
68
52
|
- lib/tokenifier/error.rb
|
69
|
-
- lib/tokenifier/rails.rb
|
70
53
|
- lib/tokenifier/random.rb
|
71
54
|
- lib/tokenifier/version.rb
|
72
55
|
- lib/tokenifier.rb
|
@@ -75,6 +58,7 @@ files:
|
|
75
58
|
- spec/encrypt_spec.rb
|
76
59
|
- spec/random_spec.rb
|
77
60
|
- spec/spec_helper.rb
|
61
|
+
- spec/support/config/tokenifier.yml
|
78
62
|
- spec/tekenifier_spec.rb
|
79
63
|
- bin/tokenifier
|
80
64
|
- Rakefile
|
@@ -82,41 +66,33 @@ files:
|
|
82
66
|
- tokenifier.gemspec
|
83
67
|
homepage: https://github.com/ludo/tokenifier
|
84
68
|
licenses: []
|
85
|
-
|
86
69
|
post_install_message:
|
87
70
|
rdoc_options: []
|
88
|
-
|
89
|
-
require_paths:
|
71
|
+
require_paths:
|
90
72
|
- lib
|
91
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
74
|
none: false
|
93
|
-
requirements:
|
94
|
-
- -
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
|
97
|
-
|
98
|
-
- 0
|
99
|
-
version: "0"
|
100
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
80
|
none: false
|
102
|
-
requirements:
|
103
|
-
- -
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
|
106
|
-
segments:
|
107
|
-
- 0
|
108
|
-
version: "0"
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
109
85
|
requirements: []
|
110
|
-
|
111
86
|
rubyforge_project:
|
112
87
|
rubygems_version: 1.8.10
|
113
88
|
signing_key:
|
114
89
|
specification_version: 3
|
115
90
|
summary: Tokenifier Gem
|
116
|
-
test_files:
|
91
|
+
test_files:
|
117
92
|
- spec/cipher_spec.rb
|
118
93
|
- spec/decrypt_spec.rb
|
119
94
|
- spec/encrypt_spec.rb
|
120
95
|
- spec/random_spec.rb
|
121
96
|
- spec/spec_helper.rb
|
97
|
+
- spec/support/config/tokenifier.yml
|
122
98
|
- spec/tekenifier_spec.rb
|
data/lib/tokenifier/rails.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
if env_caller
|
2
|
-
require 'rails'
|
3
|
-
|
4
|
-
Rails.logger.info "I am required in rails"
|
5
|
-
|
6
|
-
filename = File.expand_path(env_caller + "/../../config/tokenifier.yml")
|
7
|
-
|
8
|
-
if File.exists?(filename)
|
9
|
-
Rails.logger.info YAML::load(
|
10
|
-
ERB.new(
|
11
|
-
IO.read(filename)
|
12
|
-
).result
|
13
|
-
)[Rails.env].inspect
|
14
|
-
else
|
15
|
-
Rails.logger.info "Config file not found"
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|