vipnet_parser 2.3.0 → 2.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d2caea835a3c858f8dc1365aa90455ae48467159
4
- data.tar.gz: e7109e83cbb774c6e92703229dd0e1638a3eaa52
3
+ metadata.gz: eaa3221fe438682301be1ece5f90a475d60c68bb
4
+ data.tar.gz: bd26ed5b99529a755ff15b06f50d60ea58f532af
5
5
  SHA512:
6
- metadata.gz: bf3ec6a75dacb9f48012ab479c91db70d37412d284dfd0693d7a3bb749ab44a45b7aa7be798e59a44544e8c2a60dc884ed5593c6b8e5b0e22d64fc7e32dbf9a2
7
- data.tar.gz: 5b09d6b457f242ba9c1fa80adbd79029dbbdbe21511a2747c6068b95062af368072472f0f02d774bed2b35751f3b08064ff91243998c27fed7842974fad53cb4
6
+ metadata.gz: 0f100d4b4f2625ffa68c94ceac7f34ca2db5d710a3d947e687e2dae9cc5872d0b9b2389f3f8b9457243f0336cc0b36797558507999d69a7759bf895ca2f4ec7d
7
+ data.tar.gz: ec4e7364811f3cb1d21557c2da28854b2ac7304436b7d4bd0b31887a570abba1b535787359ce902a2060f3a3123bf7592bd699d1caaf9bd889980af9d5f72d18
@@ -96,6 +96,87 @@ module VipnetParser
96
96
  parsed_config_version
97
97
  end
98
98
 
99
+ def downgrade(to)
100
+ # TODO: downgrade string too (need rebuild() first).
101
+ return false unless @hash
102
+ version = self.version
103
+ version =~ /^(?<minor_version>\d\.\d)\.*/
104
+ return false unless Regexp.last_match
105
+ minor_version = Regexp.last_match(:minor_version)
106
+
107
+ case to
108
+ when "3.x"
109
+ case minor_version
110
+ when "4.2"
111
+ new_hash = @hash.clone
112
+ props_to_delete = {
113
+ id: { any: %i(exclude_from_tunnels accessiplist) },
114
+ visibility: %i(tunneldefault subnet_real subnet_virtual),
115
+ misc: %i(
116
+ config_version timesync tunnel_local_network
117
+ ompnumthreads tcptunnel_establish tunnel_virt_assignment
118
+ ),
119
+ }
120
+ props_to_add = {
121
+ misc: [{ iparponly: "off" }],
122
+ }
123
+
124
+ @hash.each_key do |key|
125
+ # { a: 1, b: 2 }.map(&:first)
126
+ # =>
127
+ # [:a, :b]
128
+ next unless props_to_delete.map(&:first).include?(key)
129
+ props = props_to_delete[key]
130
+
131
+ # Delete new props.
132
+ hashes_to_delete = []
133
+ case props
134
+
135
+ # "id" key.
136
+ when Hash
137
+ props = props.values.first
138
+ subkeys = @hash[key].map(&:first)
139
+ subkeys.each do |subkey|
140
+ props.each do |prop|
141
+ hashes_to_delete.push([new_hash[key][subkey], prop])
142
+ end
143
+ end
144
+ else
145
+ props.each do |prop|
146
+ hashes_to_delete.push([new_hash[key], prop])
147
+ end
148
+ end
149
+ hashes_to_delete.each { |hash| hash.first.delete(hash.last) }
150
+ end
151
+
152
+ # Add default values of deprecated props.
153
+ props_to_add.each do |key, props|
154
+ props.each do |prop|
155
+ new_hash[key].merge!(prop)
156
+ end
157
+ end
158
+
159
+ # Move to old "ip" style.
160
+ new_hash[:id].each_key do |id|
161
+ next unless new_hash[:id][id][:ip]
162
+ new_hash[:id][id][:ip].each_with_index do |ip, i|
163
+ ip =~ /^(?<ip>.+),\s(?<accessip>.+)/
164
+ next unless Regexp.last_match
165
+ new_hash[:id][id][:ip][i] = Regexp.last_match(:ip)
166
+ end
167
+ end
168
+
169
+ @hash = new_hash
170
+
171
+ true
172
+ else
173
+ false
174
+ end
175
+ else
176
+ false
177
+ end
178
+ end
179
+
99
180
  def _section_hash(section_content, hash_key = nil)
100
181
  hash = {}
101
182
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vipnet_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Morozov