Move of API folder from /app/front/api to app/api

This commit is contained in:
jokob-sk
2024-12-08 19:17:10 +11:00
parent d7858c6042
commit f7160f0843
27 changed files with 115 additions and 75 deletions

1
.gitignore vendored
View File

@@ -8,6 +8,7 @@ db/pialert.db
db/app.db db/app.db
front/log/* front/log/*
front/api/* front/api/*
/api/*
**/plugins/**/*.log **/plugins/**/*.log
**/%40eaDir/ **/%40eaDir/
**/@eaDir/ **/@eaDir/

View File

@@ -72,6 +72,6 @@ COPY install/crontab /etc/crontabs/root
RUN ${INSTALL_DIR}/dockerfiles/pre-setup.sh RUN ${INSTALL_DIR}/dockerfiles/pre-setup.sh
HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=2 \ HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=2 \
CMD curl -sf -o /dev/null ${LISTEN_ADDR}:${PORT}/api/app_state.json CMD curl -sf -o /dev/null ${LISTEN_ADDR}:${PORT}/php/server/query_json.php?file=app_state.json
ENTRYPOINT ["/init"] ENTRYPOINT ["/init"]

View File

@@ -39,7 +39,7 @@ services:
- ${DEV_LOCATION}/install/user-mapping.debian.sh:/app/install/user-mapping.debian.sh - ${DEV_LOCATION}/install/user-mapping.debian.sh:/app/install/user-mapping.debian.sh
- ${DEV_LOCATION}/install/install.debian.sh:/app/install/install.debian.sh - ${DEV_LOCATION}/install/install.debian.sh:/app/install/install.debian.sh
- ${DEV_LOCATION}/install/install_dependencies.debian.sh:/app/install/install_dependencies.debian.sh - ${DEV_LOCATION}/install/install_dependencies.debian.sh:/app/install/install_dependencies.debian.sh
- ${DEV_LOCATION}/front/api:/app/front/api - ${DEV_LOCATION}/api:/app/api
- ${DEV_LOCATION}/front/php:/app/front/php - ${DEV_LOCATION}/front/php:/app/front/php
- ${DEV_LOCATION}/front/deviceDetails.php:/app/front/deviceDetails.php - ${DEV_LOCATION}/front/deviceDetails.php:/app/front/deviceDetails.php
- ${DEV_LOCATION}/front/deviceDetailsEdit.php:/app/front/deviceDetailsEdit.php - ${DEV_LOCATION}/front/deviceDetailsEdit.php:/app/front/deviceDetailsEdit.php

View File

@@ -58,7 +58,7 @@ docker run -d --rm --network=host \
| | `:/app/front/log` | Logs folder useful for debugging if you have issues setting up the container | | | `:/app/front/log` | Logs folder useful for debugging if you have issues setting up the container |
| | `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. Required if you want to use PiHole DB mapping. | | | `:/etc/pihole/pihole-FTL.db` | PiHole's `pihole-FTL.db` database file. Required if you want to use PiHole DB mapping. |
| | `:/etc/pihole/dhcp.leases` | PiHole's `dhcp.leases` file. Required if you want to use PiHole `dhcp.leases` file. This has to be matched with a corresponding `DHCPLSS_paths_to_check` setting entry (the path in the container must contain `pihole`)| | | `:/etc/pihole/dhcp.leases` | PiHole's `dhcp.leases` file. Required if you want to use PiHole `dhcp.leases` file. This has to be matched with a corresponding `DHCPLSS_paths_to_check` setting entry (the path in the container must contain `pihole`)|
| | `:/app/front/api` | A simple [API endpoint](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) containing static (but regularly updated) json and other files. | | | `:/app/api` | A simple [API endpoint](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md) containing static (but regularly updated) json and other files. |
| | `:/app/front/plugins/<plugin>/ignore_plugin` | Map a file `ignore_plugin` to ignore a plugin. Plugins can be soft-disabled via settings. More in the [Plugin docs](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md). | | | `:/app/front/plugins/<plugin>/ignore_plugin` | Map a file `ignore_plugin` to ignore a plugin. Plugins can be soft-disabled via settings. More in the [Plugin docs](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/README.md). |
| | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REVERSE_DNS.md). | | | `:/etc/resolv.conf` | Use a custom `resolv.conf` file for [better name resolution](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REVERSE_DNS.md). |

View File

@@ -107,11 +107,11 @@ fi
# Create an empty log files # Create an empty log files
# Create the execution_queue.log and app_front.log files if they don't exist # Create the execution_queue.log and app_front.log files if they don't exist
touch "${INSTALL_DIR}"/front/log/{app.log,execution_queue.log,app_front.log,app.php_errors.log,stderr.log,stdout.log,db_is_locked.log} touch "${INSTALL_DIR}"/front/log/{app.log,execution_queue.log,app_front.log,app.php_errors.log,stderr.log,stdout.log,db_is_locked.log}
touch "${INSTALL_DIR}"/front/api/user_notifications.json touch "${INSTALL_DIR}"/api/user_notifications.json
echo "[INSTALL] Fixing permissions after copied starter config & DB" echo "[INSTALL] Fixing permissions after copied starter config & DB"
chown -R nginx:www-data "${INSTALL_DIR}"/{config,front/log,db,front/api} chown -R nginx:www-data "${INSTALL_DIR}"/{config,front/log,db,api}
chown -R nginx:www-data "${INSTALL_DIR}"/front/api/user_notifications.json chown -R nginx:www-data "${INSTALL_DIR}"/api/user_notifications.json
chmod 750 "${INSTALL_DIR}"/{config,front/log,db} chmod 750 "${INSTALL_DIR}"/{config,front/log,db}
find "${INSTALL_DIR}"/{config,front/log,db} -type f -exec chmod 640 {} \; find "${INSTALL_DIR}"/{config,front/log,db} -type f -exec chmod 640 {} \;

View File

@@ -9,7 +9,7 @@ The endpoints are updated when objects in the API endpoints are changed.
### Location of the endpoints ### Location of the endpoints
In the container, these files are located under the `/app/front/api/` folder and thus on the `<netalertx_url>/api/<File name>` url. In the container, these files are located under the `/app/api/` folder. You can acces sthem via the `/php/server/query_json.php?file=user_notifications.json` endpoint.
### Available endpoints ### Available endpoints

View File

@@ -55,7 +55,7 @@ Input data from the plugin might cause mapping issues in specific edge cases. Lo
17:31:05 [Plugins] SQL sqlParams for mapping: [('01:01:01:01:01:01', '172.30.0.1', 0, 'aaaa', 'vvvvvvvvv', 'PIHOLE'), ('02:42:ac:1e:00:02', '172.30.0.2', 0, 'dddd', 'vvvvv2222', 'PIHOLE')] 17:31:05 [Plugins] SQL sqlParams for mapping: [('01:01:01:01:01:01', '172.30.0.1', 0, 'aaaa', 'vvvvvvvvv', 'PIHOLE'), ('02:42:ac:1e:00:02', '172.30.0.2', 0, 'dddd', 'vvvvv2222', 'PIHOLE')]
🔺 🔺
17:31:05 [API] Update API starting 17:31:05 [API] Update API starting
17:31:06 [API] Updating table_plugins_history.json file in /front/api 17:31:06 [API] Updating table_plugins_history.json file in /api
``` ```
> The debug output between the 🔻red arrows🔺 is important for debugging (arrows added only to highlight the section on this page, they are not available in the actual debug log) > The debug output between the 🔻red arrows🔺 is important for debugging (arrows added only to highlight the section on this page, they are not available in the actual debug log)

View File

@@ -68,7 +68,7 @@
// some race condition, need to implement delay // some race condition, need to implement delay
setTimeout(() => { setTimeout(() => {
$.get('api/table_settings.json?nocache=' + Date.now(), function(res) { $.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
settingsData = res["data"]; settingsData = res["data"];

View File

@@ -199,26 +199,31 @@ function getDevicesTotals() {
// Fetch data via AJAX // Fetch data via AJAX
$.ajax({ $.ajax({
url: '/api/table_devices_tiles.json?nocache=' + Date.now(), url: '/php/server/query_json.php',
type: "GET", type: "GET",
dataType: "json", dataType: "json",
success: function(response) { data: {
if (response && response.data) { file: 'table_devices_tiles.json', // Pass the file parameter
resultJSON = response.data[0]; // Assuming the structure {"data": [ ... ]} nocache: Date.now() // Prevent caching with a timestamp
},
// Save the result to cache success: function(response) {
setCache("getDevicesTotals", JSON.stringify(resultJSON)); if (response && response.data) {
resultJSON = response.data[0]; // Assuming the structure {"data": [ ... ]}
// Save the result to cache
setCache("getDevicesTotals", JSON.stringify(resultJSON));
// Process the fetched data // Process the fetched data
processDeviceTotals(resultJSON); processDeviceTotals(resultJSON);
} else { } else {
console.error("Invalid response format from API"); console.error("Invalid response format from API");
}
},
error: function(xhr, status, error) {
console.error("Failed to fetch devices data:", error);
} }
},
error: function(xhr, status, error) {
console.error("Failed to fetch devices data:", error);
}
}); });
} }

View File

@@ -115,10 +115,10 @@ function cacheSettings()
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if(!getCache('completedCalls').includes('cacheSettings')) if(!getCache('completedCalls').includes('cacheSettings'))
{ {
$.get('api/table_settings.json?nocache=' + Date.now(), function(resSet) { $.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(resSet) {
$.get('api/plugins.json?nocache=' + Date.now(), function(resPlug) {
$.get('/php/server/query_json.php', { file: 'plugins.json', nocache: Date.now() }, function(resPlug) {
pluginsData = resPlug["data"]; pluginsData = resPlug["data"];
settingsData = resSet["data"]; settingsData = resSet["data"];
@@ -225,7 +225,7 @@ function cacheStrings() {
}); });
// Fetch strings and translations from plugins // Fetch strings and translations from plugins
$.get(`api/table_plugins_language_strings.json?nocache=${Date.now()}`) $.get('/php/server/query_json.php', { file: 'table_plugins_language_strings.json', nocache: Date.now() })
.done((pluginRes) => { .done((pluginRes) => {
const data = pluginRes["data"]; const data = pluginRes["data"];
@@ -702,7 +702,7 @@ function forceLoadUrl(relativeUrl) {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
function navigateToDeviceWithIp (ip) { function navigateToDeviceWithIp (ip) {
$.get('api/table_devices.json?nocache=' + Date.now(), function(res) { $.get('/php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(res) {
devices = res["data"]; devices = res["data"];
@@ -924,7 +924,7 @@ function cacheDevices()
// if(!getCache('completedCalls').includes('cacheDevices')) // if(!getCache('completedCalls').includes('cacheDevices'))
// { // {
$.get('api/table_devices.json?nocache=' + Date.now(), function(data) { $.get('/php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(data) {
// console.log(data) // console.log(data)
@@ -1290,7 +1290,7 @@ function clearCache() {
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// Function to check if cache needs to be refreshed because of setting changes // Function to check if cache needs to be refreshed because of setting changes
function checkSettingChanges() { function checkSettingChanges() {
$.get('api/app_state.json?nocache=' + Date.now(), function(appState) { $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
const importedMilliseconds = parseInt(appState["settingsImported"] * 1000); const importedMilliseconds = parseInt(appState["settingsImported"] * 1000);
const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time')); const lastReloaded = parseInt(sessionStorage.getItem(sessionStorageKey + '_time'));
@@ -1345,7 +1345,7 @@ async function waitForGraphQLServer() {
// Returns 1 if running, 0 otherwise // Returns 1 if running, 0 otherwise
async function isGraphQLServerRunning() { async function isGraphQLServerRunning() {
try { try {
const response = await $.get('api/app_state.json?nocache=' + Date.now()); const response = await $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now()});
console.log("graphQLServerStarted: " + response["graphQLServerStarted"]); console.log("graphQLServerStarted: " + response["graphQLServerStarted"]);
setCache("graphQLServerStarted", response["graphQLServerStarted"]); setCache("graphQLServerStarted", response["graphQLServerStarted"]);
return response["graphQLServerStarted"]; return response["graphQLServerStarted"];

View File

@@ -33,7 +33,7 @@ function versionUpdateUI(){
// Checks if a new version is available via the global app_state.json // Checks if a new version is available via the global app_state.json
function checkIfNewVersionAvailable() function checkIfNewVersionAvailable()
{ {
$.get('api/app_state.json?nocache=' + Date.now(), function(appState) { $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
// console.log(appState["isNewVersionChecked"]) // console.log(appState["isNewVersionChecked"])
// console.log(appState["isNewVersion"]) // console.log(appState["isNewVersion"])

View File

@@ -77,7 +77,7 @@
// some race condition, need to implement delay // some race condition, need to implement delay
setTimeout(() => { setTimeout(() => {
$.get('api/table_settings.json?nocache=' + Date.now(), function(res) { $.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
settingsData = res["data"]; settingsData = res["data"];

View File

@@ -8,7 +8,7 @@
<script src="js/graph_online_history.js"></script> <script src="js/graph_online_history.js"></script>
<script> <script>
$.get('api/table_online_history.json?nocache=' + Date.now(), function(res) { $.get('/php/server/query_json.php', { file: 'table_online_history.json', nocache: Date.now() }, function(res) {
// Extracting data from the JSON response // Extracting data from the JSON response
var timeStamps = []; var timeStamps = [];
var onlineCounts = []; var onlineCounts = [];

38
front/php/server/query_json.php Executable file
View File

@@ -0,0 +1,38 @@
<?php
// ---- IMPORTS ----
//------------------------------------------------------------------------------
// Check if authenticated
require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
// Get init.php
require dirname(__FILE__).'/../server/init.php';
// ---- IMPORTS ----
//------------------------------------------------------------------------------
// Handle incoming requests
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// Get query string parameter ?file=settings_table.json
$file = isset($_GET['file']) ? $_GET['file'] : null;
// Check if file parameter is provided
if ($file) {
// Define the folder where files are located
$filePath = "/app/api/" . basename($file);
// Check if the file exists
if (file_exists($filePath)) {
// Send the response back to the client
header('Content-Type: application/json');
echo file_get_contents($filePath);
} else {
// File not found response
http_response_code(404);
echo json_encode(["error" => "File not found"]);
}
} else {
// Missing file parameter response
http_response_code(400);
echo json_encode(["error" => "Missing 'file' parameter"]);
}
}
?>

View File

@@ -430,7 +430,7 @@ function getString ($setKey, $default) {
// ------------------------------------------------------------------------------------------- // -------------------------------------------------------------------------------------------
function getSettingValue($setKey) { function getSettingValue($setKey) {
// Define the JSON endpoint URL // Define the JSON endpoint URL
$url = dirname(__FILE__).'/../../../front/api/table_settings.json'; $url = dirname(__FILE__).'/../../../api/table_settings.json';
// Fetch the JSON data // Fetch the JSON data
$json = file_get_contents($url); $json = file_get_contents($url);

View File

@@ -64,7 +64,7 @@ function generate_guid() {
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// Logs a notification in in-app notification system // Logs a notification in in-app notification system
function write_notification($content, $level = "interrupt") { function write_notification($content, $level = "interrupt") {
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json'; $NOTIFICATION_API_FILE = '/app/api/user_notifications.json';
// Generate GUID // Generate GUID
$guid = generate_guid(); $guid = generate_guid();
@@ -97,7 +97,7 @@ function write_notification($content, $level = "interrupt") {
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// Removes a notification based on GUID // Removes a notification based on GUID
function remove_notification($guid) { function remove_notification($guid) {
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json'; $NOTIFICATION_API_FILE = '/app/api/user_notifications.json';
// Read existing notifications // Read existing notifications
$notifications = json_decode(file_get_contents($NOTIFICATION_API_FILE), true); $notifications = json_decode(file_get_contents($NOTIFICATION_API_FILE), true);
@@ -114,7 +114,7 @@ function remove_notification($guid) {
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// Deletes all notifications // Deletes all notifications
function notifications_clear() { function notifications_clear() {
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json'; $NOTIFICATION_API_FILE = '/app/api/user_notifications.json';
// Clear notifications by writing an empty array to the file // Clear notifications by writing an empty array to the file
file_put_contents($NOTIFICATION_API_FILE, json_encode(array())); file_put_contents($NOTIFICATION_API_FILE, json_encode(array()));
@@ -123,7 +123,7 @@ function notifications_clear() {
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
// Mark a notification read based on GUID // Mark a notification read based on GUID
function mark_notification_as_read($guid) { function mark_notification_as_read($guid) {
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json'; $NOTIFICATION_API_FILE = '/app/api/user_notifications.json';
$max_attempts = 3; $max_attempts = 3;
$attempts = 0; $attempts = 0;
@@ -172,7 +172,7 @@ function notifications_mark_all_read() {
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
function get_unread_notifications() { function get_unread_notifications() {
$NOTIFICATION_API_FILE = '/app/front/api/user_notifications.json'; $NOTIFICATION_API_FILE = '/app/api/user_notifications.json';
// Read existing notifications // Read existing notifications
if (file_exists($NOTIFICATION_API_FILE) && is_readable($NOTIFICATION_API_FILE)) { if (file_exists($NOTIFICATION_API_FILE) && is_readable($NOTIFICATION_API_FILE)) {

View File

@@ -91,7 +91,7 @@
<script> <script>
function updateState(){ function updateState(){
$.get('api/app_state.json?nocache=' + Date.now(), function(appState) { $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', ''); document.getElementById('state').innerHTML = appState["currentState"].replaceAll('"', '');

View File

@@ -45,7 +45,7 @@ function jsonResponse($status, $data = '', $message = '') {
if ($method === 'GET') { if ($method === 'GET') {
checkAuthorization($method); checkAuthorization($method);
$file_path = "/app/front/api/table_devices.json"; $file_path = "/app/api/table_devices.json";
$data = file_get_contents($file_path); $data = file_get_contents($file_path);

View File

@@ -104,7 +104,7 @@ def main():
# PUSHING/SENDING devices # PUSHING/SENDING devices
if send_devices: if send_devices:
file_path = f"{INSTALL_PATH}/front/api/table_devices.json" file_path = f"{INSTALL_PATH}/api/table_devices.json"
plugin_folder = 'sync' plugin_folder = 'sync'
pref = 'SYNC' pref = 'SYNC'

View File

@@ -246,19 +246,19 @@ function getData(){
// Show the loading spinner while generating // Show the loading spinner while generating
showSpinner(); showSpinner();
$.get('api/plugins.json', function(res) { $.get('php/server/query_json.php?file=plugins.json', function(res) {
pluginDefinitions = res["data"]; pluginDefinitions = res["data"];
$.get('api/table_plugins_events.json', function(res) { $.get('php/server/query_json.php?file=table_plugins_events.json', function(res) {
pluginUnprocessedEvents = res["data"]; pluginUnprocessedEvents = res["data"];
$.get('api/table_plugins_objects.json', function(res) { $.get('php/server/query_json.php?file=table_plugins_objects.json', function(res) {
pluginObjects = res["data"]; pluginObjects = res["data"];
$.get('api/table_plugins_history.json', function(res) { $.get('php/server/query_json.php?file=table_plugins_history.json', function(res) {
pluginHistory = res["data"]; pluginHistory = res["data"];

View File

@@ -99,7 +99,7 @@
// Function to update the displayed data and timestamp based on the selected format and index // Function to update the displayed data and timestamp based on the selected format and index
function updateData(format, index) { function updateData(format, index) {
// Fetch data from the API endpoint // Fetch data from the API endpoint
fetch('api/table_notifications.json?nocache=' + Date.now()) fetch(`/php/server/query_json.php?file=table_notifications.json&nocache=${Date.now()}`)
.then(response => response.json()) .then(response => response.json())
.then(data => { .then(data => {
if (index < 0) { if (index < 0) {

View File

@@ -17,7 +17,7 @@ checkPermissions([$dbPath, $confPath]);
// get settings from the API json file // get settings from the API json file
// path to your JSON file // path to your JSON file
$file = '../front/api/table_settings.json'; $file = '../api/table_settings.json';
// put the content of the file in a variable // put the content of the file in a variable
$data = file_get_contents($file); $data = file_get_contents($file);
// JSON decode // JSON decode
@@ -219,7 +219,7 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
}, 3000); }, 3000);
} else } else
{ {
$.get('api/plugins.json?nocache=' + Date.now(), function(res) { $.get('/php/server/query_json.php', { file: 'plugins.json', nocache: Date.now() }, function(res) {
pluginsData = res["data"]; pluginsData = res["data"];
@@ -556,7 +556,7 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
// collect values for each of the different input form controls // collect values for each of the different input form controls
// get settings to determine setting type to store values appropriately // get settings to determine setting type to store values appropriately
$.get('api/table_settings.json?nocache=' + Date.now(), function(res) { $.get('/php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
// loop through the settings definitions from the json // loop through the settings definitions from the json
res["data"].forEach(set => { res["data"].forEach(set => {
@@ -733,7 +733,7 @@ $settingsJSON_DB = json_encode($settings, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX
} else } else
{ {
// check if config file has been updated // check if config file has been updated
$.get('api/app_state.json?nocache=' + Date.now(), function(appState) { $.get('/php/server/query_json.php', { file: 'app_state.json', nocache: Date.now() }, function(appState) {
fileModificationTime = <?php echo filemtime($confPath)*1000;?>; fileModificationTime = <?php echo filemtime($confPath)*1000;?>;

View File

@@ -59,28 +59,23 @@ require 'php/templates/header.php';
<script> <script>
function fetchData(callback) { function fetchData(callback) {
$.ajax({ $.get('/php/server/query_json.php', { file: 'user_notifications.json', nocache: Date.now() })
url: 'api/user_notifications.json?nocache=' + Date.now(), .done(function(response) {
method: 'GET',
dataType: 'json',
success: function(response) {
console.log(response);
if (response == "[]" || response == "") { if (response == "[]" || response == "") {
callback([]); callback([]);
} else if (response.error) { } else if (response.error) {
alert("Error: " + response.error); alert("Error: " + response.error);
callback([]); callback([]);
} else if (!Array.isArray(response)) { } else if (!Array.isArray(response)) {
alert("Unexpected response format"); alert("Unexpected response format");
callback([]); callback([]);
} else { } else {
callback(response); callback(response);
} }
}, })
error: function(xhr, status, error) { .fail(function(xhr, status, error) {
console.log("An error occurred while fetching data: " + error); console.error("An error occurred while fetching data:", error);
callback([]); callback([]);
}
}); });
} }

View File

@@ -16,7 +16,7 @@ fi
apt-get install -y \ apt-get install -y \
tini snmp ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo \ tini snmp ca-certificates curl libwww-perl arp-scan perl apt-utils cron sudo \
nginx-light php php-cgi php-fpm php-sqlite3 php-curl php-openssl sqlite3 dnsutils net-tools \ nginx-light php php-cgi php-fpm php-sqlite3 php-curl php-openssl sqlite3 dnsutils net-tools \
python3 python3-dev iproute2 nmap python3-pip zip systemctl usbutils traceroute nbtscan avahi avahi-tools openrc dbus build-essential python3 python3-dev iproute2 nmap python3-pip zip systemctl usbutils traceroute nbtscan avahi avahi-tools openrc dbus build-essential git
# alternate dependencies # alternate dependencies
sudo apt-get install nginx nginx-core mtr php-fpm php8.2-fpm php-cli php8.2 php8.2-sqlite3 -y sudo apt-get install nginx nginx-core mtr php-fpm php8.2-fpm php-cli php8.2 php8.2-sqlite3 -y
@@ -30,5 +30,5 @@ source myenv/bin/activate
update-alternatives --install /usr/bin/python python /usr/bin/python3 10 update-alternatives --install /usr/bin/python python /usr/bin/python3 10
# install packages thru pip3 # install packages thru pip3
pip3 install graphene flask netifaces tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros pip3 install graphene flask netifaces tplink-omada-client pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros git+https://github.com/foreign-sub/aiofreepybox.git

View File

@@ -100,7 +100,7 @@ class api_endpoint_class:
# check if API endpoints have changed or if it's a new one # check if API endpoints have changed or if it's a new one
if not found or changed: if not found or changed:
mylog('verbose', [f'[API] Updating {self.fileName} file in /front/api']) mylog('verbose', [f'[API] Updating {self.fileName} file in /api'])
write_file(self.path, json.dumps(self.jsonData)) write_file(self.path, json.dumps(self.jsonData))

View File

@@ -13,7 +13,8 @@ dbPath = '/db/' + dbFileName
pluginsPath = applicationPath + '/front/plugins' pluginsPath = applicationPath + '/front/plugins'
logPath = applicationPath + '/front/log' logPath = applicationPath + '/front/log'
apiPath = applicationPath + '/front/api/' # apiPath = applicationPath + '/api/'
apiPath = applicationPath + '/api/'
reportTemplatesPath = applicationPath + '/front/report_templates/' reportTemplatesPath = applicationPath + '/front/report_templates/'
fullConfFolder = applicationPath + '/config' fullConfFolder = applicationPath + '/config'
fullConfPath = applicationPath + confPath fullConfPath = applicationPath + confPath