Skip to content

Commit ca0a39a

Browse files
committed
Alias Management: delete - network_address_aliases_delete
Signed-off-by: lilinzhe <[email protected]>
1 parent 046fb11 commit ca0a39a

File tree

4 files changed

+170
-3
lines changed

4 files changed

+170
-3
lines changed

README.md

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ tasks feasible.
2626
- [network_address_aliases_get](#user-content-network_address_aliases_get) - Returns address aliaes used by rules.
2727
- [network_address_aliases_create](#user-content-network_address_aliases_create) - Creates An network aliaes for rules
2828
- [network_address_aliases_update](#user-content-network_address_aliases_update) - Update a address aliaes. Returns newest result
29+
- [network_address_aliases_delete](#user-content-network_address_aliases_delete) - delete a address aliaes. Returns newest result
2930
- [filter_rules_get](#user-content-filter_rules_get) - Returns firewall filters.
3031

3132

@@ -984,14 +985,14 @@ curl \
984985
--insecure \
985986
--header "fauxapi-auth: <auth-value>" \
986987
--data '{"name": "wsdfan", "type": "network", "cidr_addresses": [{"address":"12.23.45.3/32", "details":"a"}], "descr":"Test"}'
987-
"https://<host-address>/fauxapi/v1/?action=network_address_aliases_create"
988+
"https://<host-address>/fauxapi/v1/?action=network_address_aliases_update"
988989
```
989990
990991
*Example Response*
991992
```javascript
992993
{
993994
"callid": "5e22393a9aa5a",
994-
"action": "network_address_aliases_create",
995+
"action": "network_address_aliases_update",
995996
"message": "ok",
996997
"data": {
997998
"aliases": {
@@ -1016,6 +1017,47 @@ curl \
10161017
}
10171018
```
10181019
---
1020+
### network_address_aliases_delete
1021+
- deletes a address aliaes. Returns newest result
1022+
- HTTP: **POST**
1023+
- Params: none
1024+
- Request body: json
1025+
- **name** :<string> name of aliases. identiy which aliase to delete
1026+
- Response: json <object>: the items after created
1027+
1028+
*Example Request*
1029+
```bash
1030+
curl \
1031+
-X GET \
1032+
--silent \
1033+
--insecure \
1034+
--header "fauxapi-auth: <auth-value>" \
1035+
--data '{"name": "wsdfan"}'
1036+
"https://<host-address>/fauxapi/v1/?action=network_address_aliases_delete"
1037+
```
1038+
1039+
*Example Response*
1040+
```javascript
1041+
{
1042+
"callid": "5e22393a9aa5a",
1043+
"action": "network_address_aliases_delete",
1044+
"message": "ok",
1045+
"data": {
1046+
"aliases": {
1047+
"alias": [
1048+
{
1049+
"name": "EasyRuleBlockHostsWAN",
1050+
"type": "network",
1051+
"address": "1.2.3.4/32 5.6.7.8/32",
1052+
"descr": "Hosts blocked from Firewall Log view",
1053+
"detail": "Entry added Fri, 27 Dec 2019 00:53:01 -0800||\u5df2\u6dfb\u52a0\u6761\u76ee Thu, 16 Jan 2020 03:42:37 -0800"
1054+
}
1055+
]
1056+
}
1057+
}
1058+
}
1059+
```
1060+
---
10191061
### filter_rules_get
10201062
- Returns firewall filters.
10211063
- HTTP: **GET**

pfSense-pkg-FauxAPI/files/etc/inc/fauxapi/fauxapi_actions.inc

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,31 @@ class fauxApiActions {
504504
);
505505
return TRUE;
506506
}
507+
508+
/**
509+
* network_address_aliases_update()
510+
*
511+
* @return boolean
512+
*/
513+
public function network_address_aliases_delete() {
514+
fauxApiLogger::debug(__METHOD__);
515+
516+
$name = $this->action_input_data["name"];
517+
518+
$alias = $this->PfsenseInterface->network_address_aliases_delete($name);
519+
520+
if (empty($alias)) {
521+
$this->response->http_code = 500;
522+
$this->response->message = 'unable to get address aliases';
523+
return FALSE;
524+
}
525+
$this->response->http_code = 200;
526+
$this->response->message = 'ok';
527+
$this->response->data = array(
528+
'aliases' => $alias,
529+
);
530+
return TRUE;
531+
}
507532

508533
/**
509534
* alias_update_urltables()

pfSense-pkg-FauxAPI/files/etc/inc/fauxapi/fauxapi_pfsense_interface_alias.inc

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,32 @@ trait network_address_aliases
127127
fauxApiLogger::debug(__METHOD__, array(
128128
'name' => $name
129129
));
130-
$pconfig=NULL;
130+
$idx = -1;
131131
for ($id = 0; $id < count($config["aliases"]["alias"]); $id+=1) {
132+
if ($config["aliases"]["alias"][$id]['name'] == $name) {
133+
$idx=$id;
134+
break;
135+
}
136+
}
137+
if ($idx == -1) {
138+
//not find
139+
$error_message = "not find name";
140+
$error_data = array('name' => $name);
141+
fauxApiLogger::error($error_message, $error_data);
142+
throw new \Exception($error_message);
143+
}
144+
$usederrmsg = fauxApiInterfaceAliasTools::is_alias_used($name);
145+
if ($usederrmsg) {
146+
$error_message = $usederrmsg;
147+
$error_data = array('name'=>$name);
148+
fauxApiLogger::error($error_message, $error_data);
149+
throw new \Exception($error_message);
150+
}
151+
\array_splice($config["aliases"]["alias"], $idx, 1);
152+
if (!fauxApiInterfaceAliasTools::write_config_aliases()) {
153+
return NULL;
132154
}
133155

156+
return $config["aliases"];
134157
}
135158
}

pfSense-pkg-FauxAPI/files/etc/inc/fauxapi/fauxapi_pfsense_interface_alias.priv.inc

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,83 @@ class fauxApiInterfaceAliasTools
142142
}
143143
}
144144

145+
public static function find_alias_reference($section, $field, $origname, &$is_alias_referenced, &$referenced_by) {
146+
global $config;
147+
if (!$origname || $is_alias_referenced) {
148+
return;
149+
}
150+
151+
$sectionref = &$config;
152+
foreach ($section as $sectionname) {
153+
if (is_array($sectionref) && isset($sectionref[$sectionname])) {
154+
$sectionref = &$sectionref[$sectionname];
155+
} else {
156+
return;
157+
}
158+
}
159+
160+
if (is_array($sectionref)) {
161+
foreach ($sectionref as $itemkey => $item) {
162+
$fieldfound = true;
163+
$fieldref = &$sectionref[$itemkey];
164+
foreach ($field as $fieldname) {
165+
if (is_array($fieldref) && isset($fieldref[$fieldname])) {
166+
$fieldref = &$fieldref[$fieldname];
167+
} else {
168+
$fieldfound = false;
169+
break;
170+
}
171+
}
172+
if ($fieldfound && $fieldref == $origname) {
173+
$is_alias_referenced = true;
174+
if (is_array($item)) {
175+
$referenced_by = $item['descr'];
176+
}
177+
break;
178+
}
179+
}
180+
}
181+
}
182+
183+
public static function is_alias_used($alias_name){
184+
$is_alias_referenced = false;
185+
$referenced_by = false;
186+
187+
// Firewall rules
188+
fauxApiInterfaceAliasTools::find_alias_reference(array('filter', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
189+
fauxApiInterfaceAliasTools::find_alias_reference(array('filter', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
190+
fauxApiInterfaceAliasTools::find_alias_reference(array('filter', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
191+
fauxApiInterfaceAliasTools::find_alias_reference(array('filter', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
192+
// NAT Rules
193+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'rule'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
194+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'rule'), array('source', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
195+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
196+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'rule'), array('destination', 'port'), $alias_name, $is_alias_referenced, $referenced_by);
197+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by);
198+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'rule'), array('local-port'), $alias_name, $is_alias_referenced, $referenced_by);
199+
// NAT 1:1 Rules
200+
//fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'onetoone'), array('external'), $alias_name, $is_alias_referenced, $referenced_by);
201+
//fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'onetoone'), array('source', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
202+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'onetoone'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
203+
// NAT Outbound Rules
204+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'outbound', 'rule'), array('source', 'network'), $alias_name, $is_alias_referenced, $referenced_by);
205+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'outbound', 'rule'), array('sourceport'), $alias_name, $is_alias_referenced, $referenced_by);
206+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'outbound', 'rule'), array('destination', 'address'), $alias_name, $is_alias_referenced, $referenced_by);
207+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'outbound', 'rule'), array('dstport'), $alias_name, $is_alias_referenced, $referenced_by);
208+
fauxApiInterfaceAliasTools::find_alias_reference(array('nat', 'outbound', 'rule'), array('target'), $alias_name, $is_alias_referenced, $referenced_by);
209+
// Alias in an alias
210+
fauxApiInterfaceAliasTools::find_alias_reference(array('aliases', 'alias'), array('address'), $alias_name, $is_alias_referenced, $referenced_by);
211+
// Load Balancer
212+
fauxApiInterfaceAliasTools::find_alias_reference(array('load_balancer', 'lbpool'), array('port'), $alias_name, $is_alias_referenced, $referenced_by);
213+
fauxApiInterfaceAliasTools::find_alias_reference(array('load_balancer', 'virtual_server'), array('port'), $alias_name, $is_alias_referenced, $referenced_by);
214+
// Static routes
215+
fauxApiInterfaceAliasTools::find_alias_reference(array('staticroutes', 'route'), array('network'), $alias_name, $is_alias_referenced, $referenced_by);
216+
if ($is_alias_referenced) {
217+
return $referenced_by;
218+
}
219+
return NULL;
220+
}
221+
145222

146223
}
147224

0 commit comments

Comments
 (0)