imperituroard 0.4.2 → 0.4.3

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.
@@ -0,0 +1,785 @@
1
+ $LOAD_PATH.unshift File.expand_path("../projects/iot", __dir__)
2
+
3
+ require 'imperituroard/projects/iot/mongoconnector'
4
+ require 'imperituroard/projects/iot/hua_oceanconnect_adapter'
5
+ require 'imperituroard/projects/iot/add_functions'
6
+ require 'imperituroard/projects/iot/internal_functions'
7
+ require "imperituroard/phpipamdb"
8
+ require "imperituroard/phpipamcps"
9
+ require 'json'
10
+ require 'ipaddr'
11
+ require 'date'
12
+ require 'net/http'
13
+ require 'uri'
14
+
15
+
16
+ class IotFunctions_2
17
+
18
+ attr_accessor :mongoip,
19
+ :mongoport,
20
+ :iotip,
21
+ :mongo_database,
22
+ :iotplatform_ip,
23
+ :iotplatform_port,
24
+ :cert_path,
25
+ :key_path,
26
+ :mongo_client,
27
+ :add_functions_connector,
28
+ :real_ip, #real ip address of procedure caller
29
+ :remote_ip, #ip address of balancer
30
+ :hua_aceanconnect_connector,
31
+ :internal_func
32
+
33
+ def initialize(mongoip, mongoport, iotip, mongo_database,
34
+ iotplatform_ip, iotplatform_port, cert_path, key_path, telegram_api_url, telegram_chat_id, real_ip, remote_ip)
35
+ @mongoip = mongoip
36
+ @mongoport = mongoport
37
+ @iotip = iotip
38
+ @mongo_database = mongo_database
39
+ @iotplatform_ip = iotplatform_ip
40
+ @iotplatform_port = iotplatform_port
41
+ @cert_path = cert_path
42
+ @key_path = key_path
43
+ @mongo_client = MongoIot.new(mongoip, mongoport, mongo_database)
44
+ @add_functions_connector = AdditionalFunc.new(telegram_api_url, telegram_chat_id)
45
+ @real_ip = real_ip
46
+ @remote_ip = remote_ip
47
+ @hua_aceanconnect_connector = HuaIot.new(iotplatform_ip, iotplatform_port, cert_path, key_path)
48
+ @internal_func = InternalFunc.new
49
+ end
50
+
51
+ #!!1. Add device to profile (only for new device)
52
+ #login - login for client identification
53
+ #profile - profile for device
54
+ #imei_list - device identificator
55
+ #imei_list = [{"imei" => 131234123412341233, "description" => "dfdsf", "note"=>"second description", "profile"=>0, "device_type"=>"phone"},
56
+ #{"imei" => 56213126347645784, "description" => "dfdsf", "note"=>"second description", "profile"=>0}]
57
+ #massive commands
58
+ #+++
59
+ #iot logic added
60
+ def add_device_to_prof_2(login, imei_list)
61
+ input_json = {:login => login, :imei_list => imei_list}
62
+ resp_out = {}
63
+ begin
64
+
65
+ thr1 = Thread.new do
66
+ if add_functions_connector.check_input_1(login, imei_list)[:code]==200
67
+
68
+ imei = []
69
+ list1 = {}
70
+ for_insert = []
71
+ not_processed_list = []
72
+ processed_list = []
73
+
74
+ for ii in imei_list
75
+ list1[ii["imei"]] = ii
76
+ imei.append(ii["imei"])
77
+ end
78
+ list_checked = mongo_client.check_imei_exists(imei)
79
+ for ss in list_checked[:body][:exists]
80
+ not_processed_list.append({:imei => ss, :error => "Device exists in database"})
81
+ end
82
+
83
+ for jj in list_checked[:body][:not_exists]
84
+ begin
85
+ get_login_info = mongo_client.check_login_prof_perm_id_one(login, list1[jj]["profile"])[:code]
86
+ if get_login_info==200
87
+ for_insert.append(list1[jj])
88
+ else
89
+ not_processed_list.append({:imei => list1[jj], :error => "Permission denied for this profile"})
90
+ end
91
+ rescue
92
+ not_processed_list.append({:imei => list1[jj], :error => "Unknown error"})
93
+ end
94
+ end
95
+
96
+ begin
97
+ added_on_iot_platf = []
98
+ if for_insert!=[]
99
+ ##Logic for IOT Platform connection###
100
+
101
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
102
+
103
+ if credentials[:code]==200
104
+ for aaa in for_insert
105
+ begin
106
+ dev_name = aaa["imei"].to_s
107
+
108
+ #get {"model"=>"BGT_PPMC", "ManufacturerID"=>"unknown", "ManufacturerNAME"=>"unknown", "device_type"=>"unknown"}
109
+ #from database
110
+ model_data = mongo_client.get_device_type_info_by_model(aaa["device_type"])
111
+ resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials[:body][:app_id],
112
+ credentials[:body][:secret],
113
+ aaa["imei"],
114
+ dev_name,
115
+ aaa["description"],
116
+ model_data[:body]["device_type"],
117
+ aaa["profile"],
118
+ model_data[:body]["ManufacturerID"],
119
+ model_data[:body]["ManufacturerNAME"],
120
+ model_data[:body]["model"]
121
+ )
122
+ if resss[:code]=="200"
123
+ s1 = aaa
124
+ s1[:huadata] = resss
125
+ s1[:created] = DateTime.now
126
+ added_on_iot_platf.append(s1)
127
+ else
128
+ not_processed_list.append({:imei => aaa["imei"], :error => resss})
129
+ end
130
+ rescue
131
+ not_processed_list.append({:imei => aaa["imei"], :error => "Unknown error with insertion imei on IOT platform"})
132
+ end
133
+ end
134
+
135
+ #########end iot platform logic#######
136
+
137
+ mongo_client.imei_insert_list(added_on_iot_platf)
138
+ resp_out = {:code => 200, :result => "Data processed", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}}
139
+ else
140
+ resp_out = {:code => 400, :result => "IOT platform credentials not found"}
141
+ end
142
+
143
+
144
+ else
145
+ resp_out = {:code => 202, :result => "Nothing for insertion", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}}
146
+
147
+ end
148
+ rescue
149
+ resp_out = {:code => 505, :result => "Error with database communication"}
150
+ end
151
+
152
+ else
153
+ resp_out = {:code => 509, :result => "Input data invalid"}
154
+ end
155
+ end
156
+ rescue
157
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
158
+ end
159
+ thr1.join
160
+
161
+ mongo_client.audit_logger("add_device_to_profile", remote_ip, input_json, resp_out, real_ip)
162
+ resp_out
163
+ end
164
+
165
+
166
+ #!!2 Find device (only mongo datebase. IOT platform not need)
167
+ # procedure for data selection from mongo database.
168
+ # for this function IOT platform not need
169
+ # login
170
+ # imei
171
+ # imei_list =[41234,23452345,132412]
172
+ #++
173
+ def device_find_2(login, imei_list)
174
+ input_json = {:login => login, :imei_list => imei_list}
175
+ ime_list_approved = []
176
+ ime_list_notapproved = []
177
+ resp_out = {}
178
+ begin
179
+ thr2 = Thread.new do
180
+ if add_functions_connector.check_input_2(login, imei_list)[:code]==200
181
+
182
+ for t in imei_list
183
+ prof_name1 = mongo_client.get_profile_name_from_imei(t)
184
+ if prof_name1[:code]==200
185
+ begin
186
+ permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])
187
+ p "permiss1"
188
+ p permiss1
189
+ if permiss1[:code]==200
190
+ ime_list_approved.append(t)
191
+ else
192
+ ime_list_notapproved.append({:imei => t, :error => permiss1})
193
+ end
194
+ rescue
195
+ ime_list_notapproved.append({:imei => t, :error => {:code => 405, :result => "Unknown error when check_login_profile_permiss imei #{t.to_s}"}})
196
+ end
197
+ else
198
+ ime_list_notapproved.append({:imei => t, :error => prof_name1})
199
+ end
200
+ end
201
+ begin
202
+ if ime_list_approved != []
203
+ data = mongo_client.get_imei_info_from_db(ime_list_approved)
204
+
205
+ resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => data, :unapproved_list => ime_list_notapproved}}
206
+
207
+ else
208
+ resp_out = {:code => 404, :result => "Invalidate data", :data => {:approved_list => [], :unapproved_list => ime_list_notapproved}}
209
+ end
210
+ rescue
211
+ resp_out = {:code => 504, :result => "Unsuccessfully data transfer"}
212
+ end
213
+ else
214
+ resp_out = {:code => 509, :result => "Input data invalid"}
215
+ end
216
+ end
217
+ rescue
218
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
219
+ end
220
+ thr2.join
221
+ mongo_client.audit_logger("device_find", remote_ip, input_json, resp_out, real_ip)
222
+ resp_out
223
+ end
224
+
225
+ #!3 device modify, change imei
226
+ #login
227
+ #imei_old
228
+ #imei_new
229
+ #massive commands
230
+ #im_list = [{"imei_old"=>7967843245667, "imei_new"=>7967843245665}]
231
+ #++
232
+ def imei_replace_2(login, im_list)
233
+ input_json = {:login => login, :imei_list => im_list}
234
+ resp_out = {}
235
+
236
+ begin
237
+
238
+ thr3 = Thread.new do
239
+
240
+ if add_functions_connector.check_input_3(login, im_list)[:code]==200
241
+
242
+ li_new_imei = []
243
+ list1 = {}
244
+
245
+ #dictionary for imeis which not processed. Final dictionary
246
+ not_processed_list = []
247
+
248
+ #dictionary for devices which was processed correctly
249
+ processed_list = []
250
+
251
+ #array for translations from old imei to new
252
+ old_new_translation = {}
253
+
254
+ approved_list = []
255
+
256
+
257
+ #old_imei_list for query to iot platform for data request
258
+ step1_approved_dict_old=[]
259
+
260
+ #form dictionary for processing
261
+ for pr1 in im_list
262
+ li_new_imei.append(pr1["imei_new"])
263
+ list1[pr1["imei_new"]]=pr1["imei_old"]
264
+ old_new_translation[pr1["imei_old"]]=pr1["imei_new"]
265
+ end
266
+
267
+ #check if imei_new exists in database. If exists - not process this imei
268
+ list_checked = mongo_client.check_imei_exists(li_new_imei)
269
+
270
+ internal_func.printer_texter({:function => "imei_replace Step1", :list_checked => list_checked}, "debug")
271
+
272
+ #add already exists new IMEI in error dictionary
273
+ for ss in list_checked[:body][:exists]
274
+ not_processed_list.append({:record => {:imei_old => list1[ss], :imei_new => ss}, :error => "New IMEI exists in database"})
275
+ end
276
+
277
+ #new_imei list which processed step1
278
+ step2_list = list_checked[:body][:not_exists]
279
+
280
+ internal_func.printer_texter({:function => "imei_replace Step2", :step2_list => step2_list}, "debug")
281
+
282
+
283
+ for a in step2_list
284
+ begin
285
+
286
+ #step3 checking permission for writing for imei list
287
+ prof_name1 = mongo_client.get_profile_name_from_imei(list1[a])
288
+
289
+ internal_func.printer_texter({:function => "imei_replace Step3", :prof_name1 => prof_name1}, "debug")
290
+
291
+ if prof_name1[:code]==200
292
+ permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])[:code]
293
+ internal_func.printer_texter({:function => "imei_replace Step4", :permiss1 => permiss1, :input => prof_name1[:body]["profile"]}, "debug")
294
+ if permiss1==200
295
+
296
+ approved_list.append({:imei_old => list1[a], :imei_new => a})
297
+ step1_approved_dict_old.append(list1[a])
298
+
299
+ else
300
+ not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Old IMEI modification denied"})
301
+ end
302
+ else
303
+ not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Old IMEI not exists in database"})
304
+ end
305
+ rescue
306
+ not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Unknown error"})
307
+ end
308
+ end
309
+
310
+ internal_func.printer_texter({:function => "imei_replace Step5", :not_processed_list => not_processed_list, :input => list1, :approved_list => approved_list, :step1_approved_dict_old => step1_approved_dict_old}, "debug")
311
+
312
+
313
+ ##Logic for IOT Platform connection###
314
+
315
+ list_from_iot = self.get_info_by_imeilist_from_iot(login, step1_approved_dict_old)
316
+
317
+ internal_func.printer_texter({:function => "imei_replace Step6", :list_from_iot => list_from_iot, :description => "data from iot platform by old imei"}, "debug")
318
+
319
+ #processing data. modifying data on iot platform and mongoDB
320
+ if list_from_iot[:code]=="200"
321
+
322
+ for ard in list_from_iot[:body]["devices"]
323
+ p ard
324
+ new_data_cur_dev = {}
325
+ mongo_answer = {}
326
+ current_old_dev = ard["deviceInfo"]["nodeId"]
327
+ current_device_id = ard["deviceId"]
328
+ new_data_cur_dev = ard["deviceInfo"]
329
+ new_data_cur_dev["nodeId"] = old_new_translation[current_old_dev.to_i].to_s
330
+
331
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
332
+
333
+ if credentials[:code]==200
334
+ flag_remove=0
335
+ flag_create=0
336
+ remove_answer = hua_aceanconnect_connector.remove_one_device_from_iot(credentials[:body][:app_id], credentials[:body][:secret], current_device_id)
337
+ create_answer = hua_aceanconnect_connector.add_new_device_on_huawei2(credentials[:body][:app_id], credentials[:body][:secret], new_data_cur_dev)
338
+
339
+ if remove_answer[:code]=="204" || remove_answer[:code]=="200"
340
+ flag_remove=1
341
+ end
342
+ if create_answer[:code]=="200"
343
+ flag_create=1
344
+ end
345
+ if flag_remove==1 && flag_create==1
346
+ mongo_answer = mongo_client.device_modify_any_attr_mongo(current_old_dev.to_i, {:imei => old_new_translation[current_old_dev.to_i], :huadata => {:body => create_answer[:body]}, :updated => DateTime.now})
347
+ processed_list.append({:imei_old => current_old_dev.to_i, :imei_new => old_new_translation[current_old_dev.to_i]})
348
+ else
349
+ not_processed_list.append({:record => {:imei_old => current_old_dev.to_i, :imei_new => old_new_translation[current_old_dev.to_i]}, :error => "Failed for provisioning to IOT platform"})
350
+ end
351
+
352
+ internal_func.printer_texter({:function => "imei_replace Step7", :remove_answer => remove_answer, :create_answer => create_answer, :mongo_answer => mongo_answer, :description => "processing imei #{current_old_dev.to_s}"}, "debug")
353
+
354
+ else
355
+ approved_list=[]
356
+ end
357
+ end
358
+
359
+ else
360
+ approved_list=[]
361
+ end
362
+
363
+ if approved_list!=[]
364
+ resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
365
+ else
366
+ resp_out = {:code => 202, :result => "Nothing to do", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
367
+ end
368
+
369
+ else
370
+ resp_out = {:code => 509, :result => "Input data invalid"}
371
+ end
372
+
373
+ end
374
+
375
+ rescue
376
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
377
+ end
378
+
379
+ thr3.join
380
+ mongo_client.audit_logger("imei_replace", remote_ip, input_json, resp_out, real_ip)
381
+
382
+ resp_out
383
+
384
+ end
385
+
386
+
387
+ #!!4 remove device
388
+ #login
389
+ #imei
390
+ # not massive commands
391
+ #imei=11341341234
392
+ #login="test"
393
+ #+++
394
+ #IOT logic added
395
+ def device_remove_2(login, imei)
396
+
397
+ input_json = {:login => login, :imei_list => imei}
398
+ resp_out = {}
399
+
400
+ begin
401
+ thr4 = Thread.new do
402
+
403
+ if add_functions_connector.check_input_4(login, imei)[:code]==200
404
+
405
+ prof_name = mongo_client.get_profile_name_from_imei(imei)
406
+ if prof_name[:code]==200
407
+ permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
408
+ if permiss[:code]==200
409
+
410
+ ##Logic for IOT Platform connection###
411
+
412
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
413
+ resp = {}
414
+
415
+ if credentials[:code]==200
416
+
417
+ imei_data = mongo_client.get_imei_info_from_db([imei])
418
+ if imei_data[:body]!=[]
419
+ ans = hua_aceanconnect_connector.remove_one_device_from_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"])
420
+ p ans
421
+ if ans[:code]=="204" or ans[:code]=="200"
422
+ resp = mongo_client.device_remove_single_mongo(imei)
423
+ else
424
+ resp = {:code => 500, :result => "Unknown IOT platform error", :body => ans}
425
+ end
426
+ else
427
+ resp_out = {:code => 404, :result => "Data not found"}
428
+ end
429
+
430
+ #########end iot platform logic#######
431
+
432
+ if resp[:code]==200
433
+ resp_out = {:code => 200, :result => "Request completed successfully"}
434
+ else
435
+ resp_out=resp
436
+ end
437
+ else
438
+ resp_out = {:code => 400, :result => "IOT platform credentials not found"}
439
+ end
440
+ else
441
+ resp_out=permiss
442
+ end
443
+ else
444
+ resp_out=prof_name
445
+ end
446
+ else
447
+ resp_out = {:code => 509, :result => "Input data invalid"}
448
+ end
449
+
450
+ end
451
+
452
+ rescue
453
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
454
+ end
455
+ thr4.join
456
+ mongo_client.audit_logger("device_remove", remote_ip, input_json, resp_out, real_ip)
457
+ resp_out
458
+ end
459
+
460
+
461
+ #!5 add address to device
462
+ #login
463
+ #imei = newdevice_list
464
+ #address = newdevice_list
465
+ #newdevice_list=[{:imei=>7967843245665, :address=>"Golubeva51"}]
466
+ #+++
467
+ #iot platform integration completed
468
+ def device_add_address_2(login, newdevice_list)
469
+ #add_functions_connector.telegram_message(newdevice_list.to_s)
470
+ p newdevice_list
471
+ p "gas"
472
+ p MyJSON.valid?(newdevice_list[0].to_s)
473
+ p "sdfsdfgs"
474
+ input_json = {:login => login, :devices => newdevice_list}
475
+ resp_out = {}
476
+ not_processed = []
477
+ processed = []
478
+ begin
479
+ thr5 = Thread.new do
480
+ if add_functions_connector.check_input_5(login, newdevice_list)[:code]==200
481
+
482
+ for p in newdevice_list
483
+ prof_name = mongo_client.get_profile_name_from_imei(p[:imei])
484
+
485
+ if prof_name[:code]==200
486
+ permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
487
+ if permiss[:code]==200
488
+
489
+ ##Logic for IOT Platform connection###
490
+ credentials = mongo_client.get_iot_oceanconnect_credent(login)
491
+ resp = {}
492
+
493
+ if credentials[:code]==200
494
+ imei_data = mongo_client.get_imei_info_from_db([p[:imei]])
495
+ if imei_data[:body]!=[]
496
+ ans =hua_aceanconnect_connector.modify_location_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"], p[:address])
497
+
498
+ internal_func.printer_texter({:function => "device_add_address Step2", :ans => ans, :descrition => "answer from hua IOT", :input => {:did => imei_data[:body][0]["huadata"]["body"]["deviceId"], :appid => credentials[:body][:app_id], :secret => credentials[:body][:secret], :address => p[:address]}}, "debug")
499
+ end
500
+
501
+ end
502
+
503
+ #########end iot platform logic#######
504
+
505
+ resp = mongo_client.device_modify_attr_mongo(p[:imei], p[:address])
506
+ if resp[:code]==200
507
+ processed.append({:imei => p[:imei]})
508
+ end
509
+ else
510
+ not_processed.append({:imei => p[:imei], :address => p[:address], :error => permiss})
511
+ end
512
+ else
513
+ not_processed.append({:imei => p[:imei], :address => p[:address], :error => prof_name})
514
+ end
515
+ end
516
+
517
+ if processed!=[]
518
+ resp_out = {:code => 200, :result => "Request completed successfully", :body => {:imei_processed => processed, :error_list => not_processed}}
519
+ else
520
+ resp_out = {:code => 202, :result => "Nothing processed", :body => {:imei_processed => processed, :error_list => not_processed}}
521
+ end
522
+ else
523
+ resp_out = {:code => 509, :result => "Input data invalid"}
524
+ end
525
+ end
526
+ rescue
527
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
528
+ end
529
+ thr5.join
530
+ mongo_client.audit_logger("device_add_address", remote_ip, input_json, resp_out, real_ip)
531
+ resp_out
532
+ end
533
+
534
+
535
+ #6 add service by SPA
536
+ #imei
537
+ #profile
538
+ #imsi
539
+ #msisdn
540
+ #newdevice_list=[{:imei=>7967843245665, :attributes=>{:address=>"Golubeva51", :profile=>"wqeqcqeqwev", :msisdn=>375298766719, :imsi=>25702858586756875}}]
541
+ #+
542
+ def add_service_2(login, device_list)
543
+ resp_out = {}
544
+ not_processed = []
545
+ processed = []
546
+
547
+ input_json = {:login => login, :devices => device_list}
548
+
549
+ begin
550
+
551
+ thr6 = Thread.new do
552
+
553
+ if add_functions_connector.check_input_5(login, device_list)[:code]==200
554
+
555
+ for g in device_list
556
+
557
+ prof_name1 = mongo_client.get_profile_name_from_imei(g["imei"])
558
+
559
+ if prof_name1[:code]==200
560
+ permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])
561
+ if permiss1[:code]==200
562
+
563
+ if g["attributes"].key?("profile")
564
+ permiss2 = mongo_client.check_login_profile_permiss(login, g["attributes"]["profile"])[:code]
565
+
566
+ if permiss2==200
567
+
568
+ attr = g["attributes"]
569
+ #mod_attr = {}
570
+
571
+ if attr.key?("profile")
572
+ if attr["profile"].is_a? Integer
573
+ p "Ok"
574
+ else
575
+ p new = mongo_client.get_profile_id_by_name(attr["profile"])
576
+ attr["profile"] = new["profile_id"]
577
+ end
578
+ end
579
+ mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
580
+ processed.append(g["imei"])
581
+ else
582
+ not_processed.append({:imei => g["imei"], :description => "New profile permission error", :error => permiss2})
583
+ end
584
+
585
+ else
586
+ attr = g["attributes"]
587
+ mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
588
+ processed.append(g["imei"])
589
+ end
590
+ else
591
+ not_processed.append({:imei => g["imei"], :description => "Old profile permission error", :error => permiss1})
592
+ end
593
+
594
+ else
595
+ not_processed.append({:imei => g["imei"], :error => prof_name1})
596
+ end
597
+
598
+ end
599
+ resp_out = {:code => 200, :result => "Request completed successfully", :body => {:imei_processed => processed, :error_list => not_processed}}
600
+ else
601
+ resp_out = {:code => 509, :result => "Input data invalid"}
602
+ end
603
+
604
+ end
605
+
606
+ rescue
607
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
608
+ end
609
+ thr6.join
610
+ mongo_client.audit_logger("device_remove", remote_ip, input_json, resp_out, real_ip)
611
+ resp_out
612
+ end
613
+
614
+
615
+ #7 procedure for subscriber autorization
616
+ def autorize_subscriber_2(login, password)
617
+ input_json = {:login => login, :password => password}
618
+ resp_out = {}
619
+ thr7 = Thread.new do
620
+ begin
621
+ login_inform = mongo_client.get_login_info(login)
622
+ if login_inform[:code]==200
623
+ pass_mongo = login_inform[:body]["password"]
624
+ if pass_mongo == password
625
+ resp_out = {:code => 200, :result => "Access granted"}
626
+ else
627
+ resp_out = {:code => 400, :result => "Access denied"}
628
+ end
629
+ else
630
+ resp_out = {:code => 401, :result => "Access denied. Incorrect login"}
631
+ end
632
+ rescue
633
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
634
+ end
635
+ end
636
+ thr7.join
637
+ mongo_client.audit_logger("autorize_subscriber", remote_ip, input_json, resp_out, real_ip)
638
+ resp_out
639
+ end
640
+
641
+
642
+ def answ_dev_query_format_process(dev_list)
643
+ add_functions_connector.answ_dev_query_format_process(dev_list)
644
+ end
645
+
646
+
647
+ def get_available_prof_2(login)
648
+
649
+ input_params = {:login => login}
650
+ resp_out = {}
651
+
652
+ begin
653
+ data_processed = []
654
+ login_info = mongo_client.get_login_inf2_select(login)
655
+ if login_info[:code]==200
656
+ permit_profiles = login_info[:body]["permit_profiles"]
657
+ permit_types = login_info[:body]["permit_types"]
658
+ data_from_mongo = mongo_client.get_profile_list_by_id(permit_profiles)
659
+
660
+ for ff in data_from_mongo
661
+ data_processed.append({:profile_id => ff["profile_id"],
662
+ :description => ff["description"],
663
+ :note => ff["note"],
664
+ :form => ff["form"],
665
+ :profile => ff["profile"],
666
+ :info => ff["info"]
667
+ })
668
+ end
669
+ resp_out = {:code => 200, :result => "Request completed successfully", :body => {:data => data_processed}}
670
+ else
671
+ resp_out = {:code => login_info[:code], :result => login_info[:result]}
672
+ end
673
+
674
+ rescue
675
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
676
+ end
677
+ mongo_client.audit_logger("get_available_prof_2", remote_ip, input_params, resp_out, real_ip)
678
+ resp_out
679
+ end
680
+
681
+
682
+ def get_available_types_2(login)
683
+
684
+ input_params = {:login => login}
685
+ resp_out = {}
686
+
687
+ begin
688
+ data_processed = []
689
+ login_info = mongo_client.get_login_inf2_select(login)
690
+ if login_info[:code]==200
691
+
692
+ permit_profiles = login_info[:body]["permit_profiles"]
693
+ permit_types = login_info[:body]["permit_types"]
694
+
695
+ data_from_mongo = mongo_client.get_type_list_by_id(permit_types)
696
+
697
+ for ff in data_from_mongo
698
+ data_processed.append({:type_id => ff["type_id"],
699
+ :description => ff["description"],
700
+ :note => ff["note"],
701
+ :form => ff["form"],
702
+ :ManufacturerID => ff["ManufacturerID"],
703
+ :ManufacturerNAME => ff["ManufacturerNAME"],
704
+ :device_type => ff["device_type"],
705
+ :model => ff["model"],
706
+ :info => ff["info"]
707
+ })
708
+ end
709
+ resp_out = {:code => 200, :result => "Request completed successfully", :body => {:data => data_processed}}
710
+ else
711
+ resp_out = {:code => login_info[:code], :result => login_info[:result]}
712
+ end
713
+
714
+ rescue
715
+ resp_out = {:code => 507, :result => "Unknown SDK error"}
716
+ end
717
+ mongo_client.audit_logger("get_available_types_2", remote_ip, input_params, resp_out, real_ip)
718
+ resp_out
719
+ end
720
+
721
+
722
+ #10 get info for device type
723
+ def get_info_data_type_2(type)
724
+
725
+ input_params = {:type => type}
726
+ output_answ = {}
727
+ mon_answer = {}
728
+ begin
729
+ if type.is_a? String
730
+ mon_answer = mongo_client.get_type_by_name(type)
731
+ else
732
+ mon_answer = mongo_client.get_type_by_id(type)
733
+ end
734
+
735
+ if mon_answer != {} && mon_answer != []
736
+ output_answ = {:code => 200, :result => "Request completed successfully", :body => {:data => {:info => mon_answer["info"],
737
+ :model => mon_answer["model"],
738
+ :type_id => mon_answer["type_id"]
739
+ }}}
740
+ else
741
+ output_answ = {:code => 505, :result => "Unknown SDK error"}
742
+ end
743
+ rescue
744
+ output_answ = {:code => 507, :result => "Unknown SDK error"}
745
+ end
746
+ mongo_client.audit_logger("get_info_data_type_2", remote_ip, input_params, output_answ, real_ip)
747
+ output_answ
748
+ end
749
+
750
+
751
+ #11 get info for profile
752
+ def get_info_data_profile_2(profile)
753
+
754
+ input_params = {:profile => profile}
755
+ output_answ = {}
756
+
757
+ mon_answer = {}
758
+
759
+ begin
760
+ if profile.is_a? String
761
+ mon_answer = mongo_client.get_profile_id_by_name(profile)
762
+ else
763
+ mon_answer = mongo_client.get_profile_name_by_id(profile)
764
+ end
765
+
766
+ if mon_answer != {} && mon_answer != []
767
+ output_answ = {:code => 200, :result => "Request completed successfully", :body => {:data => {:info => mon_answer["info"],
768
+ :profile => mon_answer["profile"],
769
+ :profile_id => mon_answer["profile_id"]
770
+ }}}
771
+ else
772
+ output_answ = {:code => 505, :result => "Unknown SDK error"}
773
+ end
774
+
775
+ rescue
776
+
777
+ output_answ = {:code => 507, :result => "Unknown SDK error"}
778
+ end
779
+
780
+ mongo_client.audit_logger("get_info_data_profile_2", remote_ip, input_params, output_answ, real_ip)
781
+ output_answ
782
+
783
+ end
784
+
785
+ end