lorj 1.0.14 → 1.0.16

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87a576b3dc28cb49cdd93e91746117af62bc1be4
4
- data.tar.gz: cba9b715107fdb921c4f5f7f5d3400f6f32ead93
3
+ metadata.gz: df0501318f36deb3f6d31fdce4d63f148d91a818
4
+ data.tar.gz: 6800e36135d9decb469b1d9dc87e1f3be7385980
5
5
  SHA512:
6
- metadata.gz: f0c80f5d67e1239406e106e9f3748258f75e6856e098352154f86b93a5bda9d1a09d01b97c249b9ebdc57e00474d9748cb5bb964300901936c4908c39b0085c4
7
- data.tar.gz: d0b3371678052bcfc7febbcd7c2052e7815a1d72f37ae445cf1b42f11ea80434fc0fdd54a0c2629bc68ec305415a3a9fb4b607d9ac5ae89cfc0eb06d5d89319f
6
+ metadata.gz: b14d5a49cfe34e91495e412e1c64041ecad1c38927dda2c555e4b57d2589182863a1bbe6e49492639638d6ecdc8121895f667878d77f91ca5ef32a944b20f87b
7
+ data.tar.gz: 61d2970cecf4ba70bb01135ecfcc6813bf43ff89c708aa0e29c716975881562cca13b611d533414f263a9d289ddaada7bea8a6fdb83ea43d1abd0ea4b60b6592
@@ -39,7 +39,6 @@ class Test < Lorj::BaseDefinition
39
39
 
40
40
  # Internal function to test.
41
41
  def_internal '_get_encrypt_key'
42
- def_internal '_get_encrypted_value'
43
42
 
44
43
  def run
45
44
  puts 'Checking imported account...'
@@ -53,7 +52,8 @@ class Test < Lorj::BaseDefinition
53
52
  entr = _get_encrypt_key
54
53
  data = @core.config['credentials#account_key']
55
54
 
56
- res = _get_encrypted_value(data, entr, 'credentials#account_key')
55
+ res = Lorj::SSLCrypt.get_encrypted_value(data, entr,
56
+ 'credentials#account_key')
57
57
 
58
58
  test_state(!res.nil?, 'Account key', data)
59
59
  end
@@ -69,20 +69,15 @@ class Test < Lorj::BaseDefinition
69
69
  end
70
70
 
71
71
  # TODO: Implement Thor instead of ARGV use.
72
+ # TODO: Support to load local process.
72
73
  if ARGV.length <= 3
73
74
  puts "Syntax is 'ruby #{__FILE__}' <LorjRef> <key> <CloudDataFile> "\
74
- "[<AccountName[@provider]>]\n"\
75
+ "[<AccountName>]\n"\
75
76
  "where:\n"\
76
77
  "LorjRef : Lorj application struture to use. \n"\
77
- ' Format: <datapath[|<pdatapath>]>='\
78
- "<process>[@<libToLoad]\n"\
78
+ " Format: <datapath[|<pdatapath>]>\n"\
79
79
  " datapath : Path where Lorj store data.\n"\
80
80
  " pdatapath : Path where Lorj store private data.\n"\
81
- " process : Lorj process name to load. It can be a path to a\n"\
82
- " process file.\n"\
83
- " libToLoad : Optional. Ruby library containing The Lorj process.\n"\
84
- " If missing, it will try to load a lib named \n"\
85
- " lorj_<process>\n"\
86
81
  'key : Base64 encoded key. Used to decrypt the <CloudDataFi'\
87
82
  "le>\n"\
88
83
  "CloudDataFile : File containing the Lorj cloud data to import.\n"\
@@ -94,7 +89,7 @@ end
94
89
 
95
90
  ref, key_encoded, data_file, account = ARGV
96
91
 
97
- ref_found = ref.match(/^(.*(\|(.*))?)=(.*?)(@(.*))?$/)
92
+ ref_found = ref.match(/^(.*(\|(.*))?)$/)
98
93
 
99
94
  unless ref_found
100
95
  puts 'LorjRef must be formatted as : <datapath[|<pdatapath>]>='\
@@ -105,13 +100,6 @@ end
105
100
  datapath = ref_found[1]
106
101
  pdatapath = datapath
107
102
  pdatapath = ref_found[3] unless ref_found[3].nil?
108
- process = ref_found[4]
109
-
110
- if ref_found[6].nil?
111
- lib_name = "lorj_#{process}"
112
- else
113
- lib_name = ref_found[6]
114
- end
115
103
 
116
104
  unless File.exist?(data_file)
117
105
  puts "#{data_file} doesn't exist. Please check and retry."
@@ -123,12 +111,6 @@ if key_encoded == ''
123
111
  exit 1
124
112
  end
125
113
 
126
- begin
127
- require lib_name
128
- rescue => e
129
- puts "Warning! Unable to load RubyGem '#{lib_name}'.\n#{e}"
130
- end
131
-
132
114
  if key_encoded.length % 4 > 0
133
115
  key_encoded += '=' * (4 - (key_encoded.length % 4))
134
116
  end
@@ -154,20 +136,12 @@ else
154
136
  end
155
137
  end
156
138
 
157
- name, controller = account.split('@') unless account.nil?
158
-
159
139
  PrcLib.data_path = datapath
160
140
  PrcLib.pdata_path = pdatapath
161
141
 
162
- keypath = Lorj::KeyPath.new(process)
163
-
164
- processes = [{ :process_module => keypath.key_tree }]
165
-
166
- core = Lorj::Core.new(Lorj::Account.new, processes)
167
-
168
142
  data = File.read(data_file).strip
169
143
 
170
- core.account_import(entr, data, name, controller)
144
+ core = Lorj.account_import(entr, data, account)
171
145
 
172
146
  puts 'Import done.'
173
147
 
data/lib/core/core.rb CHANGED
@@ -15,8 +15,6 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- # rubocop: disable Metrics/AbcSize
19
-
20
18
  # Module Lorj which contains several classes.
21
19
  #
22
20
  # Those classes describes :
@@ -317,17 +315,21 @@ module Lorj
317
315
 
318
316
  # Function to import an encrypted Hash as a Lorj Account.
319
317
  #
320
- # For details about this functions, see #Lorj::BaseDefinition.account_import
318
+ # For details about this functions,
319
+ # see #Lorj::BaseDefinition.account_data_import
320
+ #
321
+ # To import an exported data, consider calling Lorj.account_import.
321
322
  #
322
323
  # * *Args* :
323
- # - +key+ : key to use to decrypt the 'enc_hash'.
324
- # - +enc_hash+ : Encrypted Hash.
324
+ # - +data+ : Hash. data to import.
325
+ # - +name+ : By default, it import in the same name described in the data.
326
+ # But we can change it with this parameter.
325
327
  #
326
328
  # * *Raises* :
327
329
  # No exceptions
328
- def account_import(key, enc_hash, name = nil, controller = nil)
330
+ def account_import(data, name = nil)
329
331
  return nil if @core_object.nil?
330
- @core_object.account_import(key, enc_hash, name, controller)
332
+ @core_object.account_data_import(data, name)
331
333
  end
332
334
 
333
335
  # Function to export a Lorj Account in an encrypted Hash.
@@ -402,6 +404,7 @@ module Lorj
402
404
  # (processes & controller)
403
405
  initialize_core_object(model)
404
406
  PrcLib.model.clear_heap
407
+ PrcLib.processes model[:processes]
405
408
  end
406
409
 
407
410
  private
@@ -470,20 +473,40 @@ module Lorj
470
473
  # It must be controllers/<controller_name>/<controller_name>.rb
471
474
  # You can change 'controllers' by any name, with :controllers_dir
472
475
  #
473
- # - +properties : Optional.
476
+ # - +properties : required.
474
477
  # - :controllers_dir : Name of the controllers directory.
475
478
  # By default 'controllers'
479
+ # - :lib_name : name of the gem library declaring the process.
476
480
  #
477
481
  # The process will be added in Lorj.processes Hash
478
482
  #
479
483
  def declare_process(process_name, path, properties = {})
484
+ unless properties.is_a?(Hash) && properties[:lib_name].is_a?(String)
485
+ puts("Lorj: process module error: '#{__method__}"\
486
+ "('#{process_name}', '#{path}', #{properties})' requires :lib_name"\
487
+ "\nat line #{caller[0]}")
488
+ return nil
489
+ end
480
490
  process_data = Lorj::ProcessResource.new(process_name, path, properties)
481
491
 
482
- return nil if process_data.nil?
492
+ if process_data.nil?
493
+ puts("Lorj: process module error: '#{process_name}' fails to be "\
494
+ "declared:\n"\
495
+ "process_name: '#{process_name}'\n"\
496
+ "path : '#{path}'\n"\
497
+ "properties : #{properties.to_yaml}")
498
+ return nil
499
+ end
483
500
 
484
501
  @processes = {} if @processes.nil?
485
502
 
486
- return nil if process_data.process.nil?
503
+ if process_data.process.nil?
504
+ puts("Lorj: process module error: process failure:\n"\
505
+ "process_name: '#{process_name}'\n"\
506
+ "path : '#{path}'\n"\
507
+ "properties : #{properties.to_yaml}")
508
+ return nil
509
+ end
487
510
 
488
511
  process_name = process_data.name
489
512
 
@@ -492,8 +515,8 @@ module Lorj
492
515
  process_data
493
516
  end
494
517
 
495
- # Define module data for lorj library configuration
496
- class << self
497
- attr_reader :processes
518
+ def processes
519
+ @processes = {} if @processes.nil?
520
+ @processes
498
521
  end
499
522
  end
@@ -17,14 +17,57 @@
17
17
 
18
18
  #
19
19
  module Lorj
20
+ # Function to import an encrypted Hash as a Lorj Account.
21
+ #
22
+ # The encrypted Hash will be decrypted by the key provided.
23
+ # The content of the hash will be stored in the 'account' layer
24
+ # of config.
25
+ #
26
+ # For details on how import work, look in #account_data_import
27
+ #
28
+ # * *Args* :
29
+ # - +key+ : key to use to decrypt the 'enc_hash'.
30
+ # - +import_data+ : import data. This data is structured as follow:
31
+ # - :enc_data : The encrypted account data.
32
+ # - :processes: Array or models + controllers to load.
33
+ # - +name+ : Optional. Name of the account.
34
+ #
35
+ # * *returns*:
36
+ # - +core+ : Core object, with loaded model, created during the import.
37
+ #
38
+ # * *Raises* :
39
+ # No exceptions
40
+ def self.account_import(key, import_data, name = nil)
41
+ import_data = YAML.load(import_data)
42
+ hash = Lorj::SSLCrypt.get_encrypted_value(import_data[:enc_data], key,
43
+ 'Encrypted account data')
44
+
45
+ data = YAML.load(hash)
46
+
47
+ processes = import_data[:processes]
48
+
49
+ processes.each do |p|
50
+ next unless p.key?(:process_module)
51
+
52
+ PrcLib.debug("Loading module '#{p[:process_module]}' from GEM lib '%s'",
53
+ p[:lib_name])
54
+ begin
55
+ require "#{p[:lib_name]}"
56
+ rescue => e
57
+ PrcLib.error("Unable to load module '#{p[:process_module]}'\n%s", e)
58
+ end
59
+ end
60
+
61
+ core = Lorj::Core.new(Lorj::Account.new, processes)
62
+ core.account_import(data, name)
63
+
64
+ core
65
+ end
66
+
20
67
  # Implements account_import and account_export
21
68
  # exposed by core.
22
69
  class BaseDefinition
23
- # Function to import an encrypted Hash as a Lorj Account.
24
- #
25
- # The encrypted Hash will be decrypted by the key provided.
26
- # The content of the hash will be stored in the 'account' layer
27
- # of config.
70
+ # Function to import an account data in Lorj::Account.
28
71
  #
29
72
  # The 'account' layer is not cleaned before. If you need to
30
73
  # clean it up, do:
@@ -39,7 +82,7 @@ module Lorj
39
82
  # If you pass 'name' and 'controller', ac_update will be used to update the
40
83
  # account data
41
84
  # If the imported data contains name and controller data, by default, it
42
- # will call ac_update except if name is an empty string.
85
+ # will call ac_update.
43
86
  #
44
87
  # The location used comes from PrcLib.data_path
45
88
  # Passwords will be encrypted by the internal .key file stored in
@@ -49,19 +92,13 @@ module Lorj
49
92
  # verify if some data are missed for any object action (create/delete/...)
50
93
  #
51
94
  # * *Args* :
52
- # - +key+ : key to use to decrypt the 'enc_hash'.
53
- # - +enc_hash+ : Encrypted Hash.
95
+ # - +data+ : Account data to import.
54
96
  # - +name+ : Optional. Name of the account.
55
- # - +controller+ : Optional. Name of the controller.
56
97
  #
57
98
  # * *Raises* :
58
99
  # No exceptions
59
- def account_import(key, enc_hash, name = nil, controller = nil)
60
- hash = _get_encrypted_value(enc_hash, key, 'Encrypted account data')
61
-
62
- data = YAML.load(hash)
63
-
64
- _update_account_meta(data, name, controller)
100
+ def account_data_import(data, name = nil)
101
+ _update_account_meta(data, name)
65
102
 
66
103
  entr = _get_encrypt_key
67
104
 
@@ -70,7 +107,7 @@ module Lorj
70
107
  key = "#{s}##{k}"
71
108
  data_def = Lorj.data.auto_section_data(key)
72
109
  if data_def && data_def[:encrypted].is_a?(TrueClass)
73
- v = _encrypt_value(v, entr)
110
+ v = Lorj::SSLCrypt.encrypt_value(v, entr)
74
111
  end
75
112
  config.set(key, v, :name => 'account')
76
113
  end
@@ -127,26 +164,42 @@ module Lorj
127
164
  rhash_tree = Lorj.data.first_section(k)
128
165
  rhash_tree = v[:keys] if v.key?(:keys)
129
166
  if !data_def.nil? && data_def[:encrypted].is_a?(TrueClass)
130
- data = _get_encrypted_value(data, entr, data_def[:desc])
167
+ data = Lorj::SSLCrypt.get_encrypted_value(data, entr, data_def[:desc])
131
168
  end
132
169
  rhash.rh_set(data, *rhash_tree)
133
170
  end
134
171
 
135
- entr = _new_encrypt_key
136
- [entr, _encrypt_value(rhash.to_yaml, entr)]
172
+ entr = Lorj::SSLCrypt.new_encrypt_key
173
+ export_data = { :enc_data => Lorj::SSLCrypt.encrypt_value(rhash.to_yaml,
174
+ entr) }
175
+ export_data[:processes] = _export_processes
176
+ [entr, export_data.to_yaml]
137
177
  end
138
178
 
139
179
  private
140
180
 
141
- def _update_account_meta(data, name, controller)
181
+ def _export_processes
182
+ export_data = []
183
+ PrcLib.processes.each do |p|
184
+ next unless p.key?(:process_name) && p.key?(:lib_name)
185
+
186
+ process = {}
187
+ process[:process_module] = p[:process_name]
188
+ process[:lib_name] = p[:lib_name]
189
+ process[:controller] = p[:controller_name] if p.key?(:controller_name)
190
+ export_data << process if process.length > 0
191
+ end
192
+ export_data
193
+ end
194
+
195
+ def _update_account_meta(data, name)
142
196
  if name.nil? && data.rh_exist?(:account, :name)
143
197
  name = data.rh_get(:account, :name)
144
198
  end
145
- if controller.nil? && data.rh_exist?(:account, :provider)
146
- controller = data.rh_get(:account, :provider)
147
- end
199
+ controller = data.rh_get(:account, :provider)
148
200
 
149
201
  name = nil if name == ''
202
+ controller = nil if controller == ''
150
203
 
151
204
  config.ac_update(name, controller) unless name.nil? || controller.nil?
152
205
  end
@@ -14,8 +14,6 @@
14
14
  # See the License for the specific language governing permissions and
15
15
  # limitations under the License.
16
16
 
17
- # rubocop: disable Metrics/AbcSize
18
-
19
17
  # - Lorj::Core : Lorj exposed interface.
20
18
  # - Initialization functions
21
19
  module Lorj
@@ -331,6 +329,7 @@ module Lorj
331
329
  module_process = Lorj.processes[name]
332
330
  my_process[:process_name] = name
333
331
  my_process[:process_path] = module_process.process
332
+ my_process[:lib_name] = module_process.lib_name
334
333
 
335
334
  if a_process[:controller_path]
336
335
  my_process[:controller_path] = a_process[:controller_path]
@@ -391,15 +390,20 @@ module Lorj
391
390
  def _process_module_set_ctr(my_process, controllers, controller_name)
392
391
  return if controller_name.nil?
393
392
 
393
+ unless controller_name.is_a?(String)
394
+ controller_name = controller_name.to_s
395
+ end
394
396
  controller_path = controllers[controller_name]
395
397
 
396
398
  if controller_path.nil?
397
399
  PrcLib.warning("Controller '%s' was not found. Please check. The "\
398
- 'process may not work.', controller_name)
400
+ "process may not work. \nValid one are '%s'",
401
+ controller_name, controllers.keys)
399
402
  return
400
403
  end
401
404
 
402
405
  my_process[:controller_path] = controller_path
406
+ my_process[:controller_name] = controller_name
403
407
  end
404
408
 
405
409
  # Function analyzing the process class parameter
@@ -474,6 +478,11 @@ module Lorj
474
478
 
475
479
  the_process_class
476
480
  end
481
+ end
482
+
483
+ # Define private Initialize functions for controllers
484
+ class Core
485
+ private
477
486
 
478
487
  # Determine the process file path from the single name.
479
488
  # Uses PrcLib.process_path as path to load this process.
@@ -112,7 +112,8 @@ module Lorj
112
112
  end
113
113
 
114
114
  if param_options[:decrypt].is_a?(TrueClass)
115
- value = _get_encrypted_value(value, _get_encrypt_key, attr_name)
115
+ value = Lorj::SSLCrypt.get_encrypted_value(value, _get_encrypt_key,
116
+ attr_name)
116
117
  end
117
118
 
118
119
  return unless param_options[:mapping]
@@ -26,10 +26,8 @@ require 'base64'
26
26
  # and setup
27
27
  # this task to make it to work.
28
28
  module Lorj
29
- # Adding encrypt core functions.
30
- class BaseDefinition
31
- private
32
-
29
+ # SSL Encryption feature for Lorj.
30
+ module SSLCrypt
33
31
  # internal runtime function to create a new key
34
32
  # *parameters*:
35
33
  # - +new+ : true to create a new key.
@@ -40,7 +38,7 @@ module Lorj
40
38
  # - :key: password
41
39
  # - :salt : String current time number
42
40
  # - :iv: Base64 random iv
43
- def _new_encrypt_key(key = rand(36**10).to_s(36))
41
+ def self.new_encrypt_key(key = rand(36**10).to_s(36))
44
42
  random_iv = OpenSSL::Cipher::Cipher.new('aes-256-cbc').random_iv
45
43
  {
46
44
  :key => key,
@@ -49,6 +47,57 @@ module Lorj
49
47
  }
50
48
  end
51
49
 
50
+ # internal runtime function for process call #_build_hdata and
51
+ # #_get_encrypted_value_hidden
52
+ # Get encrypted value
53
+ #
54
+ # *parameters*:
55
+ # - +default+ : encrypted default value
56
+ # - +entropy+ : Entropy Hash
57
+ # - +sDesc+ : data description
58
+ #
59
+ # *return*:
60
+ # - value : decrypted value.
61
+ #
62
+ # *raise*:
63
+ #
64
+ def self.get_encrypted_value(enc_value, entr, sDesc)
65
+ return '' if enc_value.nil?
66
+ begin
67
+ Encryptor.decrypt(
68
+ :value => Base64.strict_decode64(enc_value),
69
+ :key => entr[:key],
70
+ :iv => Base64.strict_decode64(entr[:iv]),
71
+ :salt => entr[:salt]
72
+ )
73
+ rescue => e
74
+ PrcLib.error("Unable to decrypt your %s.\n"\
75
+ "%s\n"\
76
+ ' You will need to re-enter it.',
77
+ sDesc, e)
78
+ end
79
+ end
80
+
81
+ # Function to encrypt a data with a entr key.
82
+ #
83
+ # *return*:
84
+ # - value : encrypted value in Base64 encoded data.
85
+ def self.encrypt_value(value, entr)
86
+ Base64.strict_encode64(
87
+ Encryptor.encrypt(
88
+ :value => value,
89
+ :key => entr[:key],
90
+ :iv => Base64.strict_decode64(entr[:iv]),
91
+ :salt => entr[:salt]
92
+ )
93
+ )
94
+ end
95
+ end
96
+
97
+ # Adding encrypt core functions.
98
+ class BaseDefinition
99
+ private
100
+
52
101
  # internal runtime function for process call
53
102
  # Get encrypted value hidden by *
54
103
  #
@@ -67,7 +116,7 @@ module Lorj
67
116
  key_file = File.join(PrcLib.pdata_path, '.key')
68
117
  if !File.exist?(key_file)
69
118
  # Need to create a random key.
70
- entr = _new_encrypt_key
119
+ entr = Lorj::SSLCrypt.new_encrypt_key
71
120
 
72
121
  Lorj.debug(2, "Writing '%s' key file", key_file)
73
122
  unless PrcLib.dir_exists?(PrcLib.pdata_path)
@@ -101,7 +150,8 @@ module Lorj
101
150
  return '' if enc_value.nil?
102
151
  value_hidden = ''
103
152
  begin
104
- value_hidden = '*' * _get_encrypted_value(enc_value, entr, sDesc).length
153
+ value_hidden = '*' * Lorj::SSLCrypt.get_encrypted_value(enc_value, entr,
154
+ sDesc).length
105
155
  rescue => e
106
156
  PrcLib.error('Unable to decrypt your %s. You will need to re-enter it.'\
107
157
  '\n%s', sDesc, e.message)
@@ -112,52 +162,6 @@ module Lorj
112
162
  value_hidden
113
163
  end
114
164
 
115
- # internal runtime function for process call #_build_hdata and
116
- # #_get_encrypted_value_hidden
117
- # Get encrypted value
118
- #
119
- # *parameters*:
120
- # - +default+ : encrypted default value
121
- # - +entropy+ : Entropy Hash
122
- # - +sDesc+ : data description
123
- #
124
- # *return*:
125
- # - value : decrypted value.
126
- #
127
- # *raise*:
128
- #
129
- def _get_encrypted_value(enc_value, entr, sDesc)
130
- return '' if enc_value.nil?
131
- begin
132
- Encryptor.decrypt(
133
- :value => Base64.strict_decode64(enc_value),
134
- :key => entr[:key],
135
- :iv => Base64.strict_decode64(entr[:iv]),
136
- :salt => entr[:salt]
137
- )
138
- rescue => e
139
- PrcLib.error("Unable to decrypt your %s.\n"\
140
- "%s\n"\
141
- ' You will need to re-enter it.',
142
- sDesc, e)
143
- end
144
- end
145
-
146
- # Function to encrypt a data with a entr key.
147
- #
148
- # *return*:
149
- # - value : encrypted value in Base64 encoded data.
150
- def _encrypt_value(value, entr)
151
- Base64.strict_encode64(
152
- Encryptor.encrypt(
153
- :value => value,
154
- :key => entr[:key],
155
- :iv => Base64.strict_decode64(entr[:iv]),
156
- :salt => entr[:salt]
157
- )
158
- )
159
- end
160
-
161
165
  # internal runtime function for process call
162
166
  # Ask encrypted function executed by _ask
163
167
  #
@@ -194,7 +198,7 @@ module Lorj
194
198
  PrcLib.message('%s cannot be empty.', sDesc) if value_free == ''
195
199
  end
196
200
  end
197
- _encrypt_value(value_free, entr)
201
+ Lorj::SSLCrypt.encrypt_value(value_free, entr)
198
202
  end
199
203
  end
200
204
  end
@@ -15,8 +15,6 @@
15
15
  # See the License for the specific language governing permissions and
16
16
  # limitations under the License.
17
17
 
18
- # rubocop: disable Metrics/AbcSize
19
-
20
18
  # Module Lorj which contains several classes.
21
19
  #
22
20
  # Those classes describes :
data/lib/core/process.rb CHANGED
@@ -22,7 +22,8 @@ module Lorj
22
22
  #
23
23
  #
24
24
  class ProcessResource
25
- attr_reader :defaults_file, :data_file, :process, :name, :controllers
25
+ attr_reader :defaults_file, :data_file, :process, :name, :controllers,
26
+ :lib_name
26
27
 
27
28
  # ProcessResource initialization
28
29
  #
@@ -49,6 +50,7 @@ module Lorj
49
50
  # By default is `<name>/defaults.yaml`
50
51
  # - :data_file : Use a different file as process data definition.
51
52
  # By default is `<name>/data.yaml`
53
+ # - :lib_name : Is the name of the library declaring the process.
52
54
  #
53
55
  # * *return*:
54
56
  # - self with at least a process name and a path to it.
@@ -82,6 +84,8 @@ module Lorj
82
84
  name, 'data.yaml'))
83
85
  @data_file = data_file if data_file
84
86
 
87
+ @lib_name = props[:lib_name] if props.key?(:lib_name)
88
+
85
89
  self
86
90
  end
87
91
 
data/lib/lorj/version.rb CHANGED
@@ -16,6 +16,6 @@
16
16
 
17
17
  # Lorj version
18
18
  module Lorj
19
- VERSION = '1.0.14'
20
- DATE = '2015-06-24'
19
+ VERSION = '1.0.16'
20
+ DATE = '2015-06-25'
21
21
  end
data/lib/lorj.rb CHANGED
@@ -82,7 +82,7 @@ module Lorj
82
82
  # Internally used with raise.
83
83
  # Used to identify the error origin, while an error is thrown.
84
84
  class PrcError < RuntimeError
85
- attr_reader :lorg_message
85
+ attr_reader :lorj_message
86
86
 
87
87
  def initialize(message = nil)
88
88
  @lorj_message = message
data/lib/prc.rb CHANGED
@@ -97,6 +97,10 @@ require 'logger'
97
97
  #
98
98
  # Model loaded.
99
99
  #
100
+ # - PrcLib.processes
101
+ #
102
+ # Processes loaded.
103
+ #
100
104
  # - PrcLib.log_file
101
105
  #
102
106
  # Initialize a log file name (relative or absolute path) instead of default
@@ -148,7 +152,10 @@ module PrcLib
148
152
  rescue => e
149
153
  fatal_error(1, e.message)
150
154
  end
155
+ end
151
156
 
157
+ # Defines module parameters.
158
+ module PrcLib
152
159
  # Define module data for lorj library configuration
153
160
  class << self
154
161
  attr_accessor :log, :core_level
@@ -226,7 +233,7 @@ module PrcLib
226
233
  end
227
234
  end
228
235
 
229
- # TODO: Low. Be able to support multiple model.
236
+ # TODO: Low. Be able to support multiple model loaded.
230
237
 
231
238
  # Lorj::Model object access.
232
239
  # If the object doesn't exist, it will be created
@@ -235,6 +242,14 @@ module PrcLib
235
242
  @model
236
243
  end
237
244
 
245
+ # TODO: Low. Be able to support multiple processes loaded.
246
+
247
+ # PrcLib.processes
248
+ def processes(p = nil)
249
+ @processes = p unless p.nil?
250
+ @processes
251
+ end
252
+
238
253
  # TODO: Support for several defaults, depending on controllers loaded.
239
254
 
240
255
  # Attribute app_defaults
@@ -129,7 +129,8 @@ describe 'Lorj::Process,' do
129
129
  end
130
130
 
131
131
  it 'can declare a module process' do
132
- expect(Lorj.declare_process('mock', @process_path)).to be
132
+ expect(Lorj.declare_process('mock', @process_path,
133
+ :lib_name => 'lorj')).to be
133
134
  end
134
135
 
135
136
  it 'kept module in Lorj.processes' do
@@ -138,14 +139,19 @@ describe 'Lorj::Process,' do
138
139
  end
139
140
 
140
141
  it 'Lorj.declare_process, can declare several module processes' do
141
- expect(Lorj.declare_process('mock', @process_path)).to be
142
- expect(Lorj.declare_process(:mock2, @process_path)).to be
143
- expect(Lorj.declare_process('mock3', @process_path)).to equal(nil)
142
+ expect(Lorj.declare_process('mock', @process_path,
143
+ :lib_name => 'lorj')).to be
144
+ expect(Lorj.declare_process(:mock2, @process_path,
145
+ :lib_name => 'lorj')).to be
146
+ expect(Lorj.declare_process('mock3', @process_path,
147
+ :lib_name => 'lorj')).to equal(nil)
144
148
  end
145
149
 
146
150
  it 'become empty, if name or process_path are incorrect' do
147
- expect(Lorj.declare_process(nil, @process_path)).to equal(nil)
148
- expect(Lorj.declare_process('mock', nil)).to equal(nil)
151
+ expect(Lorj.declare_process(nil, @process_path,
152
+ :lib_name => 'lorj')).to equal(nil)
153
+ expect(Lorj.declare_process('mock', nil,
154
+ :lib_name => 'lorj')).to equal(nil)
149
155
  end
150
156
 
151
157
  it 'all kept module processes in Lorj.processes not duplicated.' do
@@ -39,8 +39,9 @@ require 'spec_helper'
39
39
  describe 'Lorj::Core,' do
40
40
  context 'Using lorj-spec process, ' do
41
41
  process_path = File.expand_path(File.join(app_path, '..', 'lorj-spec'))
42
- Lorj.declare_process('mock', process_path)
42
+ Lorj.declare_process('mock', process_path, :lib_name => 'lorj')
43
43
  Lorj.declare_process('mock2', process_path,
44
+ :lib_name => 'lorj',
44
45
  :controllers_path => File.join(process_path,
45
46
  'providers_extra'))
46
47
  end
@@ -54,11 +54,8 @@ describe 'Internal BaseDefinition features' do
54
54
  end
55
55
 
56
56
  # Internal function to test.
57
- def_internal '_new_encrypt_key'
58
57
  def_internal '_get_encrypt_key'
59
58
  def_internal '_get_encrypted_value_hidden'
60
- def_internal '_get_encrypted_value'
61
- def_internal '_encrypt_value'
62
59
  def_internal '_account_map'
63
60
  end
64
61
 
@@ -73,8 +70,8 @@ describe 'Internal BaseDefinition features' do
73
70
  File.delete(@key_file) if File.exist?(@key_file)
74
71
  end
75
72
 
76
- it '_new_encrypt_key return a new entr hash' do
77
- ret = @spec_obj.spec_new_encrypt_key
73
+ it 'Lorj::SSLCrypt.new_encrypt_key return a new entr hash' do
74
+ ret = Lorj::SSLCrypt.new_encrypt_key
78
75
  expect(ret.class).to equal(Hash)
79
76
  expect(ret.keys.sort).to eq([:key, :salt, :iv].sort)
80
77
  expect(ret[:key].class).to equal(String)
@@ -93,21 +90,21 @@ describe 'Internal BaseDefinition features' do
93
90
  expect(@spec_obj.spec_get_encrypt_key).to eq(ret)
94
91
  end
95
92
 
96
- it '_encrypt_value return a strict base64 data' do
93
+ it 'Lorj::SSLCrypt.encrypt_value return a strict base64 data' do
97
94
  to_enc = 'Data to encrypt'
98
95
  entr = @spec_obj.spec_get_encrypt_key
99
- ret = @spec_obj.spec_encrypt_value(to_enc, entr)
96
+ ret = Lorj::SSLCrypt.encrypt_value(to_enc, entr)
100
97
 
101
98
  expect(Base64.strict_decode64(ret).class).to eq(String)
102
- expect(ret).to eq(@spec_obj.spec_encrypt_value(to_enc, entr))
99
+ expect(ret).to eq(Lorj::SSLCrypt.encrypt_value(to_enc, entr))
103
100
  end
104
101
 
105
- it '_get_encrypted_value return is decryptable' do
102
+ it 'Lorj::SSLCrypt.get_encrypted_value return is decryptable' do
106
103
  to_enc = 'Data to encrypt'
107
104
  entr = @spec_obj.spec_get_encrypt_key
108
- ret = @spec_obj.spec_encrypt_value(to_enc, entr)
105
+ ret = Lorj::SSLCrypt.encrypt_value(to_enc, entr)
109
106
 
110
- expect(@spec_obj.spec_get_encrypted_value(ret, entr,
107
+ expect(Lorj::SSLCrypt.get_encrypted_value(ret, entr,
111
108
  'value')).to eq(to_enc)
112
109
  end
113
110
 
@@ -115,7 +112,7 @@ describe 'Internal BaseDefinition features' do
115
112
  'original value' do
116
113
  to_enc = 'Data to encrypt'
117
114
  entr = @spec_obj.spec_get_encrypt_key
118
- ret = @spec_obj.spec_encrypt_value(to_enc, entr)
115
+ ret = Lorj::SSLCrypt.encrypt_value(to_enc, entr)
119
116
  hidden = @spec_obj.spec_get_encrypted_value_hidden('value', ret, entr)
120
117
 
121
118
  expect(hidden.include?('*')).to equal(true)
@@ -55,8 +55,6 @@ describe 'Internal BaseDefinition features' do
55
55
 
56
56
  # Internal function to test.
57
57
  def_internal '_get_encrypt_key'
58
- def_internal '_get_encrypted_value'
59
- def_internal '_encrypt_value'
60
58
  end
61
59
 
62
60
  # Spec class for ImportExport feature spec
@@ -89,9 +87,10 @@ describe 'Internal BaseDefinition features' do
89
87
  @spec_obj = ImportExportSpec.new(@config)
90
88
 
91
89
  process_path = File.expand_path(File.join(app_path, '..', 'lorj-spec'))
92
- Lorj.declare_process('mock', process_path)
90
+ Lorj.declare_process('mock', process_path, :lib_name => 'lorj')
93
91
 
94
- @core = Lorj::Core.new(@config, [{ :process_module => :mock }])
92
+ @core = Lorj::Core.new(@config, [{ :process_module => :mock,
93
+ :controller_name => :mock }])
95
94
 
96
95
  @key_file = File.join(PrcLib.pdata_path, '.key')
97
96
  @crypt = BaseDefinitionSpec.new
@@ -110,14 +109,20 @@ describe 'Internal BaseDefinition features' do
110
109
  expect(@spec_obj.spec_account_map['credentials#key']).to eq({})
111
110
  end
112
111
 
113
- it 'account_export() returns valid [entr, data_enc]' do
112
+ it 'account_export() returns valid [entr, export_dat]' do
114
113
  export = @spec_obj.account_export
115
114
  expect(export.class).to equal(Array)
116
- entr, data_encrypted = export
117
- data_decrypted = @crypt.s_get_encrypted_value(data_encrypted,
118
- entr, 'data encrypted')
119
- expect(data_decrypted.class).to equal(String)
120
- data = YAML.load(data_decrypted)
115
+ entr, export_dat = export
116
+ export_dat = YAML.load(export_dat)
117
+ expect(export_dat.key?(:enc_data)).to equal(true)
118
+ expect(export_dat.key?(:processes)).to equal(true)
119
+ expect(export_dat[:processes].class).to equal(Array)
120
+ expect(export_dat[:processes][0].key?(:process_module)).to equal(true)
121
+ expect(export_dat[:processes][0].key?(:lib_name)).to equal(true)
122
+ dat_decrypted = Lorj::SSLCrypt.get_encrypted_value(export_dat[:enc_data],
123
+ entr, 'data encrypted')
124
+ expect(dat_decrypted.class).to equal(String)
125
+ data = YAML.load(dat_decrypted)
121
126
  expect(data.rh_exist?(:account, :name)).to equal(true)
122
127
  expect(data.rh_get(:account, :name)).to eq('test')
123
128
  expect(data.rh_exist?(:credentials, :keypair_name)).to equal(true)
@@ -127,30 +132,33 @@ describe 'Internal BaseDefinition features' do
127
132
  end
128
133
 
129
134
  it 'account_export(nil, false) returns account@name and credentials#key' do
130
- entr, data_encrypted = @spec_obj.account_export(nil, false)
131
- data_decrypted = @crypt.s_get_encrypted_value(data_encrypted,
132
- entr, 'data encrypted')
133
- data = YAML.load(data_decrypted)
135
+ entr, export_dat = @spec_obj.account_export(nil, false)
136
+ export_dat = YAML.load(export_dat)
137
+ dat_decrypted = Lorj::SSLCrypt.get_encrypted_value(export_dat[:enc_data],
138
+ entr, 'data encrypted')
139
+ data = YAML.load(dat_decrypted)
134
140
  expect(data.rh_exist?(:account, :name)).to equal(false)
135
141
  expect(data.rh_exist?(:credentials, :key)).to equal(true)
136
142
  end
137
143
 
138
144
  it 'account_export(nil, false, false) returns "runtime" keypair_name'\
139
145
  ' value' do
140
- entr, data_encrypted = @spec_obj.account_export(nil, false, false)
141
- data_decrypted = @crypt.s_get_encrypted_value(data_encrypted,
142
- entr, 'data encrypted')
143
- data = YAML.load(data_decrypted)
146
+ entr, export_dat = @spec_obj.account_export(nil, false, false)
147
+ export_dat = YAML.load(export_dat)
148
+ dat_decrypted = Lorj::SSLCrypt.get_encrypted_value(export_dat[:enc_data],
149
+ entr, 'data encrypted')
150
+ data = YAML.load(dat_decrypted)
144
151
  expect(data.rh_exist?(:credentials, :keypair_name)).to equal(true)
145
152
  expect(data.rh_get(:credentials, :keypair_name)).to eq('another_key')
146
153
  end
147
154
 
148
155
  it 'account_export({"credentials#key" => {}}) returns key, '\
149
156
  'name & provider' do
150
- entr, data_encrypted = @spec_obj.account_export('credentials#key' => {})
151
- data_decrypted = @crypt.s_get_encrypted_value(data_encrypted,
152
- entr, 'data encrypted')
153
- data = YAML.load(data_decrypted)
157
+ entr, export_dat = @spec_obj.account_export('credentials#key' => {})
158
+ export_dat = YAML.load(export_dat)
159
+ dat_decrypted = Lorj::SSLCrypt.get_encrypted_value(export_dat[:enc_data],
160
+ entr, 'data encrypted')
161
+ data = YAML.load(dat_decrypted)
154
162
  expect(data.rh_exist?(:credentials, :keypair_name)).to equal(false)
155
163
  expect(data.rh_exist?(:credentials, :key)).to equal(true)
156
164
  expect(data.rh_exist?(:account, :name)).to equal(true)
@@ -159,24 +167,39 @@ describe 'Internal BaseDefinition features' do
159
167
  it 'account_export({"credentials#key" => {:keys => [:server, :key]}})'\
160
168
  ' returns ' do
161
169
  map = { 'credentials#key' => { :keys => [:server, :key] } }
162
- entr, data_encrypted = @spec_obj.account_export(map)
163
- data_decrypted = @crypt.s_get_encrypted_value(data_encrypted,
164
- entr, 'data encrypted')
165
- data = YAML.load(data_decrypted)
170
+ entr, export_dat = @spec_obj.account_export(map)
171
+ export_dat = YAML.load(export_dat)
172
+ dat_decrypted = Lorj::SSLCrypt.get_encrypted_value(export_dat[:enc_data],
173
+ entr, 'data encrypted')
174
+ data = YAML.load(dat_decrypted)
166
175
  expect(data.rh_exist?(:credentials, :key)).to equal(false)
167
176
  expect(data.rh_exist?(:server, :key)).to equal(true)
168
177
  expect(data.rh_exist?(:account, :name)).to equal(true)
169
178
  end
170
179
 
171
- it 'account_import(entr, enc_hash) update the "account layer"' do
172
- entr, data_encrypted = @spec_obj.account_export
180
+ it 'account_data_import(data) update the "account layer"' do
181
+ entr, export_dat = @spec_obj.account_export
182
+ export_dat = YAML.load(export_dat)
173
183
  @config.ac_erase
174
- data = @spec_obj.account_import(entr, data_encrypted)
175
- expect(data.class).to equal(Hash)
184
+ dat_decrypted = Lorj::SSLCrypt.get_encrypted_value(export_dat[:enc_data],
185
+ entr, 'data encrypted')
186
+ data = YAML.load(dat_decrypted)
187
+ res = @spec_obj.account_data_import(data)
188
+ expect(res.class).to equal(Hash)
176
189
  expect(@config['account#name']).to eq('test')
177
190
  expect(@config[:keypair_name]).to eq('another_key')
178
191
  expect(@config.get(:keypair_name, nil,
179
192
  :name => 'account')).to eq('mykey')
180
193
  end
194
+
195
+ it 'Lorj.account_import(entr, enc_hash) update the "account layer"' do
196
+ entr, export_dat = @spec_obj.account_export
197
+ core = Lorj.account_import(entr, export_dat)
198
+ expect(core).to be
199
+ expect(core.config['account#name']).to eq('test')
200
+ expect(core.config[:keypair_name]).to eq('mykey')
201
+ expect(core.config.get(:keypair_name, nil,
202
+ :name => 'account')).to eq('mykey')
203
+ end
181
204
  end
182
205
  end
data/spec/spec_helper.rb CHANGED
@@ -86,3 +86,29 @@ module Lorj
86
86
  a
87
87
  end
88
88
  end
89
+
90
+ RSpec.configure do |config|
91
+ config.before(:all, &:silence_output)
92
+ config.after(:all, &:enable_output)
93
+ end
94
+
95
+ public
96
+
97
+ # Redirects stderr and stout to /dev/null.txt
98
+ def silence_output
99
+ # Store the original stderr and stdout in order to restore them later
100
+ @original_stderr = $stderr
101
+ @original_stdout = $stdout
102
+
103
+ # Redirect stderr and stdout
104
+ $stderr = File.open(File.join('', 'dev', 'null'), 'w')
105
+ $stdout = File.open(File.join('', 'dev', 'null'), 'w')
106
+ end
107
+
108
+ # Replace stderr and stdout so anything else is output correctly
109
+ def enable_output
110
+ $stderr = @original_stderr
111
+ $stdout = @original_stdout
112
+ @original_stderr = nil
113
+ @original_stdout = nil
114
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lorj
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.14
4
+ version: 1.0.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - forj team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-24 00:00:00.000000000 Z
11
+ date: 2015-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler