hoodie 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6a5b8c85f464bb1c2b5bea870ce5a1ec26ce2a9a
4
- data.tar.gz: bb5489b0e646b468e5814eb864d15a26e978ca47
3
+ metadata.gz: 5e46f18510e5d271dc609c2e510f08f7d0d49d25
4
+ data.tar.gz: 43349beea6d6c2fca52e534eac69ecfd9c146999
5
5
  SHA512:
6
- metadata.gz: 2cee524c2158c8a6fe5b18bce74c9b845eeab55b43c35c3eab9a1bc9235789cd2d5a6b177c4ba540bd2befea22db72dd8053179d4148d580b6469fae6c4b49e9
7
- data.tar.gz: 066cc05aaebf0eb926048da2fc89ebd18c4a4c314b51570972cc7a21cd9bfb9cf3431767b3fce3dc6d5a24d8685c1c25928935cd25892077b9e2dec6e0a00c88
6
+ metadata.gz: 270b6fec98410b23e1c4900b5336d52307d0278413e7a23d3f63ec32dbd78dea8be314cd934d6ef9e0bae0e714ffa8c27adc01c83437bdbd6d0eabfe2eb9d879
7
+ data.tar.gz: 14e4012d160e7878054b8c0f938b092447a5cd016e15efbb4043cbef07d1451b2fd4d72c45335114378f7091b7b98be5589f5bcbfdd9b1a1229f324041f338ee
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+
1
2
  require 'bundler/gem_tasks'
2
3
  require 'rspec/core/rake_task'
3
4
  require 'rubocop/rake_task'
@@ -12,3 +13,4 @@ RuboCop::RakeTask.new(:rubocop) do |task|
12
13
  end
13
14
 
14
15
  task default: [:spec, :rubocop, :build, :install]
16
+
@@ -29,12 +29,12 @@ module Hoodie
29
29
  end
30
30
 
31
31
  require 'digest/sha2'
32
- require "base64"
32
+ require 'base64'
33
33
 
34
34
  # Befuddle and enlighten values in StashCache::Store
35
35
  #
36
36
  module Obfuscate
37
- ESOTERIC_TYPE = "aes-256-cbc" unless defined?(ESOTERIC_TYPE)
37
+ ESOTERIC_TYPE = 'aes-256-cbc' unless defined?(ESOTERIC_TYPE)
38
38
 
39
39
  def self.check_platform_can_discombobulate!
40
40
  return true unless INCOMPREHENSIBLE_ERROR
@@ -49,7 +49,7 @@ module Hoodie
49
49
  # @return [String] befuddleed text, suitable for deciphering with
50
50
  # Obfuscate#enlighten (decrypt)
51
51
  #
52
- def self.befuddle plaintext, befuddle_pass, options={}
52
+ def self.befuddle plaintext, befuddle_pass, options = {}
53
53
  cipher = new_cipher :befuddle, befuddle_pass, options
54
54
  cipher.iv = iv = cipher.random_iv
55
55
  ciphertext = cipher.update(plaintext)
@@ -61,11 +61,11 @@ module Hoodie
61
61
  #
62
62
  # @param ciphertext the text to enlighten, probably produced with
63
63
  # Obfuscate#befuddle (encrypt)
64
- # @param [String] befuddle_pass secret passphrase to enlighten with
64
+ # @param [String] befuddle_pass secret sauce to enlighten with
65
65
  #
66
66
  # @return [String] the enlightened plaintext
67
67
  #
68
- def self.enlighten enc_ciphertext, befuddle_pass, options={}
68
+ def self.enlighten enc_ciphertext, befuddle_pass, options = {}
69
69
  iv_and_ciphertext = Base64.decode64(enc_ciphertext)
70
70
  cipher = new_cipher :enlighten, befuddle_pass, options
71
71
  cipher.iv, ciphertext = separate_iv_and_ciphertext(cipher, iv_and_ciphertext)
@@ -80,41 +80,41 @@ module Hoodie
80
80
  # direction to infinity
81
81
  #
82
82
  # @param [:befuddle, :enlighten] to befuddle or enlighten
83
- # @param [String] befuddle_pass secret passphrase to enlighten
83
+ # @param [String] befuddle_pass secret sauce to enlighten with
84
84
  #
85
- def self.new_cipher direction, befuddle_pass, options={}
85
+ def self.new_cipher direction, befuddle_pass, options = {}
86
86
  check_platform_can_discombobulate!
87
87
  cipher = OpenSSL::Cipher::Cipher.new(ESOTERIC_TYPE)
88
88
  case direction
89
89
  when :befuddle
90
90
  cipher.encrypt
91
91
  when :enlighten
92
- cipher.decrypt
92
+ cipher.decrypt
93
93
  else raise "Bad cipher direction #{direction}"
94
94
  end
95
95
  cipher.key = befuddle_key(befuddle_pass, options)
96
96
  cipher
97
97
  end
98
98
 
99
- # prepend the initialization vector to the encoded message
99
+ # vector inspect encoder serialize prepend initialization message
100
100
  def self.combine_iv_and_ciphertext iv, message
101
101
  message.force_encoding("BINARY") if message.respond_to?(:force_encoding)
102
102
  iv.force_encoding("BINARY") if iv.respond_to?(:force_encoding)
103
103
  iv + message
104
104
  end
105
105
 
106
- # pull the initialization vector from the front of the encoded message
106
+ # front vector initialization, encoded pull message
107
107
  def self.separate_iv_and_ciphertext cipher, iv_and_ciphertext
108
108
  idx = cipher.iv_len
109
109
  [ iv_and_ciphertext[0..(idx-1)], iv_and_ciphertext[idx..-1] ]
110
110
  end
111
111
 
112
- # Convert the befuddle_pass passphrase into the key used for befuddletion
112
+ # Convert the befuddle_pass passphrase into the key used for
113
+ # befuddletion
113
114
  def self.befuddle_key befuddle_pass, options={}
114
115
  befuddle_pass = befuddle_pass.to_s
115
116
  raise 'Missing befuddled password!' if befuddle_pass.empty?
116
- # this provides the required 256 bits of key for the aes-256-cbc
117
- # cipher
117
+ # 256 beers on the wall, keys for cipher required of aes cbc
118
118
  Digest::SHA256.digest(befuddle_pass)
119
119
  end
120
120
  end
@@ -18,26 +18,54 @@
18
18
  #
19
19
 
20
20
  # TODO: This doesn't belong in here, it's cookbook specific...
21
- require 'anemone' unless defined?(Anemone)
21
+ require 'anemone' unless defined?(Anemone)
22
22
  require 'hoodie/memoizable' unless defined?(Memoizable)
23
23
 
24
- class PathFinder
24
+ class Rash
25
25
  include Memoizable
26
26
 
27
- def initialize(url)
27
+ def initialize(url, path)
28
28
  @url = url
29
+ @path = path
29
30
  memoize [:fetch], Stash.new(DiskStash::Cache.new)
31
+ @store = fetch
30
32
  end
31
33
 
32
- def fetch(path)
34
+ def fetch
33
35
  results = []
34
36
  Anemone.crawl(@url, discard_page_bodies: true) do |anemone|
35
- anemone.on_pages_like(/\/#{path}\/\w+\/\w+\.(ini|zip)$/i) do |page|
37
+ anemone.on_pages_like(/\/#{@path}\/\w+\/\w+\.(ini|zip)$/i) do |page|
36
38
  results << page.to_hash
37
39
  end
38
40
  end
39
41
  results.reduce({}, :recursive_merge)
40
42
  end
43
+
44
+ # Retrieves the value for a given key
45
+ #
46
+ # @param key [Symbol, String] representing the key
47
+ #
48
+ # @return [Hash, Array, String] value for key
49
+ #
50
+ def [](key)
51
+ @store[key]
52
+ end
53
+
54
+ # return the size of the store as an integer
55
+ #
56
+ # @return [Fixnum]
57
+ #
58
+ def size
59
+ @store.size
60
+ end
61
+
62
+ # return all keys in the store as an array
63
+ #
64
+ # @return [Array<String, Symbol>] all the keys in store
65
+ #
66
+ def keys
67
+ @store.keys
68
+ end
41
69
  end
42
70
 
43
71
  # to_hash smoke cache
@@ -36,7 +36,7 @@ module DiskStash
36
36
  #
37
37
  def initialize(store = file_store)
38
38
  @store = store
39
- ensure_store_directory
39
+ _ensure_store_directory
40
40
  end
41
41
 
42
42
  # Clear the whole stash or the value of a key
@@ -58,23 +58,21 @@ module DiskStash
58
58
  end
59
59
 
60
60
  # Retrieves the value for a given key, if nothing is set,
61
- # returns KeyError
61
+ # returns nil
62
62
  #
63
63
  # @param key [Symbol, String] representing the key
64
64
  #
65
- # @raise [KeyError] if no such key found
66
- #
67
65
  # @return [Hash, Array, String] value for key
68
66
  #
69
67
  def [](key)
70
68
  if key.is_a? Array
71
69
  hash = {}
72
70
  key.each do |k|
73
- hash[k] = Marshal::load(read_cache_file(k))
71
+ hash[k] = Marshal::load(_read_cache_file(k))
74
72
  end
75
73
  hash unless hash.empty?
76
74
  else
77
- Marshal::load(read_cache_file(key))
75
+ Marshal::load(_read_cache_file(key))
78
76
  end
79
77
  rescue Errno::ENOENT
80
78
  nil # key hasn't been created
@@ -83,7 +81,7 @@ module DiskStash
83
81
  # Store the given value with the given key, either an an argument
84
82
  # or block. If a previous value was set it will be overwritten
85
83
  # with the new value.
86
- # #
84
+ #
87
85
  # @param key [Symbol, String] representing the key
88
86
  # @param value [Object] that represents the value (optional)
89
87
  # @param block [&block] that returns the value to set (optional)
@@ -91,7 +89,7 @@ module DiskStash
91
89
  # @return nothing.
92
90
  #
93
91
  def []=(key, value)
94
- write_cache_file(key, Marshal::dump(value))
92
+ _write_cache_file(key, Marshal::dump(value))
95
93
  end
96
94
 
97
95
  # returns path to cache file with 'key'
@@ -123,7 +121,7 @@ module DiskStash
123
121
  path.gsub!(::File::SEPARATOR, (::File::ALT_SEPARATOR || '\\'))
124
122
  end
125
123
 
126
- def write_cache_file(key, content)
124
+ def _write_cache_file(key, content)
127
125
  f = ::File.open(cache_file(key), 'w+' )
128
126
  f.flock(::File::LOCK_EX)
129
127
  f.write(content)
@@ -131,7 +129,7 @@ module DiskStash
131
129
  content
132
130
  end
133
131
 
134
- def read_cache_file(key)
132
+ def _read_cache_file(key)
135
133
  f = ::File.open(cache_file(key), 'r')
136
134
  f.flock(::File::LOCK_SH)
137
135
  out = f.read
@@ -144,7 +142,7 @@ module DiskStash
144
142
  ::File.mtime(cache_file(key))
145
143
  end
146
144
 
147
- def ensure_store_directory
145
+ def _ensure_store_directory
148
146
  ::Dir.mkdir(store) unless ::File.directory?(store)
149
147
  end
150
148
  end
@@ -18,5 +18,5 @@
18
18
  #
19
19
 
20
20
  module Hoodie
21
- VERSION = "0.1.2"
21
+ VERSION = '0.1.3'
22
22
  end
data/lib/hoodie.rb CHANGED
@@ -19,13 +19,11 @@
19
19
 
20
20
  require 'hoodie/stash/mem_store'
21
21
  require 'hoodie/stash/disk_store'
22
- require 'hoodie/path_finder'
23
22
  require 'hoodie/memoizable'
24
23
  require 'hoodie/obfuscate'
25
24
  require 'hoodie/version'
26
25
  require 'hoodie/utils'
27
26
  require 'hoodie/stash'
28
27
  require 'hoodie/blank'
29
- require 'hoodie/file'
30
28
  require 'hoodie/hash'
31
29
  require 'hoodie/os'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hoodie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefano Harding
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-14 00:00:00.000000000 Z
11
+ date: 2014-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anemone
@@ -122,12 +122,11 @@ files:
122
122
  - hoodie.gemspec
123
123
  - lib/hoodie.rb
124
124
  - lib/hoodie/blank.rb
125
- - lib/hoodie/file.rb
126
125
  - lib/hoodie/hash.rb
127
126
  - lib/hoodie/memoizable.rb
128
127
  - lib/hoodie/obfuscate.rb
129
128
  - lib/hoodie/os.rb
130
- - lib/hoodie/path_finder.rb
129
+ - lib/hoodie/rash.rb
131
130
  - lib/hoodie/stash.rb
132
131
  - lib/hoodie/stash/disk_store.rb
133
132
  - lib/hoodie/stash/mem_store.rb
data/lib/hoodie/file.rb DELETED
@@ -1,69 +0,0 @@
1
- # encoding: UTF-8
2
- #
3
- # Author: Stefano Harding <riddopic@gmail.com>
4
- #
5
- # Copyright (C) 2014 Stefano Harding
6
- #
7
- # Licensed under the Apache License, Version 2.0 (the "License");
8
- # you may not use this file except in compliance with the License.
9
- # You may obtain a copy of the License at
10
- #
11
- # http://www.apache.org/licenses/LICENSE-2.0
12
- #
13
- # Unless required by applicable law or agreed to in writing, software
14
- # distributed under the License is distributed on an "AS IS" BASIS,
15
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- # See the License for the specific language governing permissions and
17
- # limitations under the License.
18
- #
19
-
20
- require 'fileutils'
21
-
22
- class ::File
23
- def self.atomic_write(file_name, temp_dir = ::Dir.tmpdir)
24
- require 'tempfile' unless defined?(Tempfile)
25
- require 'fileutils' unless defined?(FileUtils)
26
-
27
- temp_file = Tempfile.new(basename(file_name), temp_dir)
28
- temp_file.binmode
29
- yield temp_file
30
- temp_file.close
31
-
32
- if ::File.exist?(file_name)
33
- # Get original file permissions
34
- old_stat = stat(file_name)
35
- else
36
- # If not possible, probe which are the default permissions in the
37
- # destination directory.
38
- old_stat = probe_stat_in(dirname(file_name))
39
- end
40
-
41
- # Overwrite original file with temp file
42
- FileUtils.mv(temp_file.path, file_name)
43
-
44
- # Set correct permissions on new file
45
- begin
46
- chown(old_stat.uid, old_stat.gid, file_name)
47
- # This operation will affect filesystem ACL's
48
- chmod(old_stat.mode, file_name)
49
- rescue Errno::EPERM
50
- # Changing file ownership failed, moving on.
51
- end
52
- end
53
-
54
- # Private utility method.
55
- def self.probe_stat_in(dir) #:nodoc:
56
- basename = [
57
- '.permissions_check',
58
- Thread.current.object_id,
59
- Process.pid,
60
- rand(1000000)
61
- ].join('.')
62
-
63
- file_name = join(dir, basename)
64
- FileUtils.touch(file_name)
65
- stat(file_name)
66
- ensure
67
- FileUtils.rm_f(file_name) if file_name
68
- end
69
- end