crumbl 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/crumbl +40 -0
- data/lib/crumbl.rb +1 -0
- data/lib/crumbl/base.rb +38 -0
- data/lib/crumbl/version.rb +3 -0
- metadata +78 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 96844368eb9bb07b4a3e1b9f465e693e4ceb7968
|
4
|
+
data.tar.gz: 1650c8a197aac92dfbf656ee9c94e85fa55ca2a6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8107ad12dc873a67f434200ff53dd79c1c45075431b8685be13a00387f818e15026eed6431a8c0726f26718a195b1636d91cf2a9e202c699a11d686d5bbf048e
|
7
|
+
data.tar.gz: e874767de7015be80554ed2ecb03106a0b92e5f681d236eefa5a4fd8088be7c362513ac20d397cbe9f496de72fba21f49737b72410a199b7ed687fe8da883a27
|
data/bin/crumbl
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'crumbl'
|
5
|
+
require 'thor'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'crumbl'
|
9
|
+
require 'thor'
|
10
|
+
end
|
11
|
+
|
12
|
+
class CrumblCmd < Thor
|
13
|
+
desc "decode [COOKIE]", "Decode a Rails 3 cookie [COOKIE]"
|
14
|
+
def decode(cookie)
|
15
|
+
Crumbl.decode cookie
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "encode [DATA] [KEY]", "Encode [DATA] as a Rails 3 cookie signed with secret key [KEY]"
|
19
|
+
def encode(data, key)
|
20
|
+
Crumbl.encode data, key
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "decrypt [COOKIE] [KEY BASE]", "Decrypt Rails 4 [COOKIE] using secret key base [KEY BASE]"
|
24
|
+
method_option :iterations, :aliases => "-i", :default => Crumbl::DEFAULT_ITERATIONS, :type => :numeric
|
25
|
+
method_option :encrypted_cookie_salt, :aliases => "-e", :default => Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT
|
26
|
+
method_option :encrypted_signed_cookie_salt, :aliases => "-s", :default => Crumbl::DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
|
27
|
+
def decrypt(cookie, secret_key_base)
|
28
|
+
Crumbl.decrypt cookie, secret_key_base, options[:iterations], options[:encrypted_cookie_salt], options[:encrypted_signed_cookie_salt]
|
29
|
+
end
|
30
|
+
|
31
|
+
desc "encrypt [DATA] [KEY BASE]", "Encrypt Rails 4 [DATA] using secret key base [KEY BASE]"
|
32
|
+
method_option :iterations, :aliases => "-i", :default => Crumbl::DEFAULT_ITERATIONS, :type => :numeric
|
33
|
+
method_option :encrypted_cookie_salt, :aliases => "-e", :default => Crumbl::DEFAULT_ENCRYPTED_COOKIE_SALT
|
34
|
+
method_option :encrypted_signed_cookie_salt, :aliases => "-s", :default => Crumbl::DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
|
35
|
+
def encrypt(data, secret_key_base)
|
36
|
+
Crumbl.encrypt data, secret_key_base, options[:iterations], options[:encrypted_cookie_salt], options[:encrypted_signed_cookie_salt]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
CrumblCmd.start
|
data/lib/crumbl.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'crumbl/base'
|
data/lib/crumbl/base.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'active_support/all'
|
2
|
+
require 'rack'
|
3
|
+
|
4
|
+
class Crumbl
|
5
|
+
|
6
|
+
DEFAULT_ITERATIONS = 1000
|
7
|
+
DEFAULT_ENCRYPTED_COOKIE_SALT = "encrypted cookie"
|
8
|
+
DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT = "signed encrypted cookie"
|
9
|
+
|
10
|
+
def self.decode cookie
|
11
|
+
decoded = ::Rack::Session::Cookie::Base64::Marshal.new.decode(cookie)
|
12
|
+
puts "Decoded: #{decoded}"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.encode data, key
|
16
|
+
cookie_verifier = ActiveSupport::MessageVerifier.new(key)
|
17
|
+
encoded = cookie_verifier.generate data
|
18
|
+
puts "Encoded: #{encoded}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.decrypt cookie, secret_key_base, iterations=DEFAULT_ITERATIONS, encrypted_cookie_salt=DEFAULT_ENCRYPTED_COOKIE_SALT, encrypted_signed_cookie_salt=DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
|
22
|
+
key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: iterations)
|
23
|
+
secret = key_generator.generate_key(encrypted_cookie_salt)
|
24
|
+
sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
|
25
|
+
encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
|
26
|
+
decrypted = encryptor.decrypt_and_verify(cookie)
|
27
|
+
puts "Decrypted: #{decrypted}"
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.encrypt data, secret_key_base, iterations=DEFAULT_ITERATIONS, encrypted_cookie_salt=DEFAULT_ENCRYPTED_COOKIE_SALT, encrypted_signed_cookie_salt=DEFAULT_ENCRYPTED_SIGNED_COOKIE_SALT
|
31
|
+
key_generator = ActiveSupport::KeyGenerator.new(secret_key_base, iterations: iterations)
|
32
|
+
secret = key_generator.generate_key(encrypted_cookie_salt)
|
33
|
+
sign_secret = key_generator.generate_key(encrypted_signed_cookie_salt)
|
34
|
+
encryptor = ActiveSupport::MessageEncryptor.new(secret, sign_secret)
|
35
|
+
encrypted = encryptor.encrypt_and_sign(data)
|
36
|
+
puts "Encrypted: #{encrypted}"
|
37
|
+
end
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crumbl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- David Lanner
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-10-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rack
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 4.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 4.0.0
|
41
|
+
description: Command line tool for reading and manipulating encoded or encrypted Rails
|
42
|
+
cookies
|
43
|
+
email: dhlanner2@gmail.com
|
44
|
+
executables:
|
45
|
+
- crumbl
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- bin/crumbl
|
50
|
+
- lib/crumbl.rb
|
51
|
+
- lib/crumbl/base.rb
|
52
|
+
- lib/crumbl/version.rb
|
53
|
+
homepage: http://rubygems.org/gems/crumbl
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
metadata: {}
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
- bin
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 2.4.2
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: Read and manipulate encoded or encrypted Rails cookies
|
78
|
+
test_files: []
|