diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 51f49fcc2..03e30ee90 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -24,7 +24,7 @@ jobs:
freebsd_id: freebsd15
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Setup FreeBSD build VM
run: |
/usr/local/bin/VBoxManage controlvm ${{ matrix.freebsd_version }} poweroff || true
@@ -43,7 +43,7 @@ jobs:
/usr/local/bin/VBoxManage controlvm ${{ matrix.freebsd_version }} poweroff || true
/usr/local/bin/VBoxManage snapshot ${{matrix.freebsd_version}} restore initial
- - uses: actions/upload-artifact@v4
+ - uses: actions/upload-artifact@v6
with:
name: pfSense-pkg-API-${{ env.build_version }}_${{ matrix.freebsd_id }}.pkg
path: pfSense-pkg-API-${{ env.build_version }}_${{ matrix.freebsd_id }}.pkg
@@ -61,9 +61,9 @@ jobs:
freebsd_id: freebsd14
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- - uses: actions/download-artifact@v4
+ - uses: actions/download-artifact@v7
with:
name: pfSense-pkg-API-${{ env.build_version }}_${{ matrix.freebsd_id }}.pkg
path: pfSense-pkg-API-${{ env.build_version }}_${{ matrix.freebsd_id }}.pkg
diff --git a/.github/workflows/quality.yml b/.github/workflows/quality.yml
index 544ca36b9..d3dc72f64 100644
--- a/.github/workflows/quality.yml
+++ b/.github/workflows/quality.yml
@@ -9,7 +9,7 @@ jobs:
matrix:
php-version: [ "8.2" ]
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: "Setup PHP ${{ matrix.php-version }}"
uses: shivammathur/setup-php@v2
with:
@@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
needs: [lint_php]
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Lint OpenAPI spec
uses: vaibhav-jain/spectral-action/@v2.6
with:
@@ -36,11 +36,11 @@ jobs:
needs: [lint_php]
strategy:
matrix:
- python-version: ["3.8", "3.9", "3.10"]
+ python-version: ["3.10", "3.11"]
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Set up Python ${{ matrix.python-version }}
- uses: actions/setup-python@v5
+ uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 5dd95bbed..f2ac0fab6 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -16,13 +16,13 @@ jobs:
include:
- freebsd_version: FreeBSD-14.0-CURRENT
pfsense_version: 2.7
- - freebsd_version: FreeBSD-14.0-CURRENT
- pfsense_version: 23.09
+ - freebsd_version: FreeBSD-15.0-CURRENT
+ pfsense_version: 24.11
- freebsd_version: FreeBSD-15.0-CURRENT
pfsense_version: 24.03
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
- name: Setup FreeBSD build VM
run: |
/usr/local/bin/VBoxManage controlvm ${{ matrix.freebsd_version }} poweroff || true
diff --git a/README.md b/README.md
index 4215e762e..df4e2a26d 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,10 @@
# pfSense-API
+> [!NOTE]
+> You are currently viewing the documentation for the legacy v1 package. While this package is still supported and
+> maintained, it is recommended to use the new v2 package for new installations to continue receiving the latest
+> features and updates. You can find the documentation for the new v2 package [here](https://pfrest.org).
+
[](https://github.com/jaredhendrickson13/pfsense-api/actions/workflows/build.yml)
[](https://github.com/jaredhendrickson13/pfsense-api/actions/workflows/quality.yml)
[](https://github.com/jaredhendrickson13/pfsense-api/actions/workflows/release.yml)
@@ -43,7 +48,7 @@ are made preventing the need for a reboot. All this results in the fastest, safe
To install pfSense API, simply run the following command from the pfSense shell:
```
-pkg -C /dev/null add https://github.com/jaredhendrickson13/pfsense-api/releases/latest/download/pfSense-2.7-pkg-API.pkg && /etc/rc.restart_webgui
+pkg -C /dev/null add https://github.com/jaredhendrickson13/pfsense-api/releases/download/v1.7.6/pfSense-2.7-pkg-API.pkg && /etc/rc.restart_webgui
```
diff --git a/composer.json b/composer.json
index 1f6122538..8670607cf 100644
--- a/composer.json
+++ b/composer.json
@@ -1,5 +1,5 @@
{
"require": {
- "firebase/php-jwt": "v6.10.*"
+ "firebase/php-jwt": "v7.0.*"
}
}
diff --git a/composer.lock b/composer.lock
index 799b8d92c..8d86a5a7d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,30 +4,30 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "4f4c86b9227b9325c9ae20c18dbb69b1",
+ "content-hash": "0692143f91915ea6bb4bf8648d9d4014",
"packages": [
{
"name": "firebase/php-jwt",
- "version": "v6.10.0",
+ "version": "v7.0.2",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
- "reference": "a49db6f0a5033aef5143295342f1c95521b075ff"
+ "reference": "5645b43af647b6947daac1d0f659dd1fbe8d3b65"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff",
- "reference": "a49db6f0a5033aef5143295342f1c95521b075ff",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/5645b43af647b6947daac1d0f659dd1fbe8d3b65",
+ "reference": "5645b43af647b6947daac1d0f659dd1fbe8d3b65",
"shasum": ""
},
"require": {
- "php": "^7.4||^8.0"
+ "php": "^8.0"
},
"require-dev": {
- "guzzlehttp/guzzle": "^6.5||^7.4",
+ "guzzlehttp/guzzle": "^7.4",
"phpspec/prophecy-phpunit": "^2.0",
"phpunit/phpunit": "^9.5",
- "psr/cache": "^1.0||^2.0",
+ "psr/cache": "^2.0||^3.0",
"psr/http-client": "^1.0",
"psr/http-factory": "^1.0"
},
@@ -65,18 +65,18 @@
],
"support": {
"issues": "https://github.com/firebase/php-jwt/issues",
- "source": "https://github.com/firebase/php-jwt/tree/v6.10.0"
+ "source": "https://github.com/firebase/php-jwt/tree/v7.0.2"
},
- "time": "2023-12-01T16:26:39+00:00"
+ "time": "2025-12-16T22:17:28+00:00"
}
],
"packages-dev": [],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
- "platform": [],
- "platform-dev": [],
+ "platform": {},
+ "platform-dev": {},
"plugin-api-version": "2.6.0"
}
diff --git a/docs/SECURITY.md b/docs/SECURITY.md
index bf3b3f6b8..c765e0aa3 100644
--- a/docs/SECURITY.md
+++ b/docs/SECURITY.md
@@ -5,10 +5,10 @@
Below are versions that are currently supported and will receive security updates when available.
| Version | Supported |
-|---------| ------------------ |
-| 1.7.x | :white_check_mark: |
-| 1.6.x | :white_check_mark: |
-| <=1.5.x | :x: |
+|---------|--------------------|
+| 2.7.x | :white_check_mark: |
+| <=1.7.x | :x: |
+
## Reporting a Vulnerability
diff --git a/pfSense-pkg-API/files/etc/inc/api/framework/APIAuth.inc b/pfSense-pkg-API/files/etc/inc/api/framework/APIAuth.inc
index 0f1c71640..9cbb2e2c3 100644
--- a/pfSense-pkg-API/files/etc/inc/api/framework/APIAuth.inc
+++ b/pfSense-pkg-API/files/etc/inc/api/framework/APIAuth.inc
@@ -129,7 +129,10 @@ class APIAuth {
public function authorize() {
# Local variables
$authorized = false;
- $client_config =& getUserEntry($this->username);;
+
+ # Starting with pfSense Plus 24.11, the client config is nested under an 'item' key. Handle both cases.
+ $client_config =& getUserEntry($this->username);
+ $client_config = (array_key_exists('item', $client_config)) ? $client_config['item'] : $client_config;
$this->privs = get_user_privileges($client_config);
# If no require privileges were given, assume call is always authorized
diff --git a/pfSense-pkg-API/files/etc/inc/api/framework/APIResponse.inc b/pfSense-pkg-API/files/etc/inc/api/framework/APIResponse.inc
index cb0c32a84..b50009a45 100644
--- a/pfSense-pkg-API/files/etc/inc/api/framework/APIResponse.inc
+++ b/pfSense-pkg-API/files/etc/inc/api/framework/APIResponse.inc
@@ -4167,6 +4167,12 @@ function get($id, $data=[], $all=false) {
"return" => $id,
"message" => "Firewall rules can only be applied to one interface unless it is a floating rule"
],
+ 4249 => [
+ "status" => "bad request",
+ "code" => 400,
+ "return" => $id,
+ "message" => "Port forward associated rule ID must be a valid option. Options are pass or an empty string"
+ ],
//5000-5999 reserved for /api/v1/user API calls
5000 => [
diff --git a/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardCreate.inc b/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardCreate.inc
index 04754f2f6..324eccc5c 100644
--- a/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardCreate.inc
+++ b/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardCreate.inc
@@ -208,6 +208,23 @@ class APIFirewallNATPortForwardCreate extends APIModel {
}
}
+ private function __validate_associated_rule_id() {
+ # Optionally allow client to specify an associated rule ID
+ if (isset($this->initial_data["associated-rule-id"])) {
+ # Ensure the associated rule id is a valid option
+ if (in_array($this->initial_data["associated-rule-id"], ["pass", ""])) {
+ $this->validated_data["associated-rule-id"] = $this->initial_data["associated-rule-id"];
+ }
+ else {
+ $this->errors[] = APIResponse\get(4249);
+ }
+ }
+ # Default to 'pass'
+ else {
+ $this->validated_data["associated-rule-id"] = "pass";
+ }
+ }
+
public function validate_payload() {
# Run each field validator method
$this->__validate_interface();
@@ -223,10 +240,10 @@ class APIFirewallNATPortForwardCreate extends APIModel {
$this->__validate_nosync();
$this->__validate_descr();
$this->__validate_natreflection();
+ $this->__validate_associated_rule_id();
# Add static field values
$this->created_by_msg = $this->client->username."@".$this->client->ip_address." (API)";
- $this->validated_data["associated-rule-id"] = "pass";
$this->validated_data["created"] = array("time" => time(), "username" => $this->created_by_msg);
$this->validated_data["updated"] = $this->validated_data["created"];
}
diff --git a/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardUpdate.inc b/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardUpdate.inc
index e0378dd03..4b450466c 100644
--- a/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardUpdate.inc
+++ b/pfSense-pkg-API/files/etc/inc/api/models/APIFirewallNATPortForwardUpdate.inc
@@ -249,6 +249,19 @@ class APIFirewallNATPortForwardUpdate extends APIModel {
}
}
+ private function __validate_associated_rule_id() {
+ # Optionally allow client to specify an associated rule ID
+ if (isset($this->initial_data["associated-rule-id"])) {
+ # Ensure the associated rule id is a valid option
+ if (in_array($this->initial_data["associated-rule-id"], ["pass", ""])) {
+ $this->validated_data["associated-rule-id"] = $this->initial_data["associated-rule-id"];
+ }
+ else {
+ $this->errors[] = APIResponse\get(4249);
+ }
+ }
+ }
+
public function validate_payload() {
# Run each field validator method
$this->__validate_id();
@@ -265,10 +278,10 @@ class APIFirewallNATPortForwardUpdate extends APIModel {
$this->__validate_nosync();
$this->__validate_descr();
$this->__validate_natreflection();
+ $this->__validate_associated_rule_id();
# Add static field values
$this->updated_by_msg = $this->client->username."@".$this->client->ip_address." (API)";
- $this->validated_data["associated-rule-id"] = "pass";
$this->validated_data["updated"] = array("time" => time(), "username" => $this->updated_by_msg);
}
}
diff --git a/pfSense-pkg-API/files/etc/inc/api/models/APISystemAPIVersionRead.inc b/pfSense-pkg-API/files/etc/inc/api/models/APISystemAPIVersionRead.inc
index dd6a64bf6..b1446c0c1 100644
--- a/pfSense-pkg-API/files/etc/inc/api/models/APISystemAPIVersionRead.inc
+++ b/pfSense-pkg-API/files/etc/inc/api/models/APISystemAPIVersionRead.inc
@@ -73,7 +73,7 @@ class APISystemAPIVersionRead extends APIModel {
# Variables
$releases_file = "/usr/local/share/pfSense-pkg-API/releases.json";
$releases = json_decode(file_get_contents($releases_file), true);
- $fetch_releases_cmd = "curl -s https://api.github.com/repos/jaredhendrickson13/pfsense-api/releases -m 10";
+ $fetch_releases_cmd = "curl -sL https://api.github.com/repos/jaredhendrickson13/pfsense-api/releases -m 10";
# Check if our previous releases data is older than 120 seconds
if ($releases["last_updated"] + 120 < time()) {
diff --git a/pfSense-pkg-API/files/etc/inc/api/models/APISystemCertificateCreate.inc b/pfSense-pkg-API/files/etc/inc/api/models/APISystemCertificateCreate.inc
index 04e40dedb..e6a779979 100644
--- a/pfSense-pkg-API/files/etc/inc/api/models/APISystemCertificateCreate.inc
+++ b/pfSense-pkg-API/files/etc/inc/api/models/APISystemCertificateCreate.inc
@@ -38,7 +38,7 @@ class APISystemCertificateCreate extends APIModel {
$this->set_config("cert/{$this->id}", $this->validated_data);
# If user requests this cert to be active, configure it as the wc cert
- if ($this->initial_data["active"] === true and $this->validated_data["type"] === "server") {
+ if ($this->initial_data["active"] === true) {
$this->set_config("system/webgui/ssl-certref", $this->validated_data["refid"]);
}
@@ -63,7 +63,6 @@ class APISystemCertificateCreate extends APIModel {
if ($this->cert_method === "existing") {
$this->__validate_crt();
$this->__validate_prv();
- $this->validated_data["type"] = "server";
}
# Validate 'internal' method fields
diff --git a/pfSense-pkg-API/files/usr/local/pkg/api.xml b/pfSense-pkg-API/files/usr/local/pkg/api.xml
index ae4c496e9..5e13b6a0a 100644
--- a/pfSense-pkg-API/files/usr/local/pkg/api.xml
+++ b/pfSense-pkg-API/files/usr/local/pkg/api.xml
@@ -8,7 +8,7 @@
* API
* - The missing REST API package for pfSense
*
- * Copyright 2023 Jared Hendrickson
+ *Copyright 2019-2025 Jared Hendrickson
*/
]]>
diff --git a/pfSense-pkg-API/files/usr/local/www/api/documentation/index.php b/pfSense-pkg-API/files/usr/local/www/api/documentation/index.php
index adc59eddd..a8abc835d 100644
--- a/pfSense-pkg-API/files/usr/local/www/api/documentation/index.php
+++ b/pfSense-pkg-API/files/usr/local/www/api/documentation/index.php
@@ -5,7 +5,9 @@
session_start();
# Redirect user if they do not have privilege to access this page
-$user_privs = get_user_privileges(getUserEntry($_SESSION["Username"]));
+$client_config =& getUserEntry($_SESSION["Username"]);
+$client_config = (array_key_exists('item', $client_config)) ? $client_config['item'] : $client_config;
+$user_privs = get_user_privileges($client_config);
if (!in_array("page-system-api", $user_privs) and !in_array("page-all", $user_privs)) {
header("Location: /");
exit();
diff --git a/pfSense-pkg-API/files/usr/local/www/api/documentation/openapi.yml b/pfSense-pkg-API/files/usr/local/www/api/documentation/openapi.yml
index 771269fc3..80f3e1926 100644
--- a/pfSense-pkg-API/files/usr/local/www/api/documentation/openapi.yml
+++ b/pfSense-pkg-API/files/usr/local/www/api/documentation/openapi.yml
@@ -1920,6 +1920,13 @@ paths:
target:
description: IP address or alias to forward traffic to.
type: string
+ associated-rule-id:
+ description: The associated rule ID mode for this port forward rule.
+ type: string
+ default: 'pass'
+ enum:
+ - ''
+ - 'pass'
top:
default: false
description: Place this firewall rule at the top of the access control
@@ -2050,6 +2057,13 @@ paths:
target:
description: IP address or alias to forward traffic to.
type: string
+ associated-rule-id:
+ description: The associated rule ID mode for this port forward rule.
+ type: string
+ default: 'pass'
+ enum:
+ - ''
+ - 'pass'
top:
default: false
description: Place this firewall rule at the top of the access control
diff --git a/pfSense-pkg-API/files/usr/local/www/api/index.php b/pfSense-pkg-API/files/usr/local/www/api/index.php
index a8ea4df14..69cbfe73e 100644
--- a/pfSense-pkg-API/files/usr/local/www/api/index.php
+++ b/pfSense-pkg-API/files/usr/local/www/api/index.php
@@ -23,8 +23,7 @@
include('head.inc');
echo "";
echo "";
-$update_tab = (APISystemAPIVersionRead::is_update_available()) ? "Update (New Release Available)" : "Update";
-$tab_array = [[gettext("Settings"), true, "/api/"], [gettext("Documentation"), false, "/api/documentation/"], [gettext($update_tab), false, "/api/update/"]];
+$tab_array = [[gettext("Settings"), true, "/api/"], [gettext("Documentation"), false, "/api/documentation/"], [gettext("Update"), false, "/api/update/"]];
display_top_tabs($tab_array, true); # Ensure the tabs are written to the top of page
# Variables
diff --git a/pfSense-pkg-API/files/usr/local/www/api/update/index.php b/pfSense-pkg-API/files/usr/local/www/api/update/index.php
index f3e408148..02194ea34 100644
--- a/pfSense-pkg-API/files/usr/local/www/api/update/index.php
+++ b/pfSense-pkg-API/files/usr/local/www/api/update/index.php
@@ -25,8 +25,7 @@
echo "";
$pkg_index = APITools\get_api_config()[0];
$pkg_config = APITools\get_api_config()[1];
-$update_tab = (APISystemAPIVersionRead::is_update_available()) ? "Update (New Release Available)" : "Update";
-$tab_array = [[gettext("Settings"), false, "/api/"], [gettext("Documentation"), false, "/api/documentation/"], [gettext($update_tab), true, "/api/update/"]];
+$tab_array = [[gettext("Settings"), false, "/api/"], [gettext("Documentation"), false, "/api/documentation/"], [gettext("Update"), true, "/api/update/"]];
display_top_tabs($tab_array, true); # Ensure the tabs are written to the top of page
# Save changes before loading version information, so the changes will be loaded correctly afterward.
diff --git a/requirements.txt b/requirements.txt
index 320a388ce..b2821fcd0 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,4 +1,4 @@
-jinja2~=3.1.4
-requests~=2.32.3
-urllib3~=1.26.17
-pylint~=3.2.3
+jinja2~=3.1.6
+requests~=2.32.5
+urllib3~=2.6.2
+pylint~=4.0.4
diff --git a/tests/e2e_test_framework/__init__.py b/tests/e2e_test_framework/__init__.py
index 9624e433f..3631f4eb8 100644
--- a/tests/e2e_test_framework/__init__.py
+++ b/tests/e2e_test_framework/__init__.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/e2e_test_framework/tools.py b/tests/e2e_test_framework/tools.py
index e44c56f93..44d9b811b 100644
--- a/tests/e2e_test_framework/tools.py
+++ b/tests/e2e_test_framework/tools.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/run_all_tests.py b/tests/run_all_tests.py
index ced402390..301875fac 100644
--- a/tests/run_all_tests.py
+++ b/tests/run_all_tests.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_access_token.py b/tests/test_api_v1_access_token.py
index 1f20d9f5e..2e122bd55 100644
--- a/tests/test_api_v1_access_token.py
+++ b/tests/test_api_v1_access_token.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_diagnostics_command_prompt.py b/tests/test_api_v1_diagnostics_command_prompt.py
index 8e6e0d703..59b744cce 100644
--- a/tests/test_api_v1_diagnostics_command_prompt.py
+++ b/tests/test_api_v1_diagnostics_command_prompt.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_alias.py b/tests/test_api_v1_firewall_alias.py
index 4036029ef..068a641a3 100644
--- a/tests/test_api_v1_firewall_alias.py
+++ b/tests/test_api_v1_firewall_alias.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_alias_advanced.py b/tests/test_api_v1_firewall_alias_advanced.py
index e3c7409f8..ef411510e 100644
--- a/tests/test_api_v1_firewall_alias_advanced.py
+++ b/tests/test_api_v1_firewall_alias_advanced.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_nat_one_to_one.py b/tests/test_api_v1_firewall_nat_one_to_one.py
index a75620075..fb16f27d1 100644
--- a/tests/test_api_v1_firewall_nat_one_to_one.py
+++ b/tests/test_api_v1_firewall_nat_one_to_one.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_nat_outbound.py b/tests/test_api_v1_firewall_nat_outbound.py
index 084db80f0..73c41cf95 100644
--- a/tests/test_api_v1_firewall_nat_outbound.py
+++ b/tests/test_api_v1_firewall_nat_outbound.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_nat_outbound_mapping.py b/tests/test_api_v1_firewall_nat_outbound_mapping.py
index 1b7a89c47..2c57456e7 100644
--- a/tests/test_api_v1_firewall_nat_outbound_mapping.py
+++ b/tests/test_api_v1_firewall_nat_outbound_mapping.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_nat_port_forward.py b/tests/test_api_v1_firewall_nat_port_forward.py
index 671878654..bcc74853f 100644
--- a/tests/test_api_v1_firewall_nat_port_forward.py
+++ b/tests/test_api_v1_firewall_nat_port_forward.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_rule.py b/tests/test_api_v1_firewall_rule.py
index 4c218f094..39d602224 100644
--- a/tests/test_api_v1_firewall_rule.py
+++ b/tests/test_api_v1_firewall_rule.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_rule_flush.py b/tests/test_api_v1_firewall_rule_flush.py
index c78cb9574..2adce30eb 100644
--- a/tests/test_api_v1_firewall_rule_flush.py
+++ b/tests/test_api_v1_firewall_rule_flush.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_rule_sort.py b/tests/test_api_v1_firewall_rule_sort.py
index 591641464..b1dea1d69 100644
--- a/tests/test_api_v1_firewall_rule_sort.py
+++ b/tests/test_api_v1_firewall_rule_sort.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_schedule.py b/tests/test_api_v1_firewall_schedule.py
index 255f45b4b..b721f1a7d 100644
--- a/tests/test_api_v1_firewall_schedule.py
+++ b/tests/test_api_v1_firewall_schedule.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_schedule_time_range.py b/tests/test_api_v1_firewall_schedule_time_range.py
index ba9caa6ec..ccb6318cc 100644
--- a/tests/test_api_v1_firewall_schedule_time_range.py
+++ b/tests/test_api_v1_firewall_schedule_time_range.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_states.py b/tests/test_api_v1_firewall_states.py
index 58f10bda0..80c0ea27e 100644
--- a/tests/test_api_v1_firewall_states.py
+++ b/tests/test_api_v1_firewall_states.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_states_size.py b/tests/test_api_v1_firewall_states_size.py
index b2370cb22..c9b3ebbd7 100644
--- a/tests/test_api_v1_firewall_states_size.py
+++ b/tests/test_api_v1_firewall_states_size.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_traffic_shaper.py b/tests/test_api_v1_firewall_traffic_shaper.py
index 5917c72c0..0163b95bc 100644
--- a/tests/test_api_v1_firewall_traffic_shaper.py
+++ b/tests/test_api_v1_firewall_traffic_shaper.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_traffic_shaper_limiter.py b/tests/test_api_v1_firewall_traffic_shaper_limiter.py
index 9d4aeefaf..2d5614ad0 100644
--- a/tests/test_api_v1_firewall_traffic_shaper_limiter.py
+++ b/tests/test_api_v1_firewall_traffic_shaper_limiter.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_traffic_shaper_limiter_queue.py b/tests/test_api_v1_firewall_traffic_shaper_limiter_queue.py
index c7dd4f166..c5853bbd7 100644
--- a/tests/test_api_v1_firewall_traffic_shaper_limiter_queue.py
+++ b/tests/test_api_v1_firewall_traffic_shaper_limiter_queue.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_traffic_shaper_queue.py b/tests/test_api_v1_firewall_traffic_shaper_queue.py
index 458bc7ba4..4ad4956da 100644
--- a/tests/test_api_v1_firewall_traffic_shaper_queue.py
+++ b/tests/test_api_v1_firewall_traffic_shaper_queue.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_firewall_virtual_ip.py b/tests/test_api_v1_firewall_virtual_ip.py
index 57a40ef63..55552b303 100644
--- a/tests/test_api_v1_firewall_virtual_ip.py
+++ b/tests/test_api_v1_firewall_virtual_ip.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -419,7 +419,7 @@ def is_carp_created(self):
"""Checks if our CARP is present after creating a CARP VIP"""
# Local variables
carp_subnet = CARP_SUBNET_CREATE
- carp_ip = carp_subnet.split("/")[0]
+ carp_ip = carp_subnet.split('/', maxsplit=1)[0]
carp_bitmask = int(carp_subnet.split("/")[1])
carp_interface = CARP_INTERFACE_CREATE
carp_vhid = CARP_VHID_CREATE
@@ -444,8 +444,8 @@ def is_carp_updated(self):
"""Checks if our CARP is present after creating a CARP VIP"""
# Local variables
carp_subnet = CARP_SUBNET_UPDATE
- carp_ip = carp_subnet.split("/")[0]
- carp_ip_prev = CARP_SUBNET_CREATE.split("/")[0]
+ carp_ip = carp_subnet.split('/', maxsplit=1)[0]
+ carp_ip_prev = CARP_SUBNET_CREATE.split('/', maxsplit=1)[0]
carp_bitmask = int(carp_subnet.split("/")[1])
carp_interface = CARP_INTERFACE_UPDATE
carp_vhid = CARP_VHID_UPDATE
@@ -488,7 +488,7 @@ def is_ipalias_created(self):
"""Checks if our IPALIAS is present after creating an IPALIAS VIP"""
# Local variables
ipalias_subnet = IPALIAS_SUBNET_CREATE
- ipalias_ip = ipalias_subnet.split("/")[0]
+ ipalias_ip = ipalias_subnet.split('/', maxsplit=1)[0]
ipalias_bitmask = int(ipalias_subnet.split("/")[1])
ipalias_interface = IPALIAS_INTERFACE_CREATE
ifconfig_out = self.pfsense_shell("ifconfig")
@@ -501,8 +501,8 @@ def is_ipalias_updated(self):
"""Checks if our IPALIAS is present after creating an IPALIAS VIP"""
# Local variables
ipalias_subnet = IPALIAS_SUBNET_UPDATE
- ipalias_ip = ipalias_subnet.split("/")[0]
- ipalias_ip_prev = IPALIAS_SUBNET_CREATE.split("/")[0]
+ ipalias_ip = ipalias_subnet.split('/', maxsplit=1)[0]
+ ipalias_ip_prev = IPALIAS_SUBNET_CREATE.split('/', maxsplit=1)[0]
ipalias_bitmask = int(ipalias_subnet.split("/")[1])
ipalias_interface = IPALIAS_INTERFACE_UPDATE
ifconfig_out = self.pfsense_shell("ifconfig")
diff --git a/tests/test_api_v1_interface.py b/tests/test_api_v1_interface.py
index 39586e959..75b8cdffc 100644
--- a/tests/test_api_v1_interface.py
+++ b/tests/test_api_v1_interface.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_interface_available.py b/tests/test_api_v1_interface_available.py
index ec1f01cdd..e7266e6c4 100644
--- a/tests/test_api_v1_interface_available.py
+++ b/tests/test_api_v1_interface_available.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_interface_bridge.py b/tests/test_api_v1_interface_bridge.py
index 188c446d3..4de12b3ef 100644
--- a/tests/test_api_v1_interface_bridge.py
+++ b/tests/test_api_v1_interface_bridge.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_interface_vlan.py b/tests/test_api_v1_interface_vlan.py
index e3dc6e638..253b810e5 100644
--- a/tests/test_api_v1_interface_vlan.py
+++ b/tests/test_api_v1_interface_vlan.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_routing_gateway.py b/tests/test_api_v1_routing_gateway.py
index 0fac6211f..a4a38d712 100644
--- a/tests/test_api_v1_routing_gateway.py
+++ b/tests/test_api_v1_routing_gateway.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_routing_gateway_default.py b/tests/test_api_v1_routing_gateway_default.py
index 91c52f78f..da918b611 100644
--- a/tests/test_api_v1_routing_gateway_default.py
+++ b/tests/test_api_v1_routing_gateway_default.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_routing_gateway_detail.py b/tests/test_api_v1_routing_gateway_detail.py
index e98e97913..78b99874a 100644
--- a/tests/test_api_v1_routing_gateway_detail.py
+++ b/tests/test_api_v1_routing_gateway_detail.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_routing_static_route.py b/tests/test_api_v1_routing_static_route.py
index 3533afd45..7ea1ae22c 100644
--- a/tests/test_api_v1_routing_static_route.py
+++ b/tests/test_api_v1_routing_static_route.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services.py b/tests/test_api_v1_services.py
index ee15a9534..d1972f767 100644
--- a/tests/test_api_v1_services.py
+++ b/tests/test_api_v1_services.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ddns.py b/tests/test_api_v1_services_ddns.py
index 9e4c60d01..3860bbcf4 100644
--- a/tests/test_api_v1_services_ddns.py
+++ b/tests/test_api_v1_services_ddns.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dhcpd.py b/tests/test_api_v1_services_dhcpd.py
index 7d5870b8e..22a4cd3f7 100644
--- a/tests/test_api_v1_services_dhcpd.py
+++ b/tests/test_api_v1_services_dhcpd.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dhcpd_lease.py b/tests/test_api_v1_services_dhcpd_lease.py
index cb56ebfee..5b1b494ca 100644
--- a/tests/test_api_v1_services_dhcpd_lease.py
+++ b/tests/test_api_v1_services_dhcpd_lease.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dhcpd_restart.py b/tests/test_api_v1_services_dhcpd_restart.py
index 9a277e688..73b437ebb 100644
--- a/tests/test_api_v1_services_dhcpd_restart.py
+++ b/tests/test_api_v1_services_dhcpd_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dhcpd_start.py b/tests/test_api_v1_services_dhcpd_start.py
index 5b92daec6..af84ae24f 100644
--- a/tests/test_api_v1_services_dhcpd_start.py
+++ b/tests/test_api_v1_services_dhcpd_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dhcpd_static_mapping.py b/tests/test_api_v1_services_dhcpd_static_mapping.py
index 441e8ea6c..3e9c513b5 100644
--- a/tests/test_api_v1_services_dhcpd_static_mapping.py
+++ b/tests/test_api_v1_services_dhcpd_static_mapping.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dhcpd_stop.py b/tests/test_api_v1_services_dhcpd_stop.py
index 3e4757a91..74ad99cb3 100644
--- a/tests/test_api_v1_services_dhcpd_stop.py
+++ b/tests/test_api_v1_services_dhcpd_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dnsmasq.py b/tests/test_api_v1_services_dnsmasq.py
index aa2b54d05..fbd041569 100644
--- a/tests/test_api_v1_services_dnsmasq.py
+++ b/tests/test_api_v1_services_dnsmasq.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dnsmasq_host_override.py b/tests/test_api_v1_services_dnsmasq_host_override.py
index bb5a97f22..d86705c53 100644
--- a/tests/test_api_v1_services_dnsmasq_host_override.py
+++ b/tests/test_api_v1_services_dnsmasq_host_override.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dnsmasq_restart.py b/tests/test_api_v1_services_dnsmasq_restart.py
index 61e87ab48..17a179b91 100644
--- a/tests/test_api_v1_services_dnsmasq_restart.py
+++ b/tests/test_api_v1_services_dnsmasq_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dnsmasq_start.py b/tests/test_api_v1_services_dnsmasq_start.py
index de54aeb8e..87aebb7de 100644
--- a/tests/test_api_v1_services_dnsmasq_start.py
+++ b/tests/test_api_v1_services_dnsmasq_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dnsmasq_stop.py b/tests/test_api_v1_services_dnsmasq_stop.py
index 4007d8293..ef589f75e 100644
--- a/tests/test_api_v1_services_dnsmasq_stop.py
+++ b/tests/test_api_v1_services_dnsmasq_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dpinger_restart.py b/tests/test_api_v1_services_dpinger_restart.py
index 40d09e5c1..edaf0f3e3 100644
--- a/tests/test_api_v1_services_dpinger_restart.py
+++ b/tests/test_api_v1_services_dpinger_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dpinger_start.py b/tests/test_api_v1_services_dpinger_start.py
index b2c720ee6..3a9437d33 100644
--- a/tests/test_api_v1_services_dpinger_start.py
+++ b/tests/test_api_v1_services_dpinger_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_dpinger_stop.py b/tests/test_api_v1_services_dpinger_stop.py
index c84df522d..fd77ff2c5 100644
--- a/tests/test_api_v1_services_dpinger_stop.py
+++ b/tests/test_api_v1_services_dpinger_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ipsec_phase1.py b/tests/test_api_v1_services_ipsec_phase1.py
index 5432aa017..d96a96c0b 100644
--- a/tests/test_api_v1_services_ipsec_phase1.py
+++ b/tests/test_api_v1_services_ipsec_phase1.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ipsec_phase2.py b/tests/test_api_v1_services_ipsec_phase2.py
index f2194f558..6257b623d 100644
--- a/tests/test_api_v1_services_ipsec_phase2.py
+++ b/tests/test_api_v1_services_ipsec_phase2.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ntpd.py b/tests/test_api_v1_services_ntpd.py
index 7ab552d75..7173b9382 100644
--- a/tests/test_api_v1_services_ntpd.py
+++ b/tests/test_api_v1_services_ntpd.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ntpd_restart.py b/tests/test_api_v1_services_ntpd_restart.py
index 1df16e89c..e624ba66a 100644
--- a/tests/test_api_v1_services_ntpd_restart.py
+++ b/tests/test_api_v1_services_ntpd_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ntpd_start.py b/tests/test_api_v1_services_ntpd_start.py
index 3d4ede0dc..800f6c819 100644
--- a/tests/test_api_v1_services_ntpd_start.py
+++ b/tests/test_api_v1_services_ntpd_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_ntpd_stop.py b/tests/test_api_v1_services_ntpd_stop.py
index e58720a6f..40af03cd8 100644
--- a/tests/test_api_v1_services_ntpd_stop.py
+++ b/tests/test_api_v1_services_ntpd_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_openvpn_csc.py b/tests/test_api_v1_services_openvpn_csc.py
index d8c8f6bb8..be213cc1a 100644
--- a/tests/test_api_v1_services_openvpn_csc.py
+++ b/tests/test_api_v1_services_openvpn_csc.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_restart.py b/tests/test_api_v1_services_restart.py
index 8f20a3994..52a040884 100644
--- a/tests/test_api_v1_services_restart.py
+++ b/tests/test_api_v1_services_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_service_watchdog.py b/tests/test_api_v1_services_service_watchdog.py
index e1d27bf17..d0d0370cd 100644
--- a/tests/test_api_v1_services_service_watchdog.py
+++ b/tests/test_api_v1_services_service_watchdog.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_sshd.py b/tests/test_api_v1_services_sshd.py
index a244b551e..9770c19cd 100644
--- a/tests/test_api_v1_services_sshd.py
+++ b/tests/test_api_v1_services_sshd.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_sshd_restart.py b/tests/test_api_v1_services_sshd_restart.py
index 769ed12c1..880744cf9 100644
--- a/tests/test_api_v1_services_sshd_restart.py
+++ b/tests/test_api_v1_services_sshd_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_sshd_start.py b/tests/test_api_v1_services_sshd_start.py
index 125b66c6f..0cd2e006e 100644
--- a/tests/test_api_v1_services_sshd_start.py
+++ b/tests/test_api_v1_services_sshd_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_sshd_stop.py b/tests/test_api_v1_services_sshd_stop.py
index edc598b94..c9e23e5cb 100644
--- a/tests/test_api_v1_services_sshd_stop.py
+++ b/tests/test_api_v1_services_sshd_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_start.py b/tests/test_api_v1_services_start.py
index 6cb311240..702c40452 100644
--- a/tests/test_api_v1_services_start.py
+++ b/tests/test_api_v1_services_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_stop.py b/tests/test_api_v1_services_stop.py
index 4ed360533..5a811a87e 100644
--- a/tests/test_api_v1_services_stop.py
+++ b/tests/test_api_v1_services_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_syslogd_restart.py b/tests/test_api_v1_services_syslogd_restart.py
index 6eb32f7fb..f6158d9a5 100644
--- a/tests/test_api_v1_services_syslogd_restart.py
+++ b/tests/test_api_v1_services_syslogd_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_syslogd_start.py b/tests/test_api_v1_services_syslogd_start.py
index df6b80d20..ddc6f5ea1 100644
--- a/tests/test_api_v1_services_syslogd_start.py
+++ b/tests/test_api_v1_services_syslogd_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_syslogd_stop.py b/tests/test_api_v1_services_syslogd_stop.py
index d663d3b4f..1c25e4c68 100644
--- a/tests/test_api_v1_services_syslogd_stop.py
+++ b/tests/test_api_v1_services_syslogd_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound.py b/tests/test_api_v1_services_unbound.py
index 0dac18ae3..1fd8985e1 100644
--- a/tests/test_api_v1_services_unbound.py
+++ b/tests/test_api_v1_services_unbound.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound_access_list.py b/tests/test_api_v1_services_unbound_access_list.py
index 9ddadf897..231966661 100644
--- a/tests/test_api_v1_services_unbound_access_list.py
+++ b/tests/test_api_v1_services_unbound_access_list.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound_host_override.py b/tests/test_api_v1_services_unbound_host_override.py
index 3b9f78868..dcb20739c 100644
--- a/tests/test_api_v1_services_unbound_host_override.py
+++ b/tests/test_api_v1_services_unbound_host_override.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound_host_override_flush.py b/tests/test_api_v1_services_unbound_host_override_flush.py
index af38a08bb..4a84b147e 100644
--- a/tests/test_api_v1_services_unbound_host_override_flush.py
+++ b/tests/test_api_v1_services_unbound_host_override_flush.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound_restart.py b/tests/test_api_v1_services_unbound_restart.py
index 8988068c2..407b77bbe 100644
--- a/tests/test_api_v1_services_unbound_restart.py
+++ b/tests/test_api_v1_services_unbound_restart.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound_start.py b/tests/test_api_v1_services_unbound_start.py
index 298971509..9f5715020 100644
--- a/tests/test_api_v1_services_unbound_start.py
+++ b/tests/test_api_v1_services_unbound_start.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_unbound_stop.py b/tests/test_api_v1_services_unbound_stop.py
index 9fe5310c7..a3b02adb7 100644
--- a/tests/test_api_v1_services_unbound_stop.py
+++ b/tests/test_api_v1_services_unbound_stop.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_services_wol_send.py b/tests/test_api_v1_services_wol_send.py
index 7066a3445..9cc00eb7b 100644
--- a/tests/test_api_v1_services_wol_send.py
+++ b/tests/test_api_v1_services_wol_send.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_carp.py b/tests/test_api_v1_status_carp.py
index 8ca3fec35..a2090f530 100644
--- a/tests/test_api_v1_status_carp.py
+++ b/tests/test_api_v1_status_carp.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_gateway.py b/tests/test_api_v1_status_gateway.py
index 796d12e18..88b364d79 100644
--- a/tests/test_api_v1_status_gateway.py
+++ b/tests/test_api_v1_status_gateway.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_interface.py b/tests/test_api_v1_status_interface.py
index c33cc1cec..de051c762 100644
--- a/tests/test_api_v1_status_interface.py
+++ b/tests/test_api_v1_status_interface.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_ipsec.py b/tests/test_api_v1_status_ipsec.py
index 65b9e2d2a..bf1722c59 100644
--- a/tests/test_api_v1_status_ipsec.py
+++ b/tests/test_api_v1_status_ipsec.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_log_config_history.py b/tests/test_api_v1_status_log_config_history.py
index 43dcea323..2c4a1a9bf 100644
--- a/tests/test_api_v1_status_log_config_history.py
+++ b/tests/test_api_v1_status_log_config_history.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_log_dhcp.py b/tests/test_api_v1_status_log_dhcp.py
index a0a77d7f6..5629dcfcb 100644
--- a/tests/test_api_v1_status_log_dhcp.py
+++ b/tests/test_api_v1_status_log_dhcp.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_log_firewall.py b/tests/test_api_v1_status_log_firewall.py
index 99403ace3..03d7a03d6 100644
--- a/tests/test_api_v1_status_log_firewall.py
+++ b/tests/test_api_v1_status_log_firewall.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_log_settings.py b/tests/test_api_v1_status_log_settings.py
index c2a52eb3f..c6f50b3fb 100644
--- a/tests/test_api_v1_status_log_settings.py
+++ b/tests/test_api_v1_status_log_settings.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_log_system.py b/tests/test_api_v1_status_log_system.py
index 28fb42247..ae0f1360f 100644
--- a/tests/test_api_v1_status_log_system.py
+++ b/tests/test_api_v1_status_log_system.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_openvpn.py b/tests/test_api_v1_status_openvpn.py
index 911ef6c6b..2689f8e96 100644
--- a/tests/test_api_v1_status_openvpn.py
+++ b/tests/test_api_v1_status_openvpn.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_status_system.py b/tests/test_api_v1_status_system.py
index 2c4a8f2d8..8506743dd 100644
--- a/tests/test_api_v1_status_system.py
+++ b/tests/test_api_v1_status_system.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tests/test_api_v1_system_api.py b/tests/test_api_v1_system_api.py
index 762187374..e29b18e7d 100644
--- a/tests/test_api_v1_system_api.py
+++ b/tests/test_api_v1_system_api.py
@@ -1,4 +1,4 @@
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
diff --git a/tools/make_package.py b/tools/make_package.py
index efdf2a5cf..012ec61d5 100644
--- a/tools/make_package.py
+++ b/tools/make_package.py
@@ -1,5 +1,5 @@
#!/usr/bin/python3
-# Copyright 2023 Jared Hendrickson
+#Copyright 2019-2025 Jared Hendrickson
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -104,7 +104,7 @@ def build_on_remote_host(self):
"mkdir -p ~/build/",
"rm -rf ~/build/pfsense-api",
"git clone https://github.com/jaredhendrickson13/pfsense-api.git ~/build/pfsense-api/",
- "git -C ~/build/pfsense-api checkout " + self.args.branch,
+ f"git -C ~/build/pfsense-api checkout '{self.args.branch}'",
"composer install --working-dir ~/build/pfsense-api",
"rm -rf ~/build/pfsense-api/vendor/composer && rm ~/build/pfsense-api/vendor/autoload.php",
"cp -r ~/build/pfsense-api/vendor/* ~/build/pfsense-api/pfSense-pkg-API/files/etc/inc/",