vipnet_parser 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
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