imperituroard 1.0.4 → 1.1.0
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 +4 -4
- data/.idea/runConfigurations/version.xml +21 -0
- data/lib/imperituroard.rb +7 -0
- data/lib/imperituroard/projects/iot.rb +64 -40
- data/lib/imperituroard/projects/iot/hua_oceanconnect_adapter.rb +96 -19
- data/lib/imperituroard/projects/iot/internal_functions.rb +32 -0
- data/lib/imperituroard/projects/iot/mongoconnector.rb +22 -18
- data/lib/imperituroard/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dae0092e4f87b047adb62157ee51cb3e917bc3d7
|
4
|
+
data.tar.gz: be638036010d680252df866b5b09fb49bddd6628
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0e130dbe846d930dfe7da4a6290f76e4c1f6326e944ea4dbc693bafe90b9087ee4915e0e08dd83c346fb35c6a0ea68ce88ce5f690db27e47ab6b82e1ffaa3c6
|
7
|
+
data.tar.gz: f9c6ffd509148ae09d85fc4aac1439686612283d735fc020f3e45d76fd62e94d41b938d6a033fd93be6e2221612009b66d8a8da948e64fd32e0ee0c252baa93f
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<component name="ProjectRunConfigurationManager">
|
2
|
+
<configuration default="false" name="version" type="RubyRunConfigurationType" factoryName="Ruby">
|
3
|
+
<module name="imperituroard" />
|
4
|
+
<RUBY_RUN_CONFIG NAME="RUBY_ARGS" VALUE="-e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift)" />
|
5
|
+
<RUBY_RUN_CONFIG NAME="WORK DIR" VALUE="$MODULE_DIR$/lib/imperituroard" />
|
6
|
+
<RUBY_RUN_CONFIG NAME="SHOULD_USE_SDK" VALUE="false" />
|
7
|
+
<RUBY_RUN_CONFIG NAME="ALTERN_SDK_NAME" VALUE="" />
|
8
|
+
<RUBY_RUN_CONFIG NAME="myPassParentEnvs" VALUE="true" />
|
9
|
+
<envs />
|
10
|
+
<EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="true" />
|
11
|
+
<EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
|
12
|
+
<EXTENSION ID="RubyCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" track_test_folders="true" runner="rcov">
|
13
|
+
<COVERAGE_PATTERN ENABLED="true">
|
14
|
+
<PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
|
15
|
+
</COVERAGE_PATTERN>
|
16
|
+
</EXTENSION>
|
17
|
+
<RUBY_RUN_CONFIG NAME="SCRIPT_PATH" VALUE="$MODULE_DIR$/lib/imperituroard/version.rb" />
|
18
|
+
<RUBY_RUN_CONFIG NAME="SCRIPT_ARGS" VALUE="" />
|
19
|
+
<method />
|
20
|
+
</configuration>
|
21
|
+
</component>
|
data/lib/imperituroard.rb
CHANGED
@@ -33,6 +33,7 @@ require 'net/http'
|
|
33
33
|
require 'uri'
|
34
34
|
|
35
35
|
module Imperituroard
|
36
|
+
|
36
37
|
class Error < StandardError;
|
37
38
|
end
|
38
39
|
|
@@ -42,6 +43,7 @@ module Imperituroard
|
|
42
43
|
def hhh(jjj)
|
43
44
|
p jjj
|
44
45
|
end
|
46
|
+
|
45
47
|
# Your code goes here...
|
46
48
|
end
|
47
49
|
|
@@ -239,6 +241,11 @@ class Iot
|
|
239
241
|
iot_connector.get_available_types_2(login, real_ip, remote_ip)
|
240
242
|
end
|
241
243
|
|
244
|
+
#9-1 get available types for login and profile
|
245
|
+
def get_available_types2(login, profile, real_ip, remote_ip)
|
246
|
+
iot_connector.get_available_types2_2(login, profile, real_ip, remote_ip)
|
247
|
+
end
|
248
|
+
|
242
249
|
#10 get info for device type
|
243
250
|
def get_info_data_type(type, real_ip, remote_ip)
|
244
251
|
iot_connector.get_info_data_type_2(type, real_ip, remote_ip)
|
@@ -115,10 +115,9 @@ class IotFunctions_2
|
|
115
115
|
end
|
116
116
|
end
|
117
117
|
|
118
|
-
|
119
118
|
begin
|
120
119
|
added_on_iot_platf = []
|
121
|
-
if for_insert!=[]
|
120
|
+
if for_insert != []
|
122
121
|
##Logic for IOT Platform connection###
|
123
122
|
|
124
123
|
|
@@ -132,16 +131,25 @@ class IotFunctions_2
|
|
132
131
|
|
133
132
|
#########
|
134
133
|
|
134
|
+
if aaa.key?("type") && !aaa.key?("device_type")
|
135
|
+
aaa["device_type"] = aaa["type"]
|
136
|
+
aaa = internal_func.delete_key_hash(aaa, "type")
|
137
|
+
end
|
135
138
|
|
136
|
-
|
139
|
+
aaa = internal_func.hash_val_to_string(aaa)
|
137
140
|
|
141
|
+
if credentials[:code] == 200
|
138
142
|
|
139
143
|
begin
|
140
144
|
dev_name = aaa["imei"].to_s
|
141
145
|
|
142
146
|
#get {"model"=>"BGT_PPMC", "ManufacturerID"=>"unknown", "ManufacturerNAME"=>"unknown", "device_type"=>"unknown"}
|
143
147
|
#from database
|
144
|
-
model_data = mongo_client.
|
148
|
+
model_data = mongo_client.get_device_type_info_universal(aaa["device_type"])
|
149
|
+
profile_data = mongo_client.get_profile_universal(aaa["profile"])
|
150
|
+
p profile_data
|
151
|
+
p model_data
|
152
|
+
p "model_data"
|
145
153
|
resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials[:body][:app_id],
|
146
154
|
credentials[:body][:secret],
|
147
155
|
aaa["imei"],
|
@@ -160,7 +168,8 @@ class IotFunctions_2
|
|
160
168
|
s1 = aaa
|
161
169
|
s1[:huadata] = resss
|
162
170
|
s1[:created] = DateTime.now
|
163
|
-
s1[
|
171
|
+
s1["device_type"] = model_data[:body]["model"]
|
172
|
+
s1["profile"] = profile_data["profile_id"]
|
164
173
|
added_on_iot_platf.append(s1)
|
165
174
|
end
|
166
175
|
else
|
@@ -199,9 +208,7 @@ class IotFunctions_2
|
|
199
208
|
end
|
200
209
|
thr1.join
|
201
210
|
|
202
|
-
|
203
211
|
resp_out[:body][:tosoapgw] = internal_func.iot_create_dev_soapgw_answer(input_json, resp_out)
|
204
|
-
|
205
212
|
mongo_client.audit_logger("add_device_to_profile", remote_ip, input_json, resp_out, real_ip)
|
206
213
|
resp_out
|
207
214
|
end
|
@@ -221,16 +228,16 @@ class IotFunctions_2
|
|
221
228
|
resp_out = {}
|
222
229
|
begin
|
223
230
|
thr2 = Thread.new do
|
224
|
-
if add_functions_connector.check_input_2(login, imei_list)[:code]==200
|
231
|
+
if add_functions_connector.check_input_2(login, imei_list)[:code] == 200
|
225
232
|
|
226
233
|
for t in imei_list
|
227
234
|
prof_name1 = mongo_client.get_profile_name_from_imei(t)
|
228
|
-
if prof_name1[:code]==200
|
235
|
+
if prof_name1[:code] == 200
|
229
236
|
begin
|
230
237
|
permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])
|
231
238
|
p "permiss1"
|
232
239
|
p permiss1
|
233
|
-
if permiss1[:code]==200
|
240
|
+
if permiss1[:code] == 200
|
234
241
|
ime_list_approved.append(t)
|
235
242
|
else
|
236
243
|
ime_list_notapproved.append({:imei => t, :error => permiss1})
|
@@ -460,12 +467,12 @@ class IotFunctions_2
|
|
460
467
|
begin
|
461
468
|
thr4 = Thread.new do
|
462
469
|
|
463
|
-
if add_functions_connector.check_input_4(login, imei)[:code]==200
|
470
|
+
if add_functions_connector.check_input_4(login, imei)[:code] == 200
|
464
471
|
|
465
472
|
prof_name = mongo_client.get_profile_name_from_imei(imei)
|
466
|
-
if prof_name[:code]==200
|
473
|
+
if prof_name[:code] == 200
|
467
474
|
permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
|
468
|
-
if permiss[:code]==200
|
475
|
+
if permiss[:code] == 200
|
469
476
|
|
470
477
|
##Logic for IOT Platform connection###
|
471
478
|
|
@@ -479,17 +486,17 @@ class IotFunctions_2
|
|
479
486
|
|
480
487
|
resp = {}
|
481
488
|
|
482
|
-
if credentials[:code]==200
|
489
|
+
if credentials[:code] == 200
|
483
490
|
|
484
491
|
imei_data = mongo_client.get_imei_info_from_db([imei])
|
485
|
-
if imei_data[:body]!=[]
|
492
|
+
if imei_data[:body] != []
|
486
493
|
ans = {}
|
487
494
|
if imei_data[:body][0]["huadata"]["body"]["deviceId"] != nil
|
488
495
|
ans = hua_aceanconnect_connector.remove_one_device_from_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"])
|
489
496
|
else
|
490
497
|
ans = {:code => "204", :result => "Not processed by iot platform. deviceId not found in mongoDB"}
|
491
498
|
end
|
492
|
-
if ans[:code]=="204" or ans[:code]=="200"
|
499
|
+
if ans[:code] == "204" or ans[:code] == "200"
|
493
500
|
resp = mongo_client.device_remove_single_mongo(imei)
|
494
501
|
else
|
495
502
|
resp = {:code => 500, :result => "Unknown IOT platform error", :body => ans}
|
@@ -573,10 +580,8 @@ class IotFunctions_2
|
|
573
580
|
imei_data = mongo_client.get_imei_info_from_db([p[:imei]])
|
574
581
|
if imei_data[:body]!=[]
|
575
582
|
ans = hua_aceanconnect_connector.modify_location_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"], p[:address])
|
576
|
-
|
577
583
|
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")
|
578
584
|
end
|
579
|
-
|
580
585
|
end
|
581
586
|
|
582
587
|
#########end iot platform logic#######
|
@@ -651,7 +656,7 @@ class IotFunctions_2
|
|
651
656
|
if attr["profile"].is_a? Integer
|
652
657
|
p "Ok"
|
653
658
|
else
|
654
|
-
p new = mongo_client.
|
659
|
+
p new = mongo_client.get_profile_universal(attr["profile"])
|
655
660
|
attr["profile"] = new["profile_id"]
|
656
661
|
end
|
657
662
|
end
|
@@ -736,6 +741,7 @@ class IotFunctions_2
|
|
736
741
|
permit_profiles = login_info[:body]["permit_profiles"]
|
737
742
|
permit_types = login_info[:body]["permit_types"]
|
738
743
|
data_from_mongo = mongo_client.get_profile_list_by_id(permit_profiles)
|
744
|
+
p data_from_mongo
|
739
745
|
|
740
746
|
for ff in data_from_mongo
|
741
747
|
data_processed.append({:profile_id => ff["profile_id"],
|
@@ -840,33 +846,47 @@ class IotFunctions_2
|
|
840
846
|
data_processed = []
|
841
847
|
data_soapgw = []
|
842
848
|
login_info = mongo_client.get_login_inf2_select(login)
|
849
|
+
prof_data = mongo_client.get_profile_universal(profile)
|
843
850
|
if login_info[:code]==200
|
844
851
|
|
845
852
|
permit_profiles = login_info[:body]["permit_profiles"]
|
846
853
|
permit_types = login_info[:body]["permit_types"]
|
854
|
+
perm_tp_prof = prof_data["permit_types"]
|
855
|
+
|
856
|
+
if permit_profiles.include?(prof_data["profile_id"])
|
857
|
+
res_types_permitted = internal_func.compare_dict(permit_types, perm_tp_prof)
|
858
|
+
data_from_mongo = mongo_client.get_type_list_by_id(res_types_permitted)
|
859
|
+
|
860
|
+
for ff in data_from_mongo
|
861
|
+
data_processed.append({:type_id => ff["type_id"],
|
862
|
+
:description => ff["description"],
|
863
|
+
:note => ff["note"],
|
864
|
+
:form => ff["form"],
|
865
|
+
:ManufacturerID => ff["ManufacturerID"],
|
866
|
+
:ManufacturerNAME => ff["ManufacturerNAME"],
|
867
|
+
:device_type => ff["device_type"],
|
868
|
+
:model => ff["model"],
|
869
|
+
:info => ff["info"]
|
870
|
+
})
|
871
|
+
data_soapgw.append({:name => ff["model"], :form => ff["form"], :description => ff["description"], :type_id => ff["type_id"]})
|
872
|
+
end
|
847
873
|
|
848
|
-
|
874
|
+
tosoapgw = {:code => 200,
|
875
|
+
:result => "Request completed successfully",
|
876
|
+
:types => data_soapgw
|
877
|
+
}
|
849
878
|
|
850
|
-
|
851
|
-
|
852
|
-
|
853
|
-
|
854
|
-
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
:model => ff["model"],
|
859
|
-
:info => ff["info"]
|
860
|
-
})
|
861
|
-
data_soapgw.append({:name => ff["model"], :form => ff["form"], :description => ff["description"], :type_id => ff["type_id"]})
|
879
|
+
resp_out = {:code => 200, :result => "Request completed successfully", :body => {:data => data_processed, :tosoapgw => tosoapgw}}
|
880
|
+
|
881
|
+
else
|
882
|
+
tosoapgw = {:code => 700,
|
883
|
+
:result => "Profile not permitted",
|
884
|
+
:types => data_soapgw
|
885
|
+
}
|
886
|
+
resp_out = {:code => 700, :result => "Profile not permitted", :body => {:tosoapgw => tosoapgw}}
|
862
887
|
end
|
863
888
|
|
864
|
-
tosoapgw = {:code => 200,
|
865
|
-
:result => "Request completed successfully",
|
866
|
-
:types => data_soapgw
|
867
|
-
}
|
868
889
|
|
869
|
-
resp_out = {:code => 200, :result => "Request completed successfully", :body => {:data => data_processed, :tosoapgw => tosoapgw}}
|
870
890
|
else
|
871
891
|
tosoapgw = {:code => login_info[:code],
|
872
892
|
:result => login_info[:result],
|
@@ -930,6 +950,8 @@ class IotFunctions_2
|
|
930
950
|
mon_answer = mongo_client.get_profile_name_by_id(profile)
|
931
951
|
end
|
932
952
|
|
953
|
+
p mon_answer
|
954
|
+
|
933
955
|
if mon_answer != {} && mon_answer != []
|
934
956
|
output_answ = {:code => 200, :result => "Request completed successfully", :body => {:data => {:info => mon_answer["info"],
|
935
957
|
:profile => mon_answer["profile"],
|
@@ -943,7 +965,6 @@ class IotFunctions_2
|
|
943
965
|
end
|
944
966
|
mongo_client.audit_logger("get_info_data_profile_2", remote_ip, input_params, output_answ, real_ip)
|
945
967
|
output_answ
|
946
|
-
|
947
968
|
end
|
948
969
|
|
949
970
|
|
@@ -1002,7 +1023,7 @@ class IotFunctions_2
|
|
1002
1023
|
cur_comp1 = mongo_client.compare_profiles(prof_name1[:body]["profile_id"], prof_new_id)
|
1003
1024
|
p cur_comp1
|
1004
1025
|
p "cur_comp1"
|
1005
|
-
cur_comp2 = mongo_client.compare_device_types(prof_name1[:imei_info][:body][0]["
|
1026
|
+
cur_comp2 = mongo_client.compare_device_types(prof_name1[:imei_info][:body][0]["device_type"], type_new_pr)
|
1006
1027
|
|
1007
1028
|
|
1008
1029
|
p cur_comp2
|
@@ -1049,11 +1070,12 @@ class IotFunctions_2
|
|
1049
1070
|
if resss[:body].key?("error_code") && resss[:body]["error_code"] != 200
|
1050
1071
|
not_processed_list.append({:imei => curr_dev["imei"], :error => resss})
|
1051
1072
|
else
|
1073
|
+
p resss
|
1052
1074
|
new_id_iot = resss[:body]
|
1053
1075
|
new_profile_id = prof_new_id
|
1054
1076
|
now_date = DateTime.now
|
1055
1077
|
#finished success. update database
|
1056
|
-
attribute = {profile: new_profile_id,
|
1078
|
+
attribute = {profile: new_profile_id, device_type: model_data[:body]["model"], huadata: resss, updated: now_date}
|
1057
1079
|
answ_mongo = mongo_client.modify_attr_mongo_universal(curr_dev["imei"].to_i, attribute)
|
1058
1080
|
if answ_mongo[:code] != 200
|
1059
1081
|
not_processed_list.append({:imei => curr_dev["imei"], :error => "Critical error. Mongo not updated", :mongo_err => answ_mongo})
|
@@ -1067,6 +1089,8 @@ class IotFunctions_2
|
|
1067
1089
|
rescue
|
1068
1090
|
not_processed_list.append({:imei => curr_dev["imei"], :error => "Unknown error with insertion imei on IOT platform"})
|
1069
1091
|
end
|
1092
|
+
else
|
1093
|
+
not_processed_list.append({:imei => curr_dev["imei"], :error => "Something wrong with IOT platform"})
|
1070
1094
|
end
|
1071
1095
|
else
|
1072
1096
|
not_processed_list.append({:imei => curr_dev["imei"], :error => "Not processed by iot platform. deviceId not found in mongoDB"})
|
@@ -54,6 +54,9 @@ class HuaIot
|
|
54
54
|
def get_token(app_id, secret)
|
55
55
|
internal_func.printer_texter("get_token: start. Step1, iput: app_id: #{app_id.to_s}, secret: #{secret.to_s}", "debug")
|
56
56
|
out_resp = {}
|
57
|
+
fff = {}
|
58
|
+
data = {}
|
59
|
+
url_string = ""
|
57
60
|
begin
|
58
61
|
path = "/iocm/app/sec/v1.1.0/login"
|
59
62
|
url_string = "https://" + platformip + ":" + platformport + path
|
@@ -73,15 +76,19 @@ class HuaIot
|
|
73
76
|
request.content_type = 'application/x-www-form-urlencoded'
|
74
77
|
request.body = URI.encode_www_form(data)
|
75
78
|
res = https.request(request)
|
79
|
+
p res.code
|
80
|
+
p res.message
|
81
|
+
p res.body.to_s
|
76
82
|
out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
77
83
|
fff = {:func => "get_token",
|
78
84
|
:iot_fun => "",
|
79
|
-
:req_header => {:content_type => 'application/x-www-form-urlencoded'
|
85
|
+
:req_header => {:content_type => 'application/x-www-form-urlencoded',
|
86
|
+
:platform => "Huawei oceanconnect"
|
80
87
|
}}
|
81
|
-
client_iot_mongo.audit_iot_logger(fff, url_string, data, out_resp)
|
82
88
|
rescue
|
83
89
|
out_resp = {:code => 500, :message => "failed get token"}
|
84
90
|
end
|
91
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, data, out_resp)
|
85
92
|
jjj = {:procedure => "get_token", :answ => out_resp}
|
86
93
|
internal_func.printer_texter(jjj, "debug")
|
87
94
|
out_resp
|
@@ -92,6 +99,9 @@ class HuaIot
|
|
92
99
|
|
93
100
|
internal_func.printer_texter("token_logout Step1 token: #{token}", "debug")
|
94
101
|
out_resp = {}
|
102
|
+
fff = {}
|
103
|
+
data = {}
|
104
|
+
url_string = ""
|
95
105
|
begin
|
96
106
|
path = "/iocm/app/sec/v1.1.0/logout"
|
97
107
|
url_string = "https://" + platformip + ":" + platformport + path
|
@@ -112,12 +122,17 @@ class HuaIot
|
|
112
122
|
res = https.request(request)
|
113
123
|
out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
114
124
|
fff = {:func => "token_logout",
|
115
|
-
:iot_fun => "logout"
|
125
|
+
:iot_fun => "logout",
|
126
|
+
:platform => "Huawei oceanconnect"
|
116
127
|
}
|
117
|
-
|
128
|
+
p res.code
|
129
|
+
p res.message
|
130
|
+
p res.body.to_s
|
131
|
+
|
118
132
|
rescue
|
119
133
|
out_resp = {:code => 500, :message => "failed logout token"}
|
120
134
|
end
|
135
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, data, out_resp)
|
121
136
|
jjj = {:procedure => "token_logout", :answ => out_resp}
|
122
137
|
internal_func.printer_texter(jjj, "debug")
|
123
138
|
out_resp
|
@@ -125,6 +140,7 @@ class HuaIot
|
|
125
140
|
|
126
141
|
#Registering a Directly Connected Device (Verification Code Mode) (V2)
|
127
142
|
def dev_register_verif_code_mode(app_id, secret, node_id)
|
143
|
+
out_resp = {}
|
128
144
|
token = get_token(app_id, secret)[:body]["accessToken"]
|
129
145
|
path = "/iocm/app/reg/v1.1.0/deviceCredentials?appId=" + app_id
|
130
146
|
url_string = "https://" + platformip + ":" + platformport + path
|
@@ -138,9 +154,17 @@ class HuaIot
|
|
138
154
|
request.content_type = 'application/json'
|
139
155
|
request['Authorization'] = 'Bearer ' + token
|
140
156
|
request['app_key'] = app_id
|
141
|
-
|
157
|
+
data = {nodeId: node_id}
|
158
|
+
request.body = data.to_json
|
142
159
|
res = https.request(request)
|
143
|
-
{:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
160
|
+
out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
161
|
+
fff = {:func => "dev_register_verif_code_mode",
|
162
|
+
:iot_fun => "Registering a Directly Connected Device (Verification Code Mode) (V2)",
|
163
|
+
:req_header => {:content_type => 'application/json',
|
164
|
+
:platform => "Huawei oceanconnect"
|
165
|
+
}}
|
166
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, data, out_resp)
|
167
|
+
out_resp
|
144
168
|
end
|
145
169
|
|
146
170
|
#2.2.4 Registering a Directly Connected Device (Password Mode) (V2)
|
@@ -176,7 +200,8 @@ class HuaIot
|
|
176
200
|
:iot_fun => "2.2.4",
|
177
201
|
:req_header => {:authorization => 'Bearer ' + token,
|
178
202
|
:content_type => 'application/json',
|
179
|
-
:app_key => app_id
|
203
|
+
:app_key => app_id,
|
204
|
+
:platform => "Huawei oceanconnect"
|
180
205
|
}}
|
181
206
|
client_iot_mongo.audit_iot_logger(fff, url_string, data_out, out_resp)
|
182
207
|
out_resp
|
@@ -199,13 +224,21 @@ class HuaIot
|
|
199
224
|
request.content_type = 'application/json'
|
200
225
|
request['Authorization'] = 'Bearer ' + token
|
201
226
|
request['app_key'] = app_id
|
202
|
-
|
227
|
+
data = {deviceInfo: attr_list}
|
228
|
+
data_out = data.to_json
|
203
229
|
internal_func.printer_texter({:procedure => "dev_register_passw_code_mode2", :data => {:body => data_out, :url => url_string}}, "debug")
|
204
230
|
request.body = data_out
|
205
231
|
res = https.request(request)
|
206
232
|
p res.body.to_s
|
207
233
|
out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
208
|
-
|
234
|
+
fff = {:func => "dev_reg_passw_code_mode2_2",
|
235
|
+
:iot_fun => "2.2.4",
|
236
|
+
:req_header => {:content_type => 'application/json',
|
237
|
+
:authorization => 'Bearer ' + token,
|
238
|
+
:app_key => app_id,
|
239
|
+
:platform => "Huawei oceanconnect"
|
240
|
+
}}
|
241
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, data, out_resp)
|
209
242
|
out_resp
|
210
243
|
end
|
211
244
|
|
@@ -237,7 +270,8 @@ class HuaIot
|
|
237
270
|
:iot_fun => "2.2.12",
|
238
271
|
:req_header => {:authorization => 'Bearer ' + token,
|
239
272
|
:content_type => 'application/json',
|
240
|
-
:app_key => app_id
|
273
|
+
:app_key => app_id,
|
274
|
+
:platform => "Huawei oceanconnect"
|
241
275
|
}}
|
242
276
|
client_iot_mongo.audit_iot_logger(fff, url_string, "Delete", out_resp)
|
243
277
|
rescue
|
@@ -274,6 +308,7 @@ class HuaIot
|
|
274
308
|
|
275
309
|
#2.2.14 Querying Device Activation Status
|
276
310
|
def querying_device_activ_status(app_id, secret, device_id)
|
311
|
+
output_ans = {}
|
277
312
|
token = get_token(app_id, secret)[:body]["accessToken"]
|
278
313
|
path = "/iocm/app/reg/v1.1.0/devices/" + device_id + "?app_Id=" + app_id
|
279
314
|
url_string = "https://" + platformip + ":" + platformport + path
|
@@ -288,12 +323,22 @@ class HuaIot
|
|
288
323
|
request['Authorization'] = 'Bearer ' + token
|
289
324
|
request['app_key'] = app_id
|
290
325
|
res = https.request(request)
|
291
|
-
{:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
326
|
+
output_ans = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
327
|
+
fff = {:func => "querying_device_activ_status",
|
328
|
+
:iot_fun => "2.2.14",
|
329
|
+
:req_header => {:content_type => 'application/json',
|
330
|
+
:authorization => 'Bearer ' + token,
|
331
|
+
:app_key => app_id,
|
332
|
+
:platform => "Huawei oceanconnect"
|
333
|
+
}}
|
334
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, data, output_ans)
|
335
|
+
output_ans
|
292
336
|
end
|
293
337
|
|
294
338
|
|
295
339
|
#2.9.1 Querying Information About a Device
|
296
340
|
def querying_device_info(app_id, secret, device_id)
|
341
|
+
out_resp = {}
|
297
342
|
token = get_token(app_id, secret)[:body]["accessToken"]
|
298
343
|
path = "/iocm/app/dm/v1.1.0/devices/" + device_id + "?app_Id=" + app_id
|
299
344
|
url_string = "https://" + platformip + ":" + platformport + path
|
@@ -308,7 +353,16 @@ class HuaIot
|
|
308
353
|
request['Authorization'] = 'Bearer ' + token
|
309
354
|
request['app_key'] = app_id
|
310
355
|
res = https.request(request)
|
311
|
-
{:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
356
|
+
out_resp = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
357
|
+
fff = {:func => "querying_device_info",
|
358
|
+
:iot_fun => "2.9.1",
|
359
|
+
:req_header => {:authorization => 'Bearer ' + token,
|
360
|
+
:content_type => 'application/json',
|
361
|
+
:app_key => app_id,
|
362
|
+
:platform => "Huawei oceanconnect"
|
363
|
+
}}
|
364
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, "Get", out_resp)
|
365
|
+
out_resp
|
312
366
|
end
|
313
367
|
|
314
368
|
#2.9.6 Querying Directly Connected Devices and Their Mounted Devices in Batches
|
@@ -335,7 +389,8 @@ class HuaIot
|
|
335
389
|
:iot_fun => "2.9.6",
|
336
390
|
:req_header => {:authorization => 'Bearer ' + token,
|
337
391
|
:content_type => 'application/json',
|
338
|
-
:app_key => app_id
|
392
|
+
:app_key => app_id,
|
393
|
+
:platform => "Huawei oceanconnect"
|
339
394
|
}}
|
340
395
|
client_iot_mongo.audit_iot_logger(fff, url_string, req_body, output_str)
|
341
396
|
output_str
|
@@ -344,6 +399,7 @@ class HuaIot
|
|
344
399
|
|
345
400
|
#2.9.19 Querying the Complete Device Type List of All Device Capabilities
|
346
401
|
def querying_device_type_list(app_id, secret)
|
402
|
+
output_ans = {}
|
347
403
|
token = get_token(app_id, secret)[:body]["accessToken"]
|
348
404
|
path = "/iocm/app/profile/v1.1.0/allDeviceTypes"
|
349
405
|
url_string = "https://" + platformip + ":" + platformport + path
|
@@ -358,13 +414,24 @@ class HuaIot
|
|
358
414
|
request['Authorization'] = 'Bearer ' + token
|
359
415
|
request['app_key'] = app_id
|
360
416
|
res = https.request(request)
|
361
|
-
{:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
417
|
+
output_ans = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
418
|
+
|
419
|
+
fff = {:func => "querying_device_type_list",
|
420
|
+
:iot_fun => "2.9.19",
|
421
|
+
:req_header => {:content_type => 'application/json',
|
422
|
+
:authorization => 'Bearer ' + token,
|
423
|
+
:app_key => app_id,
|
424
|
+
:platform => "Huawei oceanconnect"
|
425
|
+
}}
|
426
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, "Get", output_ans)
|
427
|
+
output_ans
|
428
|
+
|
362
429
|
end
|
363
430
|
|
364
431
|
|
365
432
|
#2.9.6 Querying Directly Connected Devices and Their Mounted Devices in Batches
|
366
433
|
def quer_dev_direct_conn_batches(app_id, dev_list, token)
|
367
|
-
|
434
|
+
output_ans = {}
|
368
435
|
path = "/iocm/app/dm/v1.1.0/queryDevicesByIds"
|
369
436
|
url_string = "https://" + platformip + ":" + platformport + path
|
370
437
|
p url_string
|
@@ -378,10 +445,19 @@ class HuaIot
|
|
378
445
|
request.content_type = 'application/json'
|
379
446
|
request['Authorization'] = 'Bearer ' + token
|
380
447
|
request['app_key'] = app_id
|
381
|
-
|
448
|
+
data = {deviceIds: dev_list}
|
449
|
+
request.body = data.to_json
|
382
450
|
res = https.request(request)
|
383
|
-
{:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
384
|
-
|
451
|
+
output_ans = {:code => res.code, :message => res.message, :body => JSON.parse(res.body.to_s)}
|
452
|
+
fff = {:func => "quer_dev_direct_conn_batches",
|
453
|
+
:iot_fun => "2.9.6",
|
454
|
+
:req_header => {:content_type => 'application/json',
|
455
|
+
:authorization => 'Bearer ' + token,
|
456
|
+
:app_key => app_id,
|
457
|
+
:platform => "Huawei oceanconnect"
|
458
|
+
}}
|
459
|
+
client_iot_mongo.audit_iot_logger(fff, url_string, data, output_ans)
|
460
|
+
output_ans
|
385
461
|
end
|
386
462
|
|
387
463
|
|
@@ -417,7 +493,8 @@ class HuaIot
|
|
417
493
|
:iot_fun => "2.2.11",
|
418
494
|
:req_header => {:authorization => 'Bearer ' + token,
|
419
495
|
:content_type => 'application/json',
|
420
|
-
:app_key => app_id
|
496
|
+
:app_key => app_id,
|
497
|
+
:platform => "Huawei oceanconnect"
|
421
498
|
}}
|
422
499
|
client_iot_mongo.audit_iot_logger(fff, url_string, req_b, out_resp)
|
423
500
|
rescue
|
@@ -155,6 +155,38 @@ class InternalFunc
|
|
155
155
|
answer
|
156
156
|
end
|
157
157
|
|
158
|
+
#compare dictionaries
|
159
|
+
def compare_dict(dict1, dict2)
|
160
|
+
v1 = dict1 - dict2
|
161
|
+
v2 = dict2 - dict1
|
162
|
+
v3 = dict2 + dict1
|
163
|
+
v3.uniq - v2.uniq - v1.uniq
|
164
|
+
end
|
165
|
+
|
166
|
+
|
167
|
+
#delete one key from hash
|
168
|
+
def delete_key_hash(hash_f, delete_key)
|
169
|
+
res = {}
|
170
|
+
hash_f.each do |ggg|
|
171
|
+
if ggg[0].to_s != delete_key.to_s
|
172
|
+
res[ggg[0]] = ggg[1]
|
173
|
+
end
|
174
|
+
end
|
175
|
+
res
|
176
|
+
end
|
177
|
+
|
178
|
+
|
179
|
+
#process hash array. Transform keys to string keys
|
180
|
+
def hash_val_to_string(hash_full)
|
181
|
+
resp = {}
|
182
|
+
hash_full.each do |hsh|
|
183
|
+
resp[hsh[0].to_s] = hsh[1]
|
184
|
+
end
|
185
|
+
resp
|
186
|
+
end
|
187
|
+
|
188
|
+
|
189
|
+
|
158
190
|
def test()
|
159
191
|
p "eeeeeeeeeeeeeeeeeeeeeeee"
|
160
192
|
end
|
@@ -194,7 +194,7 @@ class MongoIot
|
|
194
194
|
begin
|
195
195
|
result_ps = []
|
196
196
|
collection = client[:device_profiles]
|
197
|
-
collection.find({"profile_id" => profile_id}).each {|row|
|
197
|
+
collection.find({"profile_id" => profile_id.to_i}).each {|row|
|
198
198
|
result_ps.append(row)
|
199
199
|
}
|
200
200
|
result_ps[0]
|
@@ -238,7 +238,7 @@ class MongoIot
|
|
238
238
|
begin
|
239
239
|
result_ps = []
|
240
240
|
collection = client[:device_types]
|
241
|
-
collection.find({"type_id" => type_id}).each {|row|
|
241
|
+
collection.find({"type_id" => type_id.to_i}).each {|row|
|
242
242
|
result_ps.append(row)
|
243
243
|
}
|
244
244
|
result_ps[0]
|
@@ -260,19 +260,20 @@ class MongoIot
|
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
263
|
+
#universal procedure. might be profile id or name
|
263
264
|
def check_login_profile_permiss(login, profile)
|
264
265
|
out_resp = {}
|
265
266
|
get_login_info = get_profiles_by_login(login)
|
266
|
-
if get_login_info[:code]==200
|
267
|
-
dst_profile =
|
268
|
-
access=1
|
269
|
-
if get_login_info[:body]!=[]
|
270
|
-
if dst_profile!=[]
|
267
|
+
if get_login_info[:code] == 200
|
268
|
+
dst_profile = get_profile_universal(profile)
|
269
|
+
access = 1
|
270
|
+
if get_login_info[:body] != []
|
271
|
+
if dst_profile != []
|
271
272
|
for j in get_login_info[:body]
|
272
|
-
if j["profile_id"].to_i==dst_profile["profile_id"].to_i
|
273
|
-
access=0
|
273
|
+
if j["profile_id"].to_i == dst_profile["profile_id"].to_i
|
274
|
+
access = 0
|
274
275
|
end
|
275
|
-
if access==0
|
276
|
+
if access == 0
|
276
277
|
out_resp = {:code => 200, :result => "check_login_profile_permiss: Permission granted"}
|
277
278
|
else
|
278
279
|
out_resp = {:code => 400, :result => "check_login_profile_permiss: Access denied. This incident will be reported."}
|
@@ -292,13 +293,15 @@ class MongoIot
|
|
292
293
|
end
|
293
294
|
|
294
295
|
|
296
|
+
#universal procedure. You can use profile id or profile name as profile_id (string or int)
|
295
297
|
def check_login_prof_perm_id_one(login, profile_id)
|
296
298
|
out_resp = {}
|
297
299
|
get_login_info = get_profiles_by_login(login)
|
300
|
+
profile_data = self.get_profile_universal(profile_id)
|
298
301
|
access=1
|
299
302
|
if get_login_info[:body]!=[]
|
300
303
|
for j in get_login_info[:body]
|
301
|
-
if j["profile_id"].to_i==profile_id
|
304
|
+
if j["profile_id"].to_i==profile_data["profile_id"]
|
302
305
|
access=0
|
303
306
|
end
|
304
307
|
if access==0
|
@@ -340,7 +343,6 @@ class MongoIot
|
|
340
343
|
description: "test imei",
|
341
344
|
note: "second description",
|
342
345
|
profile: 0,
|
343
|
-
type: 0,
|
344
346
|
device_type: 0,
|
345
347
|
address: "unknown"
|
346
348
|
}
|
@@ -364,7 +366,6 @@ class MongoIot
|
|
364
366
|
description: "test imei",
|
365
367
|
note: "second description",
|
366
368
|
profile: 0,
|
367
|
-
type: 0,
|
368
369
|
device_type: 0,
|
369
370
|
address: "unknown"
|
370
371
|
}
|
@@ -503,6 +504,7 @@ class MongoIot
|
|
503
504
|
|
504
505
|
|
505
506
|
#function for get iot platform credentials from profile
|
507
|
+
#universal procedure. use profile or profile id
|
506
508
|
def get_iot_oceanconn_credent_2(profile)
|
507
509
|
out_resp = {}
|
508
510
|
begin
|
@@ -538,7 +540,7 @@ class MongoIot
|
|
538
540
|
result_ps.append(row)
|
539
541
|
}
|
540
542
|
dattaa = result_ps[0]
|
541
|
-
if dattaa!=nil
|
543
|
+
if dattaa != nil
|
542
544
|
out_resp = {:code => 200, :result => "get_device_type_info_by_model: Request completed successfully", :body => dattaa}
|
543
545
|
else
|
544
546
|
out_resp = {:code => 404, :result => "get_device_type_info_by_model: Device info not found", :body => {"model" => device_model, "ManufacturerID" => "unknown", "ManufacturerNAME" => "unknown", "device_type" => "unknown"}}
|
@@ -550,6 +552,7 @@ class MongoIot
|
|
550
552
|
out_resp
|
551
553
|
end
|
552
554
|
|
555
|
+
#universal procedure. Use id or name
|
553
556
|
def get_device_type_info_universal(device_model)
|
554
557
|
out_resp = {}
|
555
558
|
begin
|
@@ -563,9 +566,9 @@ class MongoIot
|
|
563
566
|
}
|
564
567
|
dattaa = result_ps[0]
|
565
568
|
if dattaa!=nil
|
566
|
-
out_resp = {:code => 200, :result => "
|
569
|
+
out_resp = {:code => 200, :result => "get_device_type_info_universal: Request completed successfully", :body => dattaa}
|
567
570
|
else
|
568
|
-
out_resp = {:code => 404, :result => "
|
571
|
+
out_resp = {:code => 404, :result => "get_device_type_info_universal: Device info not found", :body => {"model" => device_model, "ManufacturerID" => "unknown", "ManufacturerNAME" => "unknown", "device_type" => "unknown"}}
|
569
572
|
end
|
570
573
|
else
|
571
574
|
result_ps2 = []
|
@@ -575,9 +578,9 @@ class MongoIot
|
|
575
578
|
}
|
576
579
|
dattaa = result_ps2[0]
|
577
580
|
if dattaa!=nil
|
578
|
-
out_resp = {:code => 200, :result => "
|
581
|
+
out_resp = {:code => 200, :result => "get_device_type_info_universal: Request completed successfully", :body => dattaa}
|
579
582
|
else
|
580
|
-
out_resp = {:code => 404, :result => "
|
583
|
+
out_resp = {:code => 404, :result => "get_device_type_info_universal: Device info not found", :body => {"model" => device_model, "ManufacturerID" => "unknown", "ManufacturerNAME" => "unknown", "device_type" => "unknown"}}
|
581
584
|
end
|
582
585
|
end
|
583
586
|
|
@@ -681,6 +684,7 @@ class MongoIot
|
|
681
684
|
end
|
682
685
|
|
683
686
|
|
687
|
+
#universal procedure. put there profile name or id in string or int
|
684
688
|
def get_profile_universal(profile)
|
685
689
|
inn = internal_func.if_digit_or_string(profile)
|
686
690
|
out = {}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: imperituroard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dzmitry Buynovskiy
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-06-
|
11
|
+
date: 2020-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -187,6 +187,7 @@ extra_rdoc_files: []
|
|
187
187
|
files:
|
188
188
|
- ".gitignore"
|
189
189
|
- ".idea/runConfigurations/hua_oceanconnect_adapter.xml"
|
190
|
+
- ".idea/runConfigurations/version.xml"
|
190
191
|
- ".ruby-gemset"
|
191
192
|
- ".ruby-version"
|
192
193
|
- ".travis.yml"
|