Skip to content

Commit ab2542e

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

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
@@ -27,6 +27,7 @@ tasks feasible.
2727
- [network_address_aliases_get](#user-content-network_address_aliases_get) - Returns address aliaes used by rules.
2828
- [network_address_aliases_create](#user-content-network_address_aliases_create) - Creates An network aliaes for rules
2929
- [network_address_aliases_update](#user-content-network_address_aliases_update) - Update a address aliaes. Returns newest result
30+
- [network_address_aliases_delete](#user-content-network_address_aliases_delete) - delete a address aliaes. Returns newest result
3031
- [filter_rules_get](#user-content-filter_rules_get) - Returns firewall filters.
3132

3233

@@ -992,14 +993,14 @@ curl \
992993
--insecure \
993994
--header "fauxapi-auth: <auth-value>" \
994995
--data '{"name": "wsdfan", "type": "network", "cidr_addresses": [{"address":"12.23.45.3/32", "details":"a"}], "descr":"Test"}'
995-
"https://<host-address>/fauxapi/v1/?action=network_address_aliases_create"
996+
"https://<host-address>/fauxapi/v1/?action=network_address_aliases_update"
996997
```
997998
998999
*Example Response*
9991000
```javascript
10001001
{
10011002
"callid": "5e22393a9aa5a",
1002-
"action": "network_address_aliases_create",
1003+
"action": "network_address_aliases_update",
10031004
"message": "ok",
10041005
"data": {
10051006
"aliases": {
@@ -1077,6 +1078,47 @@ curl \
10771078
}
10781079
```
10791080
---
1081+
### network_address_aliases_delete
1082+
- deletes a address aliaes. Returns newest result
1083+
- HTTP: **POST**
1084+
- Params: none
1085+
- Request body: json
1086+
- **name** :<string> name of aliases. identiy which aliase to delete
1087+
- Response: json <object>: the items after created
1088+
1089+
*Example Request*
1090+
```bash
1091+
curl \
1092+
-X GET \
1093+
--silent \
1094+
--insecure \
1095+
--header "fauxapi-auth: <auth-value>" \
1096+
--data '{"name": "wsdfan"}'
1097+
"https://<host-address>/fauxapi/v1/?action=network_address_aliases_delete"
1098+
```
1099+
1100+
*Example Response*
1101+
```javascript
1102+
{
1103+
"callid": "5e22393a9aa5a",
1104+
"action": "network_address_aliases_delete",
1105+
"message": "ok",
1106+
"data": {
1107+
"aliases": {
1108+
"alias": [
1109+
{
1110+
"name": "EasyRuleBlockHostsWAN",
1111+
"type": "network",
1112+
"address": "1.2.3.4/32 5.6.7.8/32",
1113+
"descr": "Hosts blocked from Firewall Log view",
1114+
"detail": "Entry added Fri, 27 Dec 2019 00:53:01 -0800||\u5df2\u6dfb\u52a0\u6761\u76ee Thu, 16 Jan 2020 03:42:37 -0800"
1115+
}
1116+
]
1117+
}
1118+
}
1119+
}
1120+
```
1121+
---
10801122
### filter_rules_get
10811123
- Returns firewall filters.
10821124
- 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
@@ -527,6 +527,31 @@ class fauxApiActions {
527527
);
528528
return TRUE;
529529
}
530+
531+
/**
532+
* network_address_aliases_update()
533+
*
534+
* @return boolean
535+
*/
536+
public function network_address_aliases_delete() {
537+
fauxApiLogger::debug(__METHOD__);
538+
539+
$name = $this->action_input_data["name"];
540+
541+
$alias = $this->PfsenseInterface->network_address_aliases_delete($name);
542+
543+
if (empty($alias)) {
544+
$this->response->http_code = 500;
545+
$this->response->message = 'unable to get address aliases';
546+
return FALSE;
547+
}
548+
$this->response->http_code = 200;
549+
$this->response->message = 'ok';
550+
$this->response->data = array(
551+
'aliases' => $alias,
552+
);
553+
return TRUE;
554+
}
530555

531556
/**
532557
* 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)