rbcm 0.0.6 → 0.0.7

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
  SHA256:
3
- metadata.gz: 64d207b634e0ea0dea136b1a4820fa19e33254699e896bc3eebf8a61a4eb1a04
4
- data.tar.gz: 36436444ed968488cba4243f18a163b4573453794b1278ff0253b460cb2247ba
3
+ metadata.gz: a1a68a0e5a325249bc9310561d60a14f4ddd52e741132331efc2f439fdc69975
4
+ data.tar.gz: d607019aa164ff558f7e61ca5d57689ec28c60b0a4f08ae6219a0b090938fb22
5
5
  SHA512:
6
- metadata.gz: b470619274cb34f5137ea472ba16f07c2e920cd4795b8ef38a5b9353a20343dd7c71892f38a21f7b0ac3e3f930bcc7836cce9652a765e22c8140775434826c26
7
- data.tar.gz: 5e7d084273719ba5b2a25fdc54e295628f8890aab503f200dd00c81793768a17c04ac0976818838ba5bb294a37290bf77c15cf3ae5a840e7bc1043b6fbcddb00
6
+ metadata.gz: cc259820fea552552fb195d63b1af2159a1a31f31897589da79ad246faa161834b671b38962cf44b762564ca458068dc7cf9557eddbd12e4fdb54b745ac91709
7
+ data.tar.gz: ef8b76d2063c9ec15df6b1a295c57c2323972e5c5eb0f64539dbc9a0981e0ed62b68221ea73f0b6944419b15fd07d12a4e384dc9bc6ff967c9a2c7e6ae3db2fe
@@ -0,0 +1,83 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # The encrypt_data and decrypt_data methods are Copyright (c) 2007 Brent Sowers
4
+ # and have been included with prior permission.
5
+ #
6
+ # Copyright (c) 2012 Gurpartap Singh
7
+ #
8
+ # MIT License
9
+ #
10
+ # Permission is hereby granted, free of charge, to any person obtaining
11
+ # a copy of this software and associated documentation files (the
12
+ # "Software"), to deal in the Software without restriction, including
13
+ # without limitation the rights to use, copy, modify, merge, publish,
14
+ # distribute, sublicense, and/or sell copies of the Software, and to
15
+ # permit persons to whom the Software is furnished to do so, subject to
16
+ # the following conditions:
17
+ #
18
+ # The above copyright notice and this permission notice shall be
19
+ # included in all copies or substantial portions of the Software.
20
+ #
21
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
22
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
24
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
25
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
26
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
27
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
+
29
+ require 'openssl'
30
+ require 'base64'
31
+
32
+ module AESCrypt
33
+ def self.encrypt(message, password)
34
+ Base64.encode64(self.encrypt_data(message.to_s.strip, self.key_digest(password), nil, "AES-256-CBC")).chomp
35
+ end
36
+
37
+ def self.decrypt(message, password)
38
+ base64_decoded = Base64.decode64(message.to_s.strip)
39
+ self.decrypt_data(base64_decoded, self.key_digest(password), nil, "AES-256-CBC")
40
+ end
41
+
42
+ def self.key_digest(password)
43
+ OpenSSL::Digest::SHA256.new(password).digest
44
+ end
45
+
46
+ # Decrypts a block of data (encrypted_data) given an encryption key
47
+ # and an initialization vector (iv). Keys, iv's, and the data
48
+ # returned are all binary strings. Cipher_type should be
49
+ # "AES-256-CBC", "AES-256-ECB", or any of the cipher types
50
+ # supported by OpenSSL. Pass nil for the iv if the encryption type
51
+ # doesn't use iv's (like ECB).
52
+ #:return: => String
53
+ #:arg: encrypted_data => String
54
+ #:arg: key => String
55
+ #:arg: iv => String
56
+ #:arg: cipher_type => String
57
+ def self.decrypt_data(encrypted_data, key, iv, cipher_type)
58
+ aes = OpenSSL::Cipher.new(cipher_type)
59
+ aes.decrypt
60
+ aes.key = key
61
+ aes.iv = iv if iv != nil
62
+ aes.update(encrypted_data) + aes.final
63
+ end
64
+
65
+ # Encrypts a block of data given an encryption key and an
66
+ # initialization vector (iv). Keys, iv's, and the data returned
67
+ # are all binary strings. Cipher_type should be "AES-256-CBC",
68
+ # "AES-256-ECB", or any of the cipher types supported by OpenSSL.
69
+ # Pass nil for the iv if the encryption type doesn't use iv's (like
70
+ # ECB).
71
+ #:return: => String
72
+ #:arg: data => String
73
+ #:arg: key => String
74
+ #:arg: iv => String
75
+ #:arg: cipher_type => String
76
+ def self.encrypt_data(data, key, iv, cipher_type)
77
+ aes = OpenSSL::Cipher.new(cipher_type)
78
+ aes.encrypt
79
+ aes.key = key
80
+ aes.iv = iv if iv != nil
81
+ aes.update(data) + aes.final
82
+ end
83
+ end
data/app/lib/lib.rb CHANGED
@@ -28,7 +28,7 @@ class Array
28
28
  end
29
29
  end
30
30
 
31
- class Fixnum
31
+ class Integer
32
32
  # backport
33
33
  unless defined? digits
34
34
  def digits
data/app/node/file.rb CHANGED
@@ -1,4 +1,4 @@
1
- class Node::File
1
+ class Node::NodeFile
2
2
  def initialize path:, filesystem:
3
3
  @path = path
4
4
  @filesystem = filesystem
@@ -1,4 +1,4 @@
1
- class Node::Filesystem
1
+ class Node::NodeFilesystem
2
2
  def initialize node, overlays: false
3
3
  @node = node
4
4
  @underlying = overlays
@@ -11,7 +11,7 @@ class Node::Filesystem
11
11
  if @underlying
12
12
  @files[path] || @underlying[path]
13
13
  else
14
- @files[path] ||= Node::File.new path: path, filesystem: self
14
+ @files[path] ||= Node::NodeFile.new path: path, filesystem: self
15
15
  end
16
16
  end
17
17
  end
data/app/node/node.rb CHANGED
@@ -8,7 +8,7 @@ class Node
8
8
  @definitions = []
9
9
  @sandbox = Node::Sandbox.new self
10
10
  @remote = Node::Remote.new self
11
- @files = Node::Filesystem.new self, overlays: @remote.files
11
+ @files = Node::NodeFilesystem.new self, overlays: @remote.files
12
12
  @actions = ActionList.new
13
13
  @memberships = []
14
14
  @jobs = []
data/app/node/remote.rb CHANGED
@@ -3,7 +3,7 @@ class Node::Remote
3
3
 
4
4
  def initialize node
5
5
  @host = node.name
6
- @files = Node::Filesystem.new node
6
+ @files = Node::NodeFilesystem.new node
7
7
  end
8
8
 
9
9
  def execute action
data/app/node/sandbox.rb CHANGED
@@ -113,6 +113,10 @@ class Node::Sandbox
113
113
  )
114
114
  end
115
115
 
116
+ def decrypt secret
117
+ AESCrypt.decrypt secret, File.read(File.expand_path("~/.rbcm.secret")).chomp
118
+ end
119
+
116
120
  # handle getter method calls
117
121
  def method_missing name, *named, **ordered, &block
118
122
  #log "method #{name} missing on #{@name}"
@@ -171,7 +175,7 @@ class Node::Sandbox
171
175
  @cache[:trigger] << trigger if trigger
172
176
  @cache[:triggered_by] << triggered_by if triggered_by
173
177
  @cache[:check] << check if check
174
- yield if block_given?
178
+ r = yield if block_given?
175
179
  @cache[:source].pop if chain
176
180
  @cache[:chain].pop if chain
177
181
  @cache[:tag].pop if tag
@@ -179,6 +183,7 @@ class Node::Sandbox
179
183
  @cache[:triggered_by].pop if triggered_by
180
184
  @cache[:check].pop if check
181
185
  @cache[reset] = [] if reset
186
+ r
182
187
  end
183
188
 
184
189
  def __add_capability capability
@@ -191,19 +196,21 @@ class Node::Sandbox
191
196
  params = Params.new ordered, named
192
197
  @node.jobs.append Node::Job.new @node, capability.name, params
193
198
  @node.triggered.append capability.name
194
- __cache trigger: params[:trigger],
199
+ r = __cache trigger: params[:trigger],
195
200
  triggered_by: params[:triggered_by],
196
201
  chain: capability.name do
197
202
  send "__#{__method__}", *params.delete(:trigger, :triggered_by).sendable
198
203
  end
199
204
  @dependency_cache = [:file]
205
+ r
200
206
  end
201
207
  else # capability.type == :final
202
208
  define_singleton_method capability.name do
203
- __cache chain: __method__ do
209
+ r = __cache chain: __method__ do
204
210
  send "__#{__method__}"
205
211
  end
206
212
  @dependency_cache = [:file]
213
+ r
207
214
  end
208
215
  end
209
216
  end
data/app/project/file.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # extracts capabilities and definitions from project files
2
2
 
3
- class Project::File
3
+ class Project::ProjectFile
4
4
  def initialize project_file_path
5
5
  @path = project_file_path
6
6
  @definitions = []
@@ -1,9 +1,13 @@
1
1
  class Project
2
2
  def initialize path
3
3
  @path = path
4
- @files = Dir["#{path}/**/*.rb"].collect{ |project_file_path|
5
- Project::File.new project_file_path
6
- }
4
+ if File.directory? path
5
+ @files = Dir["#{path}/**/*.rb"].collect{ |project_file_path|
6
+ Project::ProjectFile.new project_file_path
7
+ }
8
+ else
9
+ @files = [Project::ProjectFile.new(path)]
10
+ end
7
11
  end
8
12
 
9
13
  attr_reader :path, :files
data/app/rbcm.rb CHANGED
@@ -12,7 +12,7 @@ APPDIR = File.expand_path File.dirname(__FILE__)
12
12
  "node/template",
13
13
  "lib/lib", "lib/array_hash",
14
14
  "lib/options", "lib/quick_each",
15
- "lib/params",
15
+ "lib/params", "lib/aescrypt",
16
16
  "project/project", "project/definition",
17
17
  "project/file", "project/capability",
18
18
  "project/sandbox",
@@ -67,4 +67,19 @@ class RBCM
67
67
  node.capabilities.each{|capability| node.sandbox.send "#{capability}!"}
68
68
  end
69
69
  end
70
+
71
+ def check! &block
72
+ Net::SSH::Multi.start do |session|
73
+ session.via 'gateway', 'gateway-user'
74
+ @nodes.each do |name, node|
75
+ session.group name.to_sym do
76
+ session.use "root@#{name}"
77
+ end
78
+ end
79
+ actions.checkable.each do |action|
80
+ session.with(action.node.name.to_sym).exec action.check &block
81
+ end
82
+ session.loop
83
+ end
84
+ end
70
85
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbcm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Martin Wiegand
@@ -64,6 +64,7 @@ files:
64
64
  - app/action/file.rb
65
65
  - app/action/list.rb
66
66
  - app/cli.rb
67
+ - app/lib/aescrypt.rb
67
68
  - app/lib/array_hash.rb
68
69
  - app/lib/lib.rb
69
70
  - app/lib/options.rb