imperituroard 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/imperituroard/.DS_Store +0 -0
- data/lib/imperituroard/projects/iot/add_functions.rb +23 -2
- data/lib/imperituroard/projects/iot/internal_functions.rb +16 -1
- data/lib/imperituroard/projects/iot/mongoconnector.rb +33 -37
- data/lib/imperituroard/version.rb +1 -1
- data/lib/imperituroard.rb +340 -283
- 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: 1ad44807fb4cff12695580d243f54083f75abda4
|
4
|
+
data.tar.gz: d075e7afb11370fe50d8837282016313da1713df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b5a77c1263b5f9058143127c5daa69cf93c2c83c38c8d9c5ad5ef3d2f7bb8ea6ed12cb2e01651c5531068de6519f6fa775a8486ea6dbef4806534062576aa8aa
|
7
|
+
data.tar.gz: 6d8fcb8c02ece03e5e73ae3564fe81874e9da0f322622aa2a8aef7776b2d6800f964314b1a9e1ecd381e73934e8535b6b377c1f2d43ed7e970c1480b08ab6b5a
|
Binary file
|
@@ -10,7 +10,6 @@ class AdditionalFunc
|
|
10
10
|
def initialize(telegram_api_url, telegram_chat_id)
|
11
11
|
@telegram_api_url = telegram_api_url
|
12
12
|
@telegram_chat_id = telegram_chat_id
|
13
|
-
|
14
13
|
end
|
15
14
|
|
16
15
|
#procedure for send log to telegram chat
|
@@ -33,7 +32,6 @@ class AdditionalFunc
|
|
33
32
|
end
|
34
33
|
end
|
35
34
|
|
36
|
-
|
37
35
|
def answ_dev_query_format_process(dev_list)
|
38
36
|
dataaa_ok = []
|
39
37
|
dataaa_failed = []
|
@@ -115,5 +113,28 @@ class AdditionalFunc
|
|
115
113
|
|
116
114
|
end
|
117
115
|
|
116
|
+
def check_input_1(login, imei_list)
|
117
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
118
|
+
end
|
119
|
+
|
120
|
+
def check_input_2(login, imei_list)
|
121
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
122
|
+
end
|
123
|
+
|
124
|
+
def check_input_3(login, imei_list)
|
125
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
126
|
+
end
|
127
|
+
|
128
|
+
def check_input_4(login, imei_list)
|
129
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
130
|
+
end
|
131
|
+
|
132
|
+
def check_input_5(login, imei_list)
|
133
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
134
|
+
end
|
135
|
+
|
136
|
+
def check_input_6(login, imei_list)
|
137
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
138
|
+
end
|
118
139
|
|
119
140
|
end
|
@@ -4,9 +4,24 @@ require 'date'
|
|
4
4
|
|
5
5
|
class InternalFunc
|
6
6
|
|
7
|
+
def datetimenow()
|
8
|
+
d_curr = DateTime.now
|
9
|
+
time_zone = 'Europe/Minsk'
|
10
|
+
DateTime.new
|
11
|
+
.in_time_zone(time_zone)
|
12
|
+
.change(year: d_curr.year, month: d_curr.month, day: d_curr.day, hour: d_curr.hour, min: d_curr.min, sec: d_curr.sec)
|
13
|
+
end
|
14
|
+
|
15
|
+
def check_pass_format(passw)
|
16
|
+
if passw!=nil && passw!=""
|
17
|
+
{:code=>200, :result=>"Request completed successfully", :body=>"Data checked"}
|
18
|
+
else
|
19
|
+
{:code=>500, :result=>"Request completed", :body=>"invalid password"}
|
20
|
+
end
|
21
|
+
end
|
7
22
|
|
8
23
|
def printer_texter(text, log_level)
|
9
|
-
mess = {:datetime =>
|
24
|
+
mess = {:datetime => datetimenow, :sdk=> "imperituroard", :sdk_version=> "0.3.3", :message => text}
|
10
25
|
p mess
|
11
26
|
end
|
12
27
|
|
@@ -23,7 +23,7 @@ class MongoIot
|
|
23
23
|
def audit_logger(proc_name, src_ip, input_json, output_json, real_ip)
|
24
24
|
out_resp = {}
|
25
25
|
begin
|
26
|
-
current =
|
26
|
+
current = internal_func.datetimenow
|
27
27
|
collection = client[:audit]
|
28
28
|
doc = {
|
29
29
|
:proc_name => proc_name,
|
@@ -67,7 +67,6 @@ class MongoIot
|
|
67
67
|
else
|
68
68
|
out_resp = {:code => 404, :result => "get_profiles_by_login: Access denied. Incorrect login"}
|
69
69
|
end
|
70
|
-
|
71
70
|
rescue
|
72
71
|
out_resp = {:code => 507, :result => "get_profiles_by_login: Unknown SDK error"}
|
73
72
|
end
|
@@ -75,6 +74,38 @@ class MongoIot
|
|
75
74
|
out_resp
|
76
75
|
end
|
77
76
|
|
77
|
+
|
78
|
+
def get_login_info(login)
|
79
|
+
out_resp = {}
|
80
|
+
begin
|
81
|
+
login_profiles = []
|
82
|
+
req2 = []
|
83
|
+
result_ps = []
|
84
|
+
collection = client[:users]
|
85
|
+
collection2 = client[:device_profiles]
|
86
|
+
collection.find({:login => login}).each {|row|
|
87
|
+
login_profiles = row
|
88
|
+
}
|
89
|
+
p "login_profiles"
|
90
|
+
p login_profiles
|
91
|
+
if login_profiles != [] && login_profiles["login"] != nil && login_profiles["login"] != ""
|
92
|
+
passw_check = internal_func.check_pass_format(login_profiles["password"])
|
93
|
+
if passw_check[:code]==200
|
94
|
+
out_resp = {:code => 200, :result => "get_login_info: Request completed successfully", :body => login_profiles}
|
95
|
+
else
|
96
|
+
out_resp = {:code => 405, :result => "get_login_info: incorrect password"}
|
97
|
+
end
|
98
|
+
else
|
99
|
+
out_resp = {:code => 404, :result => "get_login_info: login not found in database"}
|
100
|
+
end
|
101
|
+
rescue
|
102
|
+
out_resp = {:code => 507, :result => "get_login_info: Unknown SDK error"}
|
103
|
+
end
|
104
|
+
p out_resp
|
105
|
+
internal_func.printer_texter(out_resp, "debug")
|
106
|
+
out_resp
|
107
|
+
end
|
108
|
+
|
78
109
|
def get_imei_info_from_db(imeilist)
|
79
110
|
out_resp = {}
|
80
111
|
p imeilist
|
@@ -125,24 +156,13 @@ class MongoIot
|
|
125
156
|
|
126
157
|
def check_login_profile_permiss(login, profile)
|
127
158
|
out_resp = {}
|
128
|
-
p "profile"
|
129
|
-
p profile
|
130
159
|
get_login_info = get_profiles_by_login(login)
|
131
|
-
p "get_login_info"
|
132
|
-
p get_login_info
|
133
|
-
|
134
160
|
if get_login_info[:code]==200
|
135
|
-
|
136
|
-
|
137
161
|
dst_profile = get_profile_id_by_name(profile)
|
138
|
-
p "dst_profile"
|
139
|
-
p dst_profile
|
140
162
|
access=1
|
141
163
|
if get_login_info[:body]!=[]
|
142
164
|
if dst_profile!=[]
|
143
|
-
p "sgsgsd"
|
144
165
|
for j in get_login_info[:body]
|
145
|
-
p j
|
146
166
|
if j["profile_id"].to_i==dst_profile["profile_id"].to_i
|
147
167
|
access=0
|
148
168
|
end
|
@@ -168,16 +188,10 @@ class MongoIot
|
|
168
188
|
|
169
189
|
def check_login_prof_perm_id_one(login, profile_id)
|
170
190
|
out_resp = {}
|
171
|
-
p "profile"
|
172
|
-
p profile_id
|
173
191
|
get_login_info = get_profiles_by_login(login)
|
174
|
-
p "get_login_info"
|
175
|
-
p get_login_info
|
176
192
|
access=1
|
177
193
|
if get_login_info[:body]!=[]
|
178
|
-
p "sgsgsd"
|
179
194
|
for j in get_login_info[:body]
|
180
|
-
p j
|
181
195
|
if j["profile_id"].to_i==profile_id.to_i
|
182
196
|
access=0
|
183
197
|
end
|
@@ -198,19 +212,10 @@ class MongoIot
|
|
198
212
|
out_resp = {}
|
199
213
|
res_exists = []
|
200
214
|
imei_list_res = get_imei_info_from_db(imei_list)
|
201
|
-
p imei_list_res
|
202
|
-
p "imei_list"
|
203
215
|
for k in imei_list_res[:body]
|
204
|
-
p k
|
205
216
|
res_exists.append(k["imei"])
|
206
217
|
end
|
207
|
-
p "aaaa"
|
208
|
-
p imei_list
|
209
|
-
p res_exists
|
210
218
|
not_ex = imei_list - res_exists
|
211
|
-
p "not_ex"
|
212
|
-
p not_ex
|
213
|
-
p res_exists
|
214
219
|
out_resp = {:code => 200, :result => "check_imei_exists: Request completed successfully",
|
215
220
|
:body => {:exists => res_exists, :not_exists => not_ex}}
|
216
221
|
internal_func.printer_texter(out_resp, "debug")
|
@@ -221,7 +226,6 @@ class MongoIot
|
|
221
226
|
def imei_insert_list(imei_list)
|
222
227
|
begin
|
223
228
|
collection = client[:device_imei]
|
224
|
-
p imei_list
|
225
229
|
for l in imei_list
|
226
230
|
doc = {
|
227
231
|
imei: l,
|
@@ -245,7 +249,6 @@ class MongoIot
|
|
245
249
|
def imei_insert_list2(imei_list)
|
246
250
|
begin
|
247
251
|
collection = client[:device_imei]
|
248
|
-
p imei_list
|
249
252
|
for l in imei_list
|
250
253
|
doc = {
|
251
254
|
imei: l,
|
@@ -283,17 +286,10 @@ class MongoIot
|
|
283
286
|
id = ""
|
284
287
|
begin
|
285
288
|
info = get_imei_info_from_db([imei])
|
286
|
-
p info
|
287
|
-
p "info"
|
288
289
|
if info[:body]==[]
|
289
290
|
out_resp = {:code => 505, :result => "get_profile_name_from_imei: get_imei_info_from_db returned empty list from database. IMEIS not found"}
|
290
291
|
else
|
291
|
-
p "fshhsdf"
|
292
|
-
p info
|
293
292
|
id = info[:body][0]["profile"]
|
294
|
-
p id
|
295
|
-
p "id"
|
296
|
-
|
297
293
|
begin
|
298
294
|
p id
|
299
295
|
res = get_profile_name_by_id(id)
|
data/lib/imperituroard.rb
CHANGED
@@ -139,96 +139,103 @@ class Iot
|
|
139
139
|
input_json = {:login => login, :imei_list => imei_list}
|
140
140
|
resp_out = {}
|
141
141
|
begin
|
142
|
+
|
142
143
|
thr1 = Thread.new do
|
144
|
+
if add_functions_connector.check_input_1(login, imei_list)[:code]==200
|
143
145
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
146
|
+
imei = []
|
147
|
+
list1 = {}
|
148
|
+
for_insert = []
|
149
|
+
not_processed_list = []
|
150
|
+
processed_list = []
|
149
151
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
152
|
+
for ii in imei_list
|
153
|
+
list1[ii["imei"]] = ii
|
154
|
+
imei.append(ii["imei"])
|
155
|
+
end
|
156
|
+
list_checked = mongo_client.check_imei_exists(imei)
|
157
|
+
for ss in list_checked[:body][:exists]
|
158
|
+
not_processed_list.append({:imei => ss, :error => "Device exists in database"})
|
159
|
+
end
|
158
160
|
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
161
|
+
for jj in list_checked[:body][:not_exists]
|
162
|
+
begin
|
163
|
+
get_login_info = mongo_client.check_login_prof_perm_id_one(login, list1[jj]["profile"])[:code]
|
164
|
+
if get_login_info==200
|
165
|
+
for_insert.append(list1[jj])
|
166
|
+
else
|
167
|
+
not_processed_list.append({:imei => list1[jj], :error => "Permission denied for this profile"})
|
168
|
+
end
|
169
|
+
rescue
|
170
|
+
not_processed_list.append({:imei => list1[jj], :error => "Unknown error"})
|
166
171
|
end
|
167
|
-
rescue
|
168
|
-
not_processed_list.append({:imei => list1[jj], :error => "Unknown error"})
|
169
172
|
end
|
170
|
-
end
|
171
173
|
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
174
|
+
begin
|
175
|
+
added_on_iot_platf = []
|
176
|
+
if for_insert!=[]
|
177
|
+
##Logic for IOT Platform connection###
|
178
|
+
|
179
|
+
credentials = mongo_client.get_iot_oceanconnect_credent(login)
|
180
|
+
|
181
|
+
if credentials[:code]==200
|
182
|
+
for aaa in for_insert
|
183
|
+
begin
|
184
|
+
dev_name = aaa["imei"].to_s
|
185
|
+
|
186
|
+
#get {"model"=>"BGT_PPMC", "ManufacturerID"=>"unknown", "ManufacturerNAME"=>"unknown", "device_type"=>"unknown"}
|
187
|
+
#from database
|
188
|
+
model_data = mongo_client.get_device_type_info_by_model(aaa["device_type"])
|
189
|
+
resss = hua_aceanconnect_connector.add_new_device_on_huawei(credentials[:body][:app_id],
|
190
|
+
credentials[:body][:secret],
|
191
|
+
aaa["imei"],
|
192
|
+
dev_name,
|
193
|
+
aaa["description"],
|
194
|
+
model_data[:body]["device_type"],
|
195
|
+
aaa["profile"],
|
196
|
+
model_data[:body]["ManufacturerID"],
|
197
|
+
model_data[:body]["ManufacturerNAME"],
|
198
|
+
model_data[:body]["model"]
|
199
|
+
)
|
200
|
+
if resss[:code]=="200"
|
201
|
+
s1 = aaa
|
202
|
+
s1[:huadata] = resss
|
203
|
+
s1[:created] = DateTime.now
|
204
|
+
added_on_iot_platf.append(s1)
|
205
|
+
else
|
206
|
+
not_processed_list.append({:imei => aaa["imei"], :error => resss})
|
207
|
+
end
|
208
|
+
rescue
|
209
|
+
not_processed_list.append({:imei => aaa["imei"], :error => "Unknown error with insertion imei on IOT platform"})
|
205
210
|
end
|
206
|
-
rescue
|
207
|
-
not_processed_list.append({:imei => aaa["imei"], :error => "Unknown error with insertion imei on IOT platform"})
|
208
211
|
end
|
209
|
-
end
|
210
212
|
|
211
|
-
|
213
|
+
#########end iot platform logic#######
|
212
214
|
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
215
|
+
mongo_client.imei_insert_list(added_on_iot_platf)
|
216
|
+
resp_out = {:code => 200, :result => "Data processed", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}}
|
217
|
+
else
|
218
|
+
resp_out = {:code => 400, :result => "IOT platform credentials not found"}
|
219
|
+
end
|
218
220
|
|
219
221
|
|
220
|
-
|
221
|
-
|
222
|
+
else
|
223
|
+
resp_out = {:code => 202, :result => "Nothing for insertion", :body => {:imei_processed => added_on_iot_platf, :error_list => not_processed_list}}
|
222
224
|
|
225
|
+
end
|
226
|
+
rescue
|
227
|
+
resp_out = {:code => 505, :result => "Error with database communication"}
|
223
228
|
end
|
224
|
-
|
225
|
-
|
229
|
+
|
230
|
+
else
|
231
|
+
resp_out = {:code => 509, :result => "Input data invalid"}
|
226
232
|
end
|
227
233
|
end
|
228
234
|
rescue
|
229
235
|
resp_out = {:code => 507, :result => "Unknown SDK error"}
|
230
236
|
end
|
231
237
|
thr1.join
|
238
|
+
|
232
239
|
mongo_client.audit_logger("add_device_to_profile", remote_ip, input_json, resp_out, real_ip)
|
233
240
|
resp_out
|
234
241
|
end
|
@@ -245,47 +252,52 @@ class Iot
|
|
245
252
|
input_json = {:login => login, :imei_list => imei_list}
|
246
253
|
ime_list_approved = []
|
247
254
|
ime_list_notapproved = []
|
248
|
-
|
255
|
+
resp_out = {}
|
249
256
|
begin
|
250
257
|
thr2 = Thread.new do
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
258
|
+
if add_functions_connector.check_input_2(login, imei_list)[:code]==200
|
259
|
+
|
260
|
+
for t in imei_list
|
261
|
+
prof_name1 = mongo_client.get_profile_name_from_imei(t)
|
262
|
+
if prof_name1[:code]==200
|
263
|
+
begin
|
264
|
+
permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])
|
265
|
+
p "permiss1"
|
266
|
+
p permiss1
|
267
|
+
if permiss1[:code]==200
|
268
|
+
ime_list_approved.append(t)
|
269
|
+
else
|
270
|
+
ime_list_notapproved.append({:imei => t, :error => permiss1})
|
271
|
+
end
|
272
|
+
rescue
|
273
|
+
ime_list_notapproved.append({:imei => t, :error => {:code => 405, :result => "Unknown error when check_login_profile_permiss imei #{t.to_s}"}})
|
262
274
|
end
|
263
|
-
|
264
|
-
ime_list_notapproved.append({:imei => t, :error =>
|
275
|
+
else
|
276
|
+
ime_list_notapproved.append({:imei => t, :error => prof_name1})
|
265
277
|
end
|
266
|
-
else
|
267
|
-
ime_list_notapproved.append({:imei => t, :error => prof_name1})
|
268
278
|
end
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
data = mongo_client.get_imei_info_from_db(ime_list_approved)
|
279
|
+
begin
|
280
|
+
if ime_list_approved != []
|
281
|
+
data = mongo_client.get_imei_info_from_db(ime_list_approved)
|
273
282
|
|
274
|
-
|
283
|
+
resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => data, :unapproved_list => ime_list_notapproved}}
|
275
284
|
|
276
|
-
|
277
|
-
|
285
|
+
else
|
286
|
+
resp_out = {:code => 404, :result => "Invalidate data", :data => {:approved_list => [], :unapproved_list => ime_list_notapproved}}
|
287
|
+
end
|
288
|
+
rescue
|
289
|
+
resp_out = {:code => 504, :result => "Unsuccessfully data transfer"}
|
278
290
|
end
|
279
|
-
|
280
|
-
|
291
|
+
else
|
292
|
+
resp_out = {:code => 509, :result => "Input data invalid"}
|
281
293
|
end
|
282
294
|
end
|
283
295
|
rescue
|
284
|
-
|
296
|
+
resp_out = {:code => 507, :result => "Unknown SDK error"}
|
285
297
|
end
|
286
298
|
thr2.join
|
287
|
-
mongo_client.audit_logger("device_find", remote_ip, input_json,
|
288
|
-
|
299
|
+
mongo_client.audit_logger("device_find", remote_ip, input_json, resp_out, real_ip)
|
300
|
+
resp_out
|
289
301
|
end
|
290
302
|
|
291
303
|
#!3 device modify, change imei
|
@@ -297,140 +309,143 @@ class Iot
|
|
297
309
|
#++
|
298
310
|
def imei_replace(login, im_list)
|
299
311
|
input_json = {:login => login, :imei_list => im_list}
|
312
|
+
resp_out = {}
|
300
313
|
|
301
|
-
|
302
|
-
list1 = {}
|
314
|
+
begin
|
303
315
|
|
304
|
-
|
305
|
-
not_processed_list = []
|
316
|
+
thr3 = Thread.new do
|
306
317
|
|
307
|
-
|
308
|
-
processed_list = []
|
318
|
+
if add_functions_connector.check_input_3(login, imei_list)[:code]==200
|
309
319
|
|
310
|
-
|
311
|
-
|
320
|
+
li_new_imei = []
|
321
|
+
list1 = {}
|
312
322
|
|
313
|
-
|
314
|
-
|
323
|
+
#dictionary for imeis which not processed. Final dictionary
|
324
|
+
not_processed_list = []
|
315
325
|
|
316
|
-
|
317
|
-
|
326
|
+
#dictionary for devices which was processed correctly
|
327
|
+
processed_list = []
|
318
328
|
|
319
|
-
|
320
|
-
|
321
|
-
p "pr1"
|
322
|
-
p pr1
|
323
|
-
li_new_imei.append(pr1["imei_new"])
|
324
|
-
list1[pr1["imei_new"]]=pr1["imei_old"]
|
325
|
-
old_new_translation[pr1["imei_old"]]=pr1["imei_new"]
|
326
|
-
end
|
329
|
+
#array for translations from old imei to new
|
330
|
+
old_new_translation = {}
|
327
331
|
|
328
|
-
|
332
|
+
approved_list = []
|
329
333
|
|
330
|
-
begin
|
331
334
|
|
332
|
-
|
335
|
+
#old_imei_list for query to iot platform for data request
|
336
|
+
step1_approved_dict_old=[]
|
333
337
|
|
334
|
-
|
335
|
-
|
338
|
+
#form dictionary for processing
|
339
|
+
for pr1 in im_list
|
340
|
+
li_new_imei.append(pr1["imei_new"])
|
341
|
+
list1[pr1["imei_new"]]=pr1["imei_old"]
|
342
|
+
old_new_translation[pr1["imei_old"]]=pr1["imei_new"]
|
343
|
+
end
|
336
344
|
|
337
|
-
|
345
|
+
#check if imei_new exists in database. If exists - not process this imei
|
346
|
+
list_checked = mongo_client.check_imei_exists(li_new_imei)
|
338
347
|
|
339
|
-
|
340
|
-
for ss in list_checked[:body][:exists]
|
341
|
-
not_processed_list.append({:record => {:imei_old => list1[ss], :imei_new => ss}, :error => "New IMEI exists in database"})
|
342
|
-
end
|
348
|
+
internal_func.printer_texter({:function => "imei_replace Step1", :list_checked => list_checked}, "debug")
|
343
349
|
|
344
|
-
|
345
|
-
|
350
|
+
#add already exists new IMEI in error dictionary
|
351
|
+
for ss in list_checked[:body][:exists]
|
352
|
+
not_processed_list.append({:record => {:imei_old => list1[ss], :imei_new => ss}, :error => "New IMEI exists in database"})
|
353
|
+
end
|
346
354
|
|
347
|
-
|
355
|
+
#new_imei list which processed step1
|
356
|
+
step2_list = list_checked[:body][:not_exists]
|
348
357
|
|
358
|
+
internal_func.printer_texter({:function => "imei_replace Step2", :step2_list => step2_list}, "debug")
|
349
359
|
|
350
|
-
for a in step2_list
|
351
|
-
begin
|
352
360
|
|
353
|
-
|
354
|
-
|
361
|
+
for a in step2_list
|
362
|
+
begin
|
355
363
|
|
356
|
-
|
364
|
+
#step3 checking permission for writing for imei list
|
365
|
+
prof_name1 = mongo_client.get_profile_name_from_imei(list1[a])
|
357
366
|
|
358
|
-
|
359
|
-
permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])[:code]
|
360
|
-
internal_func.printer_texter({:function => "imei_replace Step4", :permiss1 => permiss1, :input => prof_name1[:body]["profile"]}, "debug")
|
361
|
-
if permiss1==200
|
367
|
+
internal_func.printer_texter({:function => "imei_replace Step3", :prof_name1 => prof_name1}, "debug")
|
362
368
|
|
363
|
-
|
364
|
-
|
369
|
+
if prof_name1[:code]==200
|
370
|
+
permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])[:code]
|
371
|
+
internal_func.printer_texter({:function => "imei_replace Step4", :permiss1 => permiss1, :input => prof_name1[:body]["profile"]}, "debug")
|
372
|
+
if permiss1==200
|
365
373
|
|
374
|
+
approved_list.append({:imei_old => list1[a], :imei_new => a})
|
375
|
+
step1_approved_dict_old.append(list1[a])
|
376
|
+
|
377
|
+
else
|
378
|
+
not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Old IMEI modification denied"})
|
379
|
+
end
|
366
380
|
else
|
367
|
-
not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Old IMEI
|
381
|
+
not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Old IMEI not exists in database"})
|
368
382
|
end
|
369
|
-
|
370
|
-
not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "
|
383
|
+
rescue
|
384
|
+
not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Unknown error"})
|
371
385
|
end
|
372
|
-
rescue
|
373
|
-
not_processed_list.append({:record => {:imei_old => list1[a], :imei_new => a}, :error => "Unknown error"})
|
374
386
|
end
|
375
|
-
end
|
376
387
|
|
377
|
-
|
388
|
+
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")
|
378
389
|
|
379
390
|
|
380
|
-
|
391
|
+
##Logic for IOT Platform connection###
|
381
392
|
|
382
|
-
|
393
|
+
list_from_iot = self.get_info_by_imeilist_from_iot(login, step1_approved_dict_old)
|
383
394
|
|
384
|
-
|
395
|
+
internal_func.printer_texter({:function => "imei_replace Step6", :list_from_iot => list_from_iot, :description => "data from iot platform by old imei"}, "debug")
|
385
396
|
|
386
|
-
|
387
|
-
|
397
|
+
#processing data. modifying data on iot platform and mongoDB
|
398
|
+
if list_from_iot[:code]=="200"
|
388
399
|
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
400
|
+
for ard in list_from_iot[:body]["devices"]
|
401
|
+
p ard
|
402
|
+
new_data_cur_dev = {}
|
403
|
+
mongo_answer = {}
|
404
|
+
current_old_dev = ard["deviceInfo"]["nodeId"]
|
405
|
+
current_device_id = ard["deviceId"]
|
406
|
+
new_data_cur_dev = ard["deviceInfo"]
|
407
|
+
new_data_cur_dev["nodeId"] = old_new_translation[current_old_dev.to_i].to_s
|
397
408
|
|
398
|
-
|
409
|
+
credentials = mongo_client.get_iot_oceanconnect_credent(login)
|
399
410
|
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
411
|
+
if credentials[:code]==200
|
412
|
+
flag_remove=0
|
413
|
+
flag_create=0
|
414
|
+
remove_answer = hua_aceanconnect_connector.remove_one_device_from_iot(credentials[:body][:app_id], credentials[:body][:secret], current_device_id)
|
415
|
+
create_answer = hua_aceanconnect_connector.add_new_device_on_huawei2(credentials[:body][:app_id], credentials[:body][:secret], new_data_cur_dev)
|
405
416
|
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
417
|
+
if remove_answer[:code]=="204" || remove_answer[:code]=="200"
|
418
|
+
flag_remove=1
|
419
|
+
end
|
420
|
+
if create_answer[:code]=="200"
|
421
|
+
flag_create=1
|
422
|
+
end
|
423
|
+
if flag_remove==1 && flag_create==1
|
424
|
+
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})
|
425
|
+
processed_list.append({:imei_old => current_old_dev.to_i, :imei_new => old_new_translation[current_old_dev.to_i]})
|
426
|
+
else
|
427
|
+
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"})
|
428
|
+
end
|
418
429
|
|
419
|
-
|
430
|
+
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")
|
420
431
|
|
421
|
-
|
422
|
-
|
432
|
+
else
|
433
|
+
approved_list=[]
|
434
|
+
end
|
423
435
|
end
|
436
|
+
|
437
|
+
else
|
438
|
+
approved_list=[]
|
424
439
|
end
|
425
440
|
|
426
|
-
|
427
|
-
|
428
|
-
|
441
|
+
if approved_list!=[]
|
442
|
+
resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
|
443
|
+
else
|
444
|
+
resp_out = {:code => 202, :result => "Nothing to do", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
|
445
|
+
end
|
429
446
|
|
430
|
-
if approved_list!=[]
|
431
|
-
resp_out = {:code => 200, :result => "Request completed successfully", :data => {:approved_list => processed_list, :unapproved_list => not_processed_list}}
|
432
447
|
else
|
433
|
-
resp_out = {:code =>
|
448
|
+
resp_out = {:code => 509, :result => "Input data invalid"}
|
434
449
|
end
|
435
450
|
|
436
451
|
end
|
@@ -462,50 +477,54 @@ class Iot
|
|
462
477
|
|
463
478
|
begin
|
464
479
|
thr4 = Thread.new do
|
465
|
-
prof_name = mongo_client.get_profile_name_from_imei(imei)
|
466
|
-
if prof_name[:code]==200
|
467
|
-
permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
|
468
|
-
if permiss[:code]==200
|
469
480
|
|
470
|
-
|
481
|
+
if add_functions_connector.check_input_4(login, imei_list)[:code]==200
|
471
482
|
|
483
|
+
prof_name = mongo_client.get_profile_name_from_imei(imei)
|
484
|
+
if prof_name[:code]==200
|
485
|
+
permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
|
486
|
+
if permiss[:code]==200
|
487
|
+
|
488
|
+
##Logic for IOT Platform connection###
|
472
489
|
|
473
|
-
|
474
|
-
|
490
|
+
credentials = mongo_client.get_iot_oceanconnect_credent(login)
|
491
|
+
resp = {}
|
475
492
|
|
476
|
-
|
493
|
+
if credentials[:code]==200
|
477
494
|
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
495
|
+
imei_data = mongo_client.get_imei_info_from_db([imei])
|
496
|
+
if imei_data[:body]!=[]
|
497
|
+
ans = hua_aceanconnect_connector.remove_one_device_from_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"])
|
498
|
+
p ans
|
499
|
+
if ans[:code]=="204" or ans[:code]=="200"
|
500
|
+
resp = mongo_client.device_remove_single_mongo(imei)
|
501
|
+
else
|
502
|
+
resp = {:code => 500, :result => "Unknown IOT platform error", :body => ans}
|
503
|
+
end
|
484
504
|
else
|
485
|
-
|
505
|
+
resp_out = {:code => 404, :result => "Data not found"}
|
486
506
|
end
|
487
|
-
else
|
488
|
-
resp_out = {:code => 404, :result => "Data not found"}
|
489
|
-
end
|
490
507
|
|
491
|
-
|
508
|
+
#########end iot platform logic#######
|
492
509
|
|
493
|
-
|
494
|
-
|
510
|
+
if resp[:code]==200
|
511
|
+
resp_out = {:code => 200, :result => "Request completed successfully"}
|
512
|
+
else
|
513
|
+
resp_out=resp
|
514
|
+
end
|
495
515
|
else
|
496
|
-
resp_out=
|
516
|
+
resp_out = {:code => 400, :result => "IOT platform credentials not found"}
|
497
517
|
end
|
498
|
-
|
499
518
|
else
|
500
|
-
resp_out
|
519
|
+
resp_out=permiss
|
501
520
|
end
|
502
|
-
|
503
521
|
else
|
504
|
-
resp_out=
|
522
|
+
resp_out=prof_name
|
505
523
|
end
|
506
524
|
else
|
507
|
-
resp_out=
|
525
|
+
resp_out = {:code => 509, :result => "Input data invalid"}
|
508
526
|
end
|
527
|
+
|
509
528
|
end
|
510
529
|
|
511
530
|
rescue
|
@@ -536,51 +555,50 @@ class Iot
|
|
536
555
|
processed = []
|
537
556
|
begin
|
538
557
|
thr5 = Thread.new do
|
539
|
-
|
540
|
-
prof_name = mongo_client.get_profile_name_from_imei(p[:imei])
|
541
|
-
|
542
|
-
if prof_name[:code]==200
|
543
|
-
p "prof_name"
|
544
|
-
p prof_name
|
545
|
-
permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
|
546
|
-
if permiss[:code]==200
|
547
|
-
|
548
|
-
##Logic for IOT Platform connection###
|
549
|
-
credentials = mongo_client.get_iot_oceanconnect_credent(login)
|
550
|
-
resp = {}
|
558
|
+
if add_functions_connector.check_input_5(login, imei_list)[:code]==200
|
551
559
|
|
552
|
-
|
553
|
-
|
554
|
-
if imei_data[:body]!=[]
|
555
|
-
ans =hua_aceanconnect_connector.modify_location_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"], p[:address])
|
560
|
+
for p in newdevice_list
|
561
|
+
prof_name = mongo_client.get_profile_name_from_imei(p[:imei])
|
556
562
|
|
557
|
-
|
563
|
+
if prof_name[:code]==200
|
564
|
+
permiss = mongo_client.check_login_profile_permiss(login, prof_name[:body]["profile"])
|
565
|
+
if permiss[:code]==200
|
558
566
|
|
559
|
-
|
560
|
-
|
567
|
+
##Logic for IOT Platform connection###
|
568
|
+
credentials = mongo_client.get_iot_oceanconnect_credent(login)
|
569
|
+
resp = {}
|
561
570
|
|
562
|
-
|
571
|
+
if credentials[:code]==200
|
572
|
+
imei_data = mongo_client.get_imei_info_from_db([p[:imei]])
|
573
|
+
if imei_data[:body]!=[]
|
574
|
+
ans =hua_aceanconnect_connector.modify_location_iot(credentials[:body][:app_id], credentials[:body][:secret], imei_data[:body][0]["huadata"]["body"]["deviceId"], p[:address])
|
563
575
|
|
576
|
+
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")
|
577
|
+
end
|
564
578
|
|
565
|
-
|
579
|
+
end
|
566
580
|
|
581
|
+
#########end iot platform logic#######
|
567
582
|
|
568
|
-
|
569
|
-
|
570
|
-
|
583
|
+
resp = mongo_client.device_modify_attr_mongo(p[:imei], p[:address])
|
584
|
+
if resp[:code]==200
|
585
|
+
processed.append({:imei => p[:imei]})
|
586
|
+
end
|
587
|
+
else
|
588
|
+
not_processed.append({:imei => p[:imei], :address => p[:address], :error => permiss})
|
571
589
|
end
|
572
590
|
else
|
573
|
-
not_processed.append({:imei => p[:imei], :address => p[:address], :error =>
|
591
|
+
not_processed.append({:imei => p[:imei], :address => p[:address], :error => prof_name})
|
574
592
|
end
|
575
|
-
else
|
576
|
-
not_processed.append({:imei => p[:imei], :address => p[:address], :error => prof_name})
|
577
593
|
end
|
578
|
-
end
|
579
594
|
|
580
|
-
|
581
|
-
|
595
|
+
if processed!=[]
|
596
|
+
resp_out = {:code => 200, :result => "Request completed successfully", :body => {:imei_processed => processed, :error_list => not_processed}}
|
597
|
+
else
|
598
|
+
resp_out = {:code => 202, :result => "Nothing processed", :body => {:imei_processed => processed, :error_list => not_processed}}
|
599
|
+
end
|
582
600
|
else
|
583
|
-
resp_out = {:code =>
|
601
|
+
resp_out = {:code => 509, :result => "Input data invalid"}
|
584
602
|
end
|
585
603
|
end
|
586
604
|
rescue
|
@@ -608,66 +626,105 @@ class Iot
|
|
608
626
|
|
609
627
|
begin
|
610
628
|
|
611
|
-
|
612
|
-
p g
|
629
|
+
thr6 = Thread.new do
|
613
630
|
|
614
|
-
|
615
|
-
p prof_name1
|
631
|
+
if add_functions_connector.check_input_5(login, imei_list)[:code]==200
|
616
632
|
|
617
|
-
|
618
|
-
p prof_name1
|
619
|
-
permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])
|
620
|
-
p "permiss1"
|
621
|
-
p permiss1
|
622
|
-
if permiss1[:code]==200
|
633
|
+
for g in device_list
|
623
634
|
|
624
|
-
|
625
|
-
permiss2 = mongo_client.check_login_profile_permiss(login, g["attributes"]["profile"])[:code]
|
635
|
+
prof_name1 = mongo_client.get_profile_name_from_imei(g["imei"])
|
626
636
|
|
627
|
-
|
637
|
+
if prof_name1[:code]==200
|
638
|
+
permiss1 = mongo_client.check_login_profile_permiss(login, prof_name1[:body]["profile"])
|
639
|
+
if permiss1[:code]==200
|
640
|
+
|
641
|
+
if g["attributes"].key?("profile")
|
642
|
+
permiss2 = mongo_client.check_login_profile_permiss(login, g["attributes"]["profile"])[:code]
|
643
|
+
|
644
|
+
if permiss2==200
|
628
645
|
|
629
|
-
|
630
|
-
|
646
|
+
attr = g["attributes"]
|
647
|
+
#mod_attr = {}
|
631
648
|
|
632
|
-
|
633
|
-
|
634
|
-
|
649
|
+
if attr.key?("profile")
|
650
|
+
if attr["profile"].is_a? Integer
|
651
|
+
p "Ok"
|
652
|
+
else
|
653
|
+
p new = mongo_client.get_profile_id_by_name(attr["profile"])
|
654
|
+
attr["profile"] = new["profile_id"]
|
655
|
+
end
|
656
|
+
end
|
657
|
+
mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
|
658
|
+
processed.append(g["imei"])
|
635
659
|
else
|
636
|
-
|
637
|
-
attr["profile"] = new["profile_id"]
|
660
|
+
not_processed.append({:imei => g["imei"], :description => "New profile permission error", :error => permiss2})
|
638
661
|
end
|
662
|
+
|
663
|
+
else
|
664
|
+
attr = g["attributes"]
|
665
|
+
mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
|
666
|
+
processed.append(g["imei"])
|
639
667
|
end
|
640
|
-
p attr
|
641
|
-
mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
|
642
|
-
processed.append(g["imei"])
|
643
668
|
else
|
644
|
-
not_processed.append({:imei => g["imei"], :description => "
|
669
|
+
not_processed.append({:imei => g["imei"], :description => "Old profile permission error", :error => permiss1})
|
645
670
|
end
|
646
671
|
|
647
672
|
else
|
648
|
-
|
649
|
-
mongo_client.device_modify_any_attr_mongo(g["imei"], attr)
|
650
|
-
processed.append(g["imei"])
|
673
|
+
not_processed.append({:imei => g["imei"], :error => prof_name1})
|
651
674
|
end
|
652
|
-
else
|
653
|
-
not_processed.append({:imei => g["imei"], :description => "Old profile permission error", :error => permiss1})
|
654
|
-
end
|
655
675
|
|
676
|
+
end
|
677
|
+
resp_out = {:code => 200, :result => "Request completed successfully", :body => {:imei_processed => processed, :error_list => not_processed}}
|
656
678
|
else
|
657
|
-
|
679
|
+
resp_out = {:code => 509, :result => "Input data invalid"}
|
658
680
|
end
|
659
681
|
|
660
682
|
end
|
661
|
-
resp_out = {:code => 200, :result => "Request completed successfully", :body => {:imei_processed => processed, :error_list => not_processed}}
|
662
683
|
|
663
684
|
rescue
|
664
685
|
resp_out = {:code => 507, :result => "Unknown SDK error"}
|
665
686
|
end
|
687
|
+
thr6.join
|
666
688
|
mongo_client.audit_logger("device_remove", remote_ip, input_json, resp_out, real_ip)
|
667
689
|
resp_out
|
668
690
|
end
|
669
691
|
|
670
692
|
|
693
|
+
#7 procedure for subscriber autorization
|
694
|
+
def autorize_subscriber(login, password)
|
695
|
+
input_json = {:login => login, :password => password}
|
696
|
+
resp_out = {}
|
697
|
+
thr7 = Thread.new do
|
698
|
+
begin
|
699
|
+
login_inform = mongo_client.get_login_info(login)
|
700
|
+
if login_inform[:code]==200
|
701
|
+
pass_mongo = login_inform[:body]["password"]
|
702
|
+
if pass_mongo == password
|
703
|
+
resp_out = {:code => 200, :result => "Access granted"}
|
704
|
+
else
|
705
|
+
resp_out = {:code => 400, :result => "Access denied"}
|
706
|
+
end
|
707
|
+
else
|
708
|
+
resp_out = {:code => 401, :result => "Access denied. Incorrect login"}
|
709
|
+
end
|
710
|
+
rescue
|
711
|
+
resp_out = {:code => 507, :result => "Unknown SDK error"}
|
712
|
+
end
|
713
|
+
end
|
714
|
+
thr7.join
|
715
|
+
mongo_client.audit_logger("autorize_subscriber", remote_ip, input_json, resp_out, real_ip)
|
716
|
+
resp_out
|
717
|
+
end
|
718
|
+
|
719
|
+
def get_available_profiles(login)
|
720
|
+
|
721
|
+
end
|
722
|
+
|
723
|
+
def get_available_types(login)
|
724
|
+
|
725
|
+
end
|
726
|
+
|
727
|
+
|
671
728
|
def answ_dev_query_format_process(dev_list)
|
672
729
|
add_functions_connector.answ_dev_query_format_process(dev_list)
|
673
730
|
end
|
@@ -717,17 +774,17 @@ class Iot
|
|
717
774
|
end
|
718
775
|
|
719
776
|
def test()
|
720
|
-
ddd = MongoIot.new(mongoip, mongoport, mongo_database)
|
777
|
+
#ddd = MongoIot.new(mongoip, mongoport, mongo_database)
|
721
778
|
#ddd.get_profiles_by_login("test")
|
722
779
|
|
723
780
|
ff = [131234123412341233, 131234123127341233]
|
724
781
|
#ddd.get_imsi_info_from_db(ff)
|
725
782
|
|
726
783
|
#p ddd.get_profile_id_by_name("1341241")
|
727
|
-
p ddd.get_device_type_info_by_model("BGT_PPMC11")
|
728
|
-
end
|
729
|
-
|
784
|
+
#p ddd.get_device_type_info_by_model("BGT_PPMC11")
|
730
785
|
|
786
|
+
#fff = HuaIot.new("134.17.93.4", "443", "/Users/imperituroard/Desktop/cert.crt", "/Users/imperituroard/Desktop/key.pem")
|
787
|
+
#p fff.querying_device_id("Cd1v0k2gTBCbpQlMVlW1FVqOSqga", "eWllZpHgXgvgDAQlJjWs4QXaR94a", [91234])
|
788
|
+
end
|
731
789
|
|
732
790
|
end
|
733
|
-
|
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: 0.3.
|
4
|
+
version: 0.3.4
|
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-04-
|
11
|
+
date: 2020-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -158,6 +158,7 @@ files:
|
|
158
158
|
- imperituroard.gemspec
|
159
159
|
- lib/.DS_Store
|
160
160
|
- lib/imperituroard.rb
|
161
|
+
- lib/imperituroard/.DS_Store
|
161
162
|
- lib/imperituroard/phpipamcps.rb
|
162
163
|
- lib/imperituroard/phpipamdb.rb
|
163
164
|
- lib/imperituroard/projects/iot/add_functions.rb
|