find a specific firewall rule in the linked list
This commit is contained in:
parent
945f1fd3b6
commit
f1dbc95de5
2 changed files with 37 additions and 8 deletions
|
@ -7,6 +7,15 @@ ESPFirewall::ESPFirewall(int port)
|
||||||
this->setup_routing();
|
this->setup_routing();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ESPFirewall::prepare_firewall_json(DynamicJsonDocument &json, firewall_rule_t *rule)
|
||||||
|
{
|
||||||
|
json["key"] = rule->key;
|
||||||
|
json["source"] = rule->source;
|
||||||
|
json["destination"] = rule->destination;
|
||||||
|
json["protocol"] = rule->protocol;
|
||||||
|
json["target"] = rule->target;
|
||||||
|
}
|
||||||
|
|
||||||
void ESPFirewall::add_rule_to_firewall(firewall_rule_t *rule)
|
void ESPFirewall::add_rule_to_firewall(firewall_rule_t *rule)
|
||||||
{
|
{
|
||||||
firewall_rule_t *temp;
|
firewall_rule_t *temp;
|
||||||
|
@ -52,10 +61,33 @@ void ESPFirewall::get_firewall_rule_handler(AsyncWebServerRequest *request)
|
||||||
int rule_number = request->pathArg(0).toInt();
|
int rule_number = request->pathArg(0).toInt();
|
||||||
DynamicJsonDocument json(1024);
|
DynamicJsonDocument json(1024);
|
||||||
String response;
|
String response;
|
||||||
json["message"] = "get firewall rule";
|
firewall_rule_t *current = this->head;
|
||||||
json["key"] = rule_number;
|
|
||||||
|
if (head == NULL)
|
||||||
|
{
|
||||||
|
json["message"] = "list is empty";
|
||||||
|
serializeJson(json, response);
|
||||||
|
request->send(500, "application/json", response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (current->key != rule_number)
|
||||||
|
{
|
||||||
|
if (current->next == NULL)
|
||||||
|
{
|
||||||
|
json["message"] = "rule not found";
|
||||||
|
serializeJson(json, response);
|
||||||
|
request->send(500, "application/json", response);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
current = current->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
prepare_firewall_json(json, current);
|
||||||
serializeJson(json, response);
|
serializeJson(json, response);
|
||||||
request->send(404, "application/json", response);
|
request->send(200, "application/json", response);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ESPFirewall::post_firewall_handler(AsyncWebServerRequest *request)
|
void ESPFirewall::post_firewall_handler(AsyncWebServerRequest *request)
|
||||||
|
@ -82,11 +114,7 @@ void ESPFirewall::post_firewall_handler(AsyncWebServerRequest *request)
|
||||||
|
|
||||||
add_rule_to_firewall(rule);
|
add_rule_to_firewall(rule);
|
||||||
|
|
||||||
json["key"] = rule->key;
|
prepare_firewall_json(json, rule);
|
||||||
json["source"] = rule->source;
|
|
||||||
json["destination"] = rule->destination;
|
|
||||||
json["protocol"] = rule->protocol;
|
|
||||||
json["target"] = rule->target;
|
|
||||||
response_code = 200;
|
response_code = 200;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -32,6 +32,7 @@ class ESPFirewall
|
||||||
unsigned int amount_of_rules = 0;
|
unsigned int amount_of_rules = 0;
|
||||||
struct firewall_rule *head = NULL;
|
struct firewall_rule *head = NULL;
|
||||||
|
|
||||||
|
void prepare_firewall_json(DynamicJsonDocument &json, firewall_rule_t *rule);
|
||||||
void add_rule_to_firewall(firewall_rule_t *rule);
|
void add_rule_to_firewall(firewall_rule_t *rule);
|
||||||
void get_firewall_rules_handler(AsyncWebServerRequest *request);
|
void get_firewall_rules_handler(AsyncWebServerRequest *request);
|
||||||
void get_firewall_rule_handler(AsyncWebServerRequest *request);
|
void get_firewall_rule_handler(AsyncWebServerRequest *request);
|
||||||
|
|
Reference in a new issue