tokenifier 0.0.1 → 0.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/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
|
+
[](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
|