lorj 1.0.14 → 1.0.16

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: 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