crumbl 0.0.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.
- 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: []
|