]>
git.proxmox.com Git - pve-firewall.git/blob - src/PVE/API2/Firewall/Aliases.pm
86393e6d29192b03bf485997475e6a758b9380c2
1 package PVE
::API2
::Firewall
::AliasesBase
;
5 use PVE
::Exception
qw(raise raise_param_exc);
6 use PVE
::JSONSchema
qw(get_standard_option);
10 use base
qw(PVE::RESTHandler);
12 my $api_properties = {
14 description
=> "Network/IP specification in CIDR format.",
15 type
=> 'string', format
=> 'IPv4orCIDR',
17 name
=> get_standard_option
('pve-fw-alias'),
25 my ($class, $param) = @_;
27 die "implement this in subclass";
29 #return ($fw_conf, $rules);
33 my ($class, $param, $fw_conf, $aliases) = @_;
35 die "implement this in subclass";
38 my $additional_param_hash = {};
40 sub additional_parameters
{
41 my ($class, $new_value) = @_;
43 if (defined($new_value)) {
44 $additional_param_hash->{$class} = $new_value;
49 my $org = $additional_param_hash->{$class} || {};
50 foreach my $p (keys %$org) { $copy->{$p} = $org->{$p}; }
54 my $aliases_to_list = sub {
58 foreach my $k (sort keys %$aliases) {
59 push @$list, $aliases->{$k};
64 sub register_get_aliases
{
67 my $properties = $class->additional_parameters();
69 $class->register_method({
70 name
=> 'get_aliases',
73 description
=> "List aliases",
75 additionalProperties
=> 0,
76 properties
=> $properties,
83 name
=> { type
=> 'string' },
84 cidr
=> { type
=> 'string' },
89 digest
=> get_standard_option
('pve-config-digest', { optional
=> 0} ),
92 links
=> [ { rel
=> 'child', href
=> "{name}" } ],
97 my ($fw_conf, $aliases) = $class->load_config($param);
99 my $list = &$aliases_to_list($aliases);
101 return PVE
::Firewall
::copy_list_with_digest
($list);
105 sub register_create_alias
{
108 my $properties = $class->additional_parameters();
110 $properties->{name
} = $api_properties->{name
};
111 $properties->{cidr
} = $api_properties->{cidr
};
112 $properties->{comment
} = $api_properties->{comment
};
114 $class->register_method({
115 name
=> 'create_alias',
118 description
=> "Create IP or Network Alias.",
121 additionalProperties
=> 0,
122 properties
=> $properties,
124 returns
=> { type
=> "null" },
128 my ($fw_conf, $aliases) = $class->load_config($param);
130 my $name = lc($param->{name
});
132 raise_param_exc
({ name
=> "alias '$param->{name}' already exists" })
133 if defined($aliases->{$name});
135 my $data = { name
=> $param->{name
}, cidr
=> $param->{cidr
} };
136 $data->{comment
} = $param->{comment
} if $param->{comment
};
138 $aliases->{$name} = $data;
140 $class->save_aliases($param, $fw_conf, $aliases);
146 sub register_read_alias
{
149 my $properties = $class->additional_parameters();
151 $properties->{name
} = $api_properties->{name
};
152 $properties->{cidr
} = $api_properties->{cidr
};
154 $class->register_method({
155 name
=> 'read_alias',
158 description
=> "Read alias.",
160 additionalProperties
=> 0,
161 properties
=> $properties,
163 returns
=> { type
=> "object" },
167 my ($fw_conf, $aliases) = $class->load_config($param);
169 my $name = lc($param->{name
});
171 raise_param_exc
({ name
=> "no such alias" })
172 if !defined($aliases->{$name});
174 return $aliases->{$name};
178 sub register_update_alias
{
181 my $properties = $class->additional_parameters();
183 $properties->{name
} = $api_properties->{name
};
184 $properties->{cidr
} = $api_properties->{cidr
};
185 $properties->{comment
} = $api_properties->{comment
};
186 $properties->{digest
} = get_standard_option
('pve-config-digest');
188 $class->register_method({
189 name
=> 'update_alias',
192 description
=> "Update IP or Network alias.",
195 additionalProperties
=> 0,
196 properties
=> $properties,
198 returns
=> { type
=> "null" },
202 my ($fw_conf, $aliases) = $class->load_config($param);
204 my $list = &$aliases_to_list($aliases);
206 my (undef, $digest) = PVE
::Firewall
::copy_list_with_digest
($list);
208 PVE
::Tools
::assert_if_modified
($digest, $param->{digest
});
210 my $name = lc($param->{name
});
212 raise_param_exc
({ name
=> "no such alias" }) if !$aliases->{$name};
214 my $data = { name
=> $param->{name
}, cidr
=> $param->{cidr
} };
215 $data->{comment
} = $param->{comment
} if $param->{comment
};
217 $aliases->{$name} = $data;
219 $class->save_aliases($param, $fw_conf, $aliases);
223 sub register_delete_alias
{
226 my $properties = $class->additional_parameters();
228 $properties->{name
} = $api_properties->{name
};
229 $properties->{cidr
} = $api_properties->{cidr
};
230 $properties->{digest
} = get_standard_option
('pve-config-digest');
232 $class->register_method({
233 name
=> 'remove_alias',
236 description
=> "Remove IP or Network alias.",
239 additionalProperties
=> 0,
240 properties
=> $properties,
242 returns
=> { type
=> "null" },
246 my ($fw_conf, $aliases) = $class->load_config($param);
248 my $list = &$aliases_to_list($aliases);
249 my (undef, $digest) = PVE
::Firewall
::copy_list_with_digest
($list);
250 PVE
::Tools
::assert_if_modified
($digest, $param->{digest
});
252 my $name = lc($param->{name
});
253 delete $aliases->{$name};
255 $class->save_aliases($param, $fw_conf, $aliases);
261 sub register_handlers
{
264 $class->register_get_aliases();
265 $class->register_create_alias();
266 $class->register_read_alias();
267 $class->register_update_alias();
268 $class->register_delete_alias();
271 package PVE
::API2
::Firewall
::ClusterAliases
;
276 use base
qw(PVE::API2::Firewall::AliasesBase);
279 my ($class, $param) = @_;
281 my $fw_conf = PVE
::Firewall
::load_clusterfw_conf
();
282 my $aliases = $fw_conf->{aliases
};
284 return ($fw_conf, $aliases);
288 my ($class, $param, $fw_conf, $aliases) = @_;
290 $fw_conf->{aliases
} = $aliases;
291 PVE
::Firewall
::save_clusterfw_conf
($fw_conf);
294 __PACKAGE__-
>register_handlers();