imperituroard 0.5.4 → 1.0.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.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/imperituroard.gemspec +3 -0
  3. data/lib/.DS_Store +0 -0
  4. data/lib/imperituroard.rb +103 -72
  5. data/lib/imperituroard/.DS_Store +0 -0
  6. data/lib/imperituroard/platforms/cps/cps_multiple_thread_req.rb +0 -0
  7. data/lib/imperituroard/platforms/staros/get_data_ssh.rb +54 -0
  8. data/lib/imperituroard/platforms/staros/staros_automation.rb +95 -0
  9. data/lib/imperituroard/platforms/staros/staros_automation_fun.rb +37 -0
  10. data/lib/imperituroard/platforms/staros/staros_parser.rb +141 -0
  11. data/lib/imperituroard/projects/dns.rb +1 -1
  12. data/lib/imperituroard/projects/iot.rb +189 -30
  13. data/lib/imperituroard/projects/iot/hua_oceanconnect_adapter.rb +22 -8
  14. data/lib/imperituroard/projects/iot/mongoconnector.rb +177 -2
  15. data/lib/imperituroard/projects/mhub.rb +2 -0
  16. data/lib/imperituroard/projects/mhub/infobip.rb +1 -1
  17. data/lib/imperituroard/projects/mhub/sk.rb +171 -157
  18. data/lib/imperituroard/projects/mhub/subs/dabrab/dabrab_proced.rb +124 -12
  19. data/lib/imperituroard/projects/ukaz60.rb +140 -0
  20. data/lib/imperituroard/projects/{dns/ukaz60 → ukaz60}/belgim.rb +48 -9
  21. data/lib/imperituroard/projects/{dns/ukaz60 → ukaz60}/dns.rb +0 -0
  22. data/lib/imperituroard/projects/{dns/ukaz60 → ukaz60}/dns_update.rb +2 -0
  23. data/lib/imperituroard/projects/{dns/ukaz60 → ukaz60}/fortigate.rb +43 -4
  24. data/lib/imperituroard/projects/ukaz60/staros.rb +141 -0
  25. data/lib/imperituroard/projects/{dns/ukaz60 → ukaz60}/ukaz60_add_func.rb +159 -4
  26. data/lib/imperituroard/version.rb +1 -1
  27. metadata +28 -8
  28. data/lib/imperituroard/projects/dns/ukaz60.rb +0 -85
@@ -0,0 +1,141 @@
1
+ require 'net/ssh'
2
+ require 'uri'
3
+ require "erb"
4
+ include ERB::Util
5
+
6
+ require 'imperituroard/platforms/staros/get_data_ssh'
7
+
8
+
9
+ class Ukaz60Staros_2
10
+
11
+ attr_accessor :staros_platform_get,
12
+ :ukaz60_http_groups,
13
+ :ukaz60_https_groups,
14
+ :staros_hosts
15
+
16
+ def initialize(star_login, star_password, ukaz60_http_groups, ukaz60_https_groups, staros_hosts)
17
+ @staros_platform_get = StarosGet_2.new(star_login, star_password)
18
+ @ukaz60_http_groups = ukaz60_http_groups
19
+ @ukaz60_https_groups = ukaz60_https_groups
20
+ @staros_hosts = staros_hosts
21
+ end
22
+
23
+
24
+ #get data from staros and return urls from staros
25
+ def get_data_staros(ip_staros)
26
+
27
+ input_data = {:ip_staros => ip_staros}
28
+ output_data = {}
29
+ ecs_name = ""
30
+ blocked_urls_http = []
31
+ blocked_urls_https = []
32
+
33
+ begin
34
+ ecs_config_json = staros_platform_get.get_all_active_charging(ip_staros)
35
+
36
+ if ecs_config_json[:code] == 200
37
+
38
+ #get ecs name
39
+ ecs_sss = ecs_config_json[:parsed_data]["config"]["active-charging service"][0]
40
+ ecs_sss.each do |hhh|
41
+ ecs_name = hhh[0]
42
+ end
43
+
44
+ regexp_ruldef = /add-ruledef priority \d+ ruledef (.+)/
45
+
46
+ #for http urls
47
+ begin
48
+ ukaz60_http_groups.each do |rule|
49
+ group_ruled_ukaz60 = ecs_config_json[:parsed_data]["config"]["active-charging service"][0][ecs_name]["group-of-ruledefs"][rule]
50
+
51
+ group_ruled_ukaz60.each do |gr_rul_str|
52
+ ruledef_name = gr_rul_str.match(regexp_ruldef)[1]
53
+ rdef_config = ecs_config_json[:parsed_data]["config"]["active-charging service"][0][ecs_name]["ruledef"][ruledef_name]
54
+ rdef_config.each do |g|
55
+ if g[0..15] == "www url contains"
56
+ blocked_urls_http.push({:url => g.gsub("www url contains ", ""), :ruledef => ruledef_name, :gr_of_ruledefs => rule, :gr_rul_str => gr_rul_str})
57
+ end
58
+ end
59
+ end
60
+ end
61
+ rescue
62
+ blocked_urls_http.push("failed")
63
+ end
64
+
65
+ for https_rule in ukaz60_https_groups
66
+ group_rule_https = ecs_config_json[:parsed_data]["config"]["active-charging service"][0][ecs_name]["group-of-ruledefs"][https_rule]
67
+ end
68
+
69
+ output_data = {:code => 200, :result => "Success", :ecs_name => ecs_name, :blocked_urls_http => blocked_urls_http, :http_rules_num => blocked_urls_http.length}
70
+
71
+ else
72
+ output_data = ecs_config_json
73
+ end
74
+ rescue
75
+ output_data = {:code => 507, :result => "get_data_staros: Unknown SDK error"}
76
+ end
77
+ output_data
78
+ # Net::SSH.start("172.24.214.17", "starscript", :password => "$rfv3EDC") do |ssh|
79
+ # staros_answer = ssh.exec!("show configuration active-charging service all")
80
+ # p staros_answer
81
+ #
82
+ # staros_answer = staros_answer.gsub("\n", "")
83
+ #
84
+ # regexp_ukaz60_9 = /group-of-ruledefs Ukaz60-9_HTTP.+HTTP\s+#exit/
85
+ # regexp_ukaz60_https = /group-of-ruledefs Ukaz60_HTTPS.+HTTPS\s+#exit/
86
+ # regexp_ukaz60_7 = /group-of-ruledefs Ukaz60-7_HTTP.+HTTP\s+#exit/
87
+ #
88
+ #
89
+ #
90
+ # group_ruled_ukaz60_9 = staros_answer.match(regexp_ukaz60_9)[0]
91
+ # group_ruled_ukaz60_https = staros_answer.match(regexp_ukaz60_https)[0]
92
+ # group_ruled_ukaz60_7 = staros_answer.match(regexp_ukaz60_7)[0]
93
+ #
94
+ # p group_ruled_ukaz60_9
95
+ # p group_ruled_ukaz60_https
96
+ # p group_ruled_ukaz60_7
97
+ #
98
+ # end
99
+ end
100
+
101
+
102
+ #procedure for get data from all MPC
103
+ def get_all_staros_ukaz60
104
+
105
+ returned_data = {:mpc_data => [], :add_format => {}}
106
+ get_all_staros_ukaz60_1 = []
107
+
108
+ begin
109
+ staros_hosts.each do |ggsn|
110
+ get_all_staros_ukaz60_1 << Thread.new do
111
+ begin
112
+ mpc_data = self.get_data_staros(ggsn[1])
113
+ returned_data[:mpc_data].push({:code => 200, :result => "Success", :hostname => ggsn[0], :host_ip => ggsn[1], :body => mpc_data})
114
+ returned_data[:add_format][ggsn[0]] = mpc_data
115
+ rescue
116
+ returned_data[:mpc_data].push({:code => 507, :result => "Unknown thread error", :hostname => ggsn[0], :host_ip => ggsn[1], :body => {}})
117
+ end
118
+ end
119
+ end
120
+ get_all_staros_ukaz60_1.each(&:join)
121
+ returned_data[:code] = 200
122
+ returned_data[:result] = "get_all_staros_ukaz60: Success"
123
+ rescue
124
+ returned_data[:code] = 507
125
+ returned_data[:result] = "get_all_staros_ukaz60: Unknown SDK error"
126
+ end
127
+ returned_data
128
+ end
129
+ end
130
+
131
+
132
+ uu ="/fgd?ef"
133
+
134
+ #ggg = uu.force_encoding('ASCII-8BIT')
135
+ #puts CGI.escape ggg
136
+ p url_encode("foo/bar? baz&")
137
+
138
+ p URI.parse("foo/bar? baz&").to_s
139
+ p URI::encode("foo/bar? baz&")
140
+
141
+ p URI.decode("newsx-ru.ru/by/251-potencia-spartagen-by/%3futm%20medium=251&utmcampaign=4&%20utm%20content=57849345&utm%20source=56960717")
@@ -1,4 +1,5 @@
1
1
  require 'imperituroard/add_functions/logger/any_functions'
2
+ require 'uri'
2
3
 
3
4
  class AddFuncUkaz60_2
4
5
 
@@ -116,7 +117,8 @@ class AddFuncUkaz60_2
116
117
 
117
118
  begin
118
119
  answ_ans_parsed = answer_string.gsub("\n", " ")
119
- result_out = []
120
+ result_out = {}
121
+ #result_out = []
120
122
  num_ok = 0
121
123
  num_failed = 0
122
124
  final_checks = /(\S+)\s+:\s+ok=(\d)\s+changed=(\d)\s+unreachable=(\d)\s+failed=(\d)\s+skipped=(\d)\s+rescued=(\d)\s+ignored=(\d)\s+/
@@ -126,14 +128,17 @@ class AddFuncUkaz60_2
126
128
  for aaa in processed_data
127
129
  begin
128
130
  if aaa[1].to_i>0 && aaa[3].to_i==0 && aaa[4].to_i==0 && aaa[5].to_i==0 && aaa[6].to_i==0 && aaa[7].to_i==0
129
- result_out.push({aaa[0] => "Ok"})
131
+ result_out[aaa[0]] = "Ok"
132
+ #result_out.push({aaa[0] => "Ok"})
130
133
  num_ok = num_ok + 1
131
134
  else
132
- result_out.push({aaa[0] => "Failed"})
135
+ result_out[aaa[0]] = "Failed"
136
+ #result_out.push({aaa[0] => "Failed"})
133
137
  num_failed = num_failed + 1
134
138
  end
135
139
  rescue
136
- result_out.push({"unknown" => aaa.to_s})
140
+ result_out["unknown"] = aaa.to_s
141
+ #result_out.push({"unknown" => aaa.to_s})
137
142
  num_failed = num_failed + 1
138
143
  end
139
144
  end
@@ -148,4 +153,154 @@ class AddFuncUkaz60_2
148
153
  output_data
149
154
  end
150
155
 
156
+
157
+ def https_to_forti_prep(domain)
158
+ f0 = domain.gsub("#", "")
159
+ f1 = f0.gsub("https://", "").split("/")
160
+ f1[0]
161
+ end
162
+
163
+ def http_to_forti_prep(domain)
164
+ domain.gsub("#", "")
165
+ end
166
+
167
+ #result array2-array1
168
+ #array2 - all
169
+ #array1 - blocked
170
+ def array_hash_compare(array1, array2)
171
+ diff = []
172
+ array2.each do |h1|
173
+ if array1.include?(h1)
174
+ nil
175
+ else
176
+ diff.push(h1)
177
+ end
178
+ end
179
+ diff
180
+ end
181
+
182
+
183
+ #procedure for compare http urls from staros and http urls from belgim
184
+ def staros_compare_http(data_staros, data_belgim)
185
+
186
+ notblocked_stat = {}
187
+ alert_unprotected = {}
188
+ alert_unprotected_out = {}
189
+ output_answ = {:body => {:for_block => {}, :for_unblock => {}}}
190
+ for_unblock_tmp = {}
191
+ for_unblock = {}
192
+ for_unblock_stat = {}
193
+
194
+
195
+ begin
196
+ #only for one ECS instance
197
+ data_staros[:mpc_data].each do |star_host|
198
+ alert_unprotected[star_host[:hostname]] = []
199
+ for_unblock_tmp[star_host[:hostname]] = []
200
+
201
+ #check if belgim http url is blocked on STAROS
202
+ data_belgim[:url_all].each do |belg_url|
203
+ blocked = 0
204
+ star_host[:body][:blocked_urls_http].each do |star_dom|
205
+ star_url_curr = star_dom[:url]
206
+ star_dom_len = star_url_curr.length
207
+ star_dom_x = ""
208
+ if star_url_curr[star_dom_len - 1] == "/"
209
+ star_dom_x = star_url_curr[0..star_dom_len - 2]
210
+ else
211
+ star_dom_x = star_url_curr
212
+ end
213
+ if belg_url.include?(star_dom_x) || belg_url.include?(URI.decode(star_dom_x))
214
+ blocked = 1
215
+ for_unblock_tmp[star_host[:hostname]].push(star_dom)
216
+ end
217
+ end
218
+ if blocked == 0
219
+ alert_unprotected[star_host[:hostname]].push(belg_url)
220
+ end
221
+ end
222
+ end
223
+
224
+ alert_unprotected.each do |proc_unpro|
225
+ da123 = proc_unpro[1]
226
+ alert_unprotected_out[proc_unpro[0]] = da123.uniq
227
+ notblocked_stat[proc_unpro[0]] = proc_unpro[1].length
228
+ end
229
+
230
+ for_unblock_tmp.each do |tmp_unbl|
231
+ hostname_st = tmp_unbl[0]
232
+ host_data_tmp = tmp_unbl[1].uniq
233
+ staros_all = data_staros[:add_format][hostname_st][:blocked_urls_http].uniq
234
+ da_annn = self.array_hash_compare(host_data_tmp, staros_all)
235
+ for_unblock[hostname_st] = da_annn.uniq
236
+ for_unblock_stat[hostname_st] = da_annn.uniq.length
237
+ end
238
+
239
+ output_answ[:code] = 200
240
+ output_answ[:result] = "Success"
241
+ output_answ[:body][:for_block][:notblocked_stat] = notblocked_stat
242
+ output_answ[:body][:for_block][:not_blocked_belgim] = alert_unprotected_out
243
+ output_answ[:body][:for_unblock][:for_unblock] = for_unblock
244
+ output_answ[:body][:for_unblock][:for_unblock_stat] = for_unblock_stat
245
+
246
+ rescue
247
+ output_answ = {:code => 507, :result => "staros_compare_http: Unknown SDK error"}
248
+ end
249
+
250
+ #p JSON.pretty_generate(output_answ)
251
+ p "staros_compare_http"
252
+ p output_answ
253
+
254
+ p "temp data"
255
+ for i in output_answ[:body][:for_unblock][:for_unblock]["vit11asr2"]
256
+ #for i in output_answ[:body][:for_block][:not_blocked_belgim]["vit11asr2"]
257
+ p i
258
+ end
259
+ output_answ
260
+ end
261
+
262
+
263
+
264
+
265
+ def format_star_processed_answ(data)
266
+ answ_out = {:body => {:to_message => {:code => 200, :result => "Staros processed", :data => {:block_me => {}, :unblock_me=> {}}}, :config => {}}}
267
+ compa_n = 0
268
+ compa_n_data = ""
269
+ flag = 0
270
+ notbl_equal = 0
271
+ data[:body][:for_block][:notblocked_stat].each do |blo_for|
272
+ if flag == 0
273
+ compa_n = blo_for[1]
274
+ compa_n_data = blo_for[0]
275
+ end
276
+ if compa_n == blo_for[1]
277
+ nil
278
+ else
279
+ notbl_equal = 1
280
+ end
281
+ end
282
+
283
+ p notbl_equal
284
+ if notbl_equal == 0
285
+ block_me = {:for_block_count => data[:body][:for_block][:notblocked_stat][compa_n_data]}
286
+ unblock_me = {:for_unblock_count => data[:body][:for_unblock][:for_unblock_stat][compa_n_data]}
287
+
288
+ if block_me[:for_block_count] != 0 && unblock_me[:for_unblock_count] != 0
289
+ answ_out[:body][:to_message][:code] = 202
290
+ answ_out[:body][:to_message][:result] = "Something not actual"
291
+ else
292
+ answ_out[:body][:to_message][:code] = 200
293
+ answ_out[:body][:to_message][:result] = "Staros processed"
294
+ end
295
+
296
+ answ_out[:body][:to_message][:data][:block_me]= block_me
297
+ answ_out[:body][:to_message][:data][:unblock_me]= unblock_me
298
+ else
299
+ answ_out[:body][:to_message][:data][:block_me] = data[:body][:for_block][:notblocked_stat]
300
+ answ_out[:body][:to_message][:data][:unblock_me] = data[:body][:for_unblock][:for_unblock_stat]
301
+ end
302
+
303
+ answ_out
304
+ end
305
+
151
306
  end
@@ -1,3 +1,3 @@
1
1
  module Imperituroard
2
- VERSION = "0.5.4"
2
+ VERSION = "1.0.0"
3
3
  end
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.5.4
4
+ version: 1.0.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-05-24 00:00:00.000000000 Z
11
+ date: 2020-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - '='
165
165
  - !ruby/object:Gem::Version
166
166
  version: 3.0.0
167
+ - !ruby/object:Gem::Dependency
168
+ name: rails
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - '='
172
+ - !ruby/object:Gem::Version
173
+ version: 5.0.7.2
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - '='
179
+ - !ruby/object:Gem::Version
180
+ version: 5.0.7.2
167
181
  description: Gem from imperituroard for different actions
168
182
  email:
169
183
  - imperituro.ard@gmail.com
@@ -188,16 +202,15 @@ files:
188
202
  - lib/imperituroard.rb
189
203
  - lib/imperituroard/.DS_Store
190
204
  - lib/imperituroard/add_functions/logger/any_functions.rb
205
+ - lib/imperituroard/platforms/cps/cps_multiple_thread_req.rb
191
206
  - lib/imperituroard/platforms/cps/qps_connector.rb
192
207
  - lib/imperituroard/platforms/cps/request_formatter.rb
193
208
  - lib/imperituroard/platforms/public/telegram.rb
209
+ - lib/imperituroard/platforms/staros/get_data_ssh.rb
210
+ - lib/imperituroard/platforms/staros/staros_automation.rb
211
+ - lib/imperituroard/platforms/staros/staros_automation_fun.rb
212
+ - lib/imperituroard/platforms/staros/staros_parser.rb
194
213
  - lib/imperituroard/projects/dns.rb
195
- - lib/imperituroard/projects/dns/ukaz60.rb
196
- - lib/imperituroard/projects/dns/ukaz60/belgim.rb
197
- - lib/imperituroard/projects/dns/ukaz60/dns.rb
198
- - lib/imperituroard/projects/dns/ukaz60/dns_update.rb
199
- - lib/imperituroard/projects/dns/ukaz60/fortigate.rb
200
- - lib/imperituroard/projects/dns/ukaz60/ukaz60_add_func.rb
201
214
  - lib/imperituroard/projects/iot.rb
202
215
  - lib/imperituroard/projects/iot/add_functions.rb
203
216
  - lib/imperituroard/projects/iot/hua_oceanconnect_adapter.rb
@@ -208,6 +221,13 @@ files:
208
221
  - lib/imperituroard/projects/mhub/sk.rb
209
222
  - lib/imperituroard/projects/mhub/subs/dabrab/dabrab_platform.rb
210
223
  - lib/imperituroard/projects/mhub/subs/dabrab/dabrab_proced.rb
224
+ - lib/imperituroard/projects/ukaz60.rb
225
+ - lib/imperituroard/projects/ukaz60/belgim.rb
226
+ - lib/imperituroard/projects/ukaz60/dns.rb
227
+ - lib/imperituroard/projects/ukaz60/dns_update.rb
228
+ - lib/imperituroard/projects/ukaz60/fortigate.rb
229
+ - lib/imperituroard/projects/ukaz60/staros.rb
230
+ - lib/imperituroard/projects/ukaz60/ukaz60_add_func.rb
211
231
  - lib/imperituroard/projects/vpn/ezuev_fun/functions_ezuev.rb
212
232
  - lib/imperituroard/projects/wttx/phpipamcps.rb
213
233
  - lib/imperituroard/projects/wttx/phpipamdb.rb
@@ -1,85 +0,0 @@
1
- require 'json'
2
-
3
- require 'imperituroard/projects/dns/ukaz60/belgim'
4
- require 'imperituroard/projects/dns/ukaz60/fortigate'
5
-
6
- class Ukaz60All_2
7
-
8
- attr_accessor :telegram_messanger,
9
- :belgim_login,
10
- :belgim_password,
11
- :belgim_url,
12
- :ukaz60_add_func,
13
- :belgim_connector,
14
- :forti_connector
15
-
16
- def initialize(telegram_api_url,
17
- telegram_chat_id,
18
- belgim_login,
19
- belgim_password,
20
- belgim_url,
21
- ansible_tmp_folder,
22
- local_tmp_directory,
23
- ansible_ssh_user,
24
- ansible_ssh_password,
25
- ansible_host,
26
- url_backup_dir)
27
- @telegram_messanger = Telegram_2.new(telegram_api_url, telegram_chat_id)
28
- @belgim_login = belgim_login
29
- @belgim_password = belgim_password
30
- @belgim_url = belgim_url
31
- @ukaz60_add_func = AddFuncUkaz60_2.new
32
- @belgim_connector = Belgim_2.new(telegram_api_url, telegram_chat_id, belgim_login, belgim_password, belgim_url)
33
- @forti_connector = FortiUkaz60_2.new(ansible_tmp_folder, local_tmp_directory, ansible_ssh_user, ansible_ssh_password, ansible_host, url_backup_dir)
34
-
35
- end
36
-
37
- def no_pasaran
38
-
39
- answer_output = {}
40
- forti_answer = {}
41
-
42
- begin
43
- get_belgim_data = belgim_connector.belgim_ukaz60_get
44
-
45
- if get_belgim_data[:code] == 200
46
-
47
- thr_forti = Thread.new do
48
- begin
49
- format_for_forti = forti_connector.prepare_url_config_fortigate(get_belgim_data)
50
- if format_for_forti[:code] == 200
51
- url_uploading = forti_connector.upload_url(format_for_forti[:body][:to_fortigate])
52
- if url_uploading[:code] == 200
53
- update_fortigate_ansible = forti_connector.update_weburl_fortigate
54
- if update_fortigate_ansible[:code] == 200
55
- forti_answer = {:code => 200, :result => "Fortigate processed", :data => update_fortigate_ansible[:body][:body]}
56
- else
57
- forti_answer = {:code => update_fortigate_ansible[:code], :result => update_fortigate_ansible[:result]}
58
- end
59
- forti_connector.clean_tmp_folders
60
- else
61
- forti_answer = {:code => 401, :result => "Failed for uploading data to ansible server"}
62
- end
63
- else
64
- forti_answer = {:code => 400, :result => "Error while processing data"}
65
- end
66
- rescue
67
- forti_answer = {:code => 507, :result => "Unknown error with Forti"}
68
- end
69
- end
70
-
71
- thr_forti.join
72
-
73
- answer_output = {:code => 200, :result => "No pasaran", :fortigate => forti_answer}
74
- else
75
- answer_output = {:code => 404, :result => "Failed to receive data from Belgim"}
76
- end
77
-
78
- rescue
79
- answer_output = {:code => 507, :result => "no_pasaran: Unknown SDK error"}
80
- end
81
- telegram_messanger.telegram_message(answer_output.to_s)
82
- answer_output
83
- end
84
-
85
- end