simple_signer 0.0.2
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/Rakefile +8 -0
- data/lib/simple_signer.rb +2 -0
- data/lib/simple_signer/signer.rb +40 -0
- data/simple_signer.gemspec +10 -0
- data/test/simple_signer_test.rb +67 -0
- metadata +49 -0
data/Rakefile
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
This file is part of SimpleSigner.
|
|
3
|
+
|
|
4
|
+
SimpleSigner is free software: you can redistribute it and/or modify
|
|
5
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
6
|
+
the Free Software Foundation, either version 3 of the License.
|
|
7
|
+
|
|
8
|
+
SimpleSigner is distributed in the hope that it will be useful,
|
|
9
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
10
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
11
|
+
GNU Lesser General Public License for more details.
|
|
12
|
+
|
|
13
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
14
|
+
along with SimpleSigner. If not, see <http://www.gnu.org/licenses/>.
|
|
15
|
+
=end
|
|
16
|
+
|
|
17
|
+
require 'openssl'
|
|
18
|
+
require 'base64'
|
|
19
|
+
require 'cgi'
|
|
20
|
+
|
|
21
|
+
class SimpleSigner
|
|
22
|
+
|
|
23
|
+
def self.sign options = {}
|
|
24
|
+
raise 'secret_key is required!' unless options.include?(:secret_key) and options[:secret_key]
|
|
25
|
+
raise 'string is required!' unless options.include?(:string) and options[:string]
|
|
26
|
+
|
|
27
|
+
signed = OpenSSL::HMAC.digest('sha1', options[:secret_key], options[:string].encode('utf-8'))
|
|
28
|
+
|
|
29
|
+
Base64.encode64(signed).strip
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def self.escape token
|
|
33
|
+
token.empty? ? token : CGI.escape(token)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.unescape token
|
|
37
|
+
(token.empty? or not token.include?('%')) ? token : CGI.unescape(token)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
Gem::Specification.new do |s|
|
|
2
|
+
s.name = "simple_signer"
|
|
3
|
+
s.version = "0.0.2"
|
|
4
|
+
s.description = "Sign your strings!"
|
|
5
|
+
s.summary = "Simple signer!"
|
|
6
|
+
s.author = "Lucas D'Avila"
|
|
7
|
+
s.email = 'lucas@lucasdavi.la'
|
|
8
|
+
s.homepage = 'https://github.com/simpleservices/simple_signer'
|
|
9
|
+
s.files = Dir["{lib/**/*.rb,README.rdoc,test/**/*.rb,Rakefile,*.gemspec}"]
|
|
10
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# coding=utf-8
|
|
2
|
+
|
|
3
|
+
=begin
|
|
4
|
+
This file is part of SimpleSigner.
|
|
5
|
+
|
|
6
|
+
SimpleSigner is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU Lesser General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License.
|
|
9
|
+
|
|
10
|
+
SimpleSigner is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13
|
+
GNU Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public License
|
|
16
|
+
along with SimpleSigner. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
+
=end
|
|
18
|
+
|
|
19
|
+
require 'test/unit'
|
|
20
|
+
require 'simple_signer'
|
|
21
|
+
|
|
22
|
+
class SimpleSignerTest < Test::Unit::TestCase
|
|
23
|
+
|
|
24
|
+
def test_raise_secret_key_is_required
|
|
25
|
+
assert_raise RuntimeError, 'secret_key is required!' do
|
|
26
|
+
SimpleSigner.sign
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_raise_string_is_required
|
|
31
|
+
assert_raise RuntimeError, 'string is required!' do
|
|
32
|
+
SimpleSigner.sign :secret_key => 'abc'
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_sign_strings
|
|
37
|
+
key = 'DrAGMrjPbJWHn+9ioJrA3s5/Q3ownDFBYZqFcZLm'
|
|
38
|
+
string = 'Some string to sign => é ê ç ê á ṕ ǵ ś "a \'b <c/> \\d %e'
|
|
39
|
+
|
|
40
|
+
expected_signature = 'k0YywdmJaMbQYfWXUZzRkc/Zhiw='
|
|
41
|
+
given_signature = SimpleSigner.sign :secret_key => key, :string => string
|
|
42
|
+
|
|
43
|
+
assert_equal expected_signature, given_signature
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_escape_strings
|
|
47
|
+
string = 'CfsldUIyOOORHjnE8PIl0k0xmOQ='
|
|
48
|
+
expected = 'CfsldUIyOOORHjnE8PIl0k0xmOQ%3D'
|
|
49
|
+
|
|
50
|
+
assert_equal expected, SimpleSigner.escape(string)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def test_unescape_escaped_strings
|
|
54
|
+
string = 'CfsldUIyOOORHjnE8PIl0k0xmOQ%3D'
|
|
55
|
+
expected = 'CfsldUIyOOORHjnE8PIl0k0xmOQ='
|
|
56
|
+
|
|
57
|
+
assert_equal expected, SimpleSigner.unescape(string)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def test_unescape_only_escaped_strings
|
|
61
|
+
string = 'CfsldUIyOOORHjnE8PIl0k0xmOQ='
|
|
62
|
+
expected = 'CfsldUIyOOORHjnE8PIl0k0xmOQ='
|
|
63
|
+
|
|
64
|
+
assert_equal expected, SimpleSigner.unescape(string)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: simple_signer
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.2
|
|
5
|
+
prerelease:
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Lucas D'Avila
|
|
9
|
+
autorequire:
|
|
10
|
+
bindir: bin
|
|
11
|
+
cert_chain: []
|
|
12
|
+
date: 2013-03-21 00:00:00.000000000 Z
|
|
13
|
+
dependencies: []
|
|
14
|
+
description: Sign your strings!
|
|
15
|
+
email: lucas@lucasdavi.la
|
|
16
|
+
executables: []
|
|
17
|
+
extensions: []
|
|
18
|
+
extra_rdoc_files: []
|
|
19
|
+
files:
|
|
20
|
+
- lib/simple_signer.rb
|
|
21
|
+
- lib/simple_signer/signer.rb
|
|
22
|
+
- test/simple_signer_test.rb
|
|
23
|
+
- Rakefile
|
|
24
|
+
- simple_signer.gemspec
|
|
25
|
+
homepage: https://github.com/simpleservices/simple_signer
|
|
26
|
+
licenses: []
|
|
27
|
+
post_install_message:
|
|
28
|
+
rdoc_options: []
|
|
29
|
+
require_paths:
|
|
30
|
+
- lib
|
|
31
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
32
|
+
none: false
|
|
33
|
+
requirements:
|
|
34
|
+
- - ! '>='
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: '0'
|
|
37
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
|
+
none: false
|
|
39
|
+
requirements:
|
|
40
|
+
- - ! '>='
|
|
41
|
+
- !ruby/object:Gem::Version
|
|
42
|
+
version: '0'
|
|
43
|
+
requirements: []
|
|
44
|
+
rubyforge_project:
|
|
45
|
+
rubygems_version: 1.8.24
|
|
46
|
+
signing_key:
|
|
47
|
+
specification_version: 3
|
|
48
|
+
summary: Simple signer!
|
|
49
|
+
test_files: []
|