'enabled')); if (file_exists('../custom_disable_timer')) { unlink('../custom_disable_timer'); } } elseif (isset($_GET['disable']) && $auth) { if (isset($_GET['auth'])) { if ($_GET['auth'] !== $pwhash) { exit('Not authorized!'); } } else { // Skip token validation if explicit auth string is given check_csrf($_GET['token']); } $disable = intval($_GET['disable']); // intval returns the integer value on success, or 0 on failure if ($disable > 0) { $timestamp = time(); pihole_execute('disable '.$disable.'s'); file_put_contents('../custom_disable_timer', ($timestamp + $disable) * 1000); } else { pihole_execute('disable'); if (file_exists('../custom_disable_timer')) { unlink('../custom_disable_timer'); } } $data = array_merge($data, array('status' => 'disabled')); } elseif (isset($_GET['versions'])) { // Determine if updates are available for Pi-hole // using the same script that we use for the footer // on the dashboard (update notifications are // suppressed if on development branches) require 'scripts/pi-hole/php/update_checker.php'; $updates = array('core_update' => $core_update, 'web_update' => $web_update, 'FTL_update' => $FTL_update, ); $current = array('core_current' => $core_current, 'web_current' => $web_current, 'FTL_current' => $FTL_current, ); $latest = array('core_latest' => $core_latest, 'web_latest' => $web_latest, 'FTL_latest' => $FTL_latest, ); $branches = array('core_branch' => $core_branch, 'web_branch' => $web_branch, 'FTL_branch' => $FTL_branch, ); $data = array_merge($data, $updates); $data = array_merge($data, $current); $data = array_merge($data, $latest); $data = array_merge($data, $branches); } elseif (isset($_GET['setTempUnit'])) { $unit = strtolower($_GET['setTempUnit']); if ($unit == 'c' || $unit == 'f' || $unit == 'k') { pihole_execute('-a -'.$unit); $result = 'success'; } else { // invalid unit $result = 'error'; } $data = array_merge($data, array('result' => $result)); } elseif (isset($_GET['list'])) { if (!$auth) { exit('Not authorized!'); } if (!isset($_GET['list'])) { exit('List has not been specified.'); } switch ($_GET['list']) { case 'black': $_POST['type'] = LISTTYPE_BLACKLIST; break; case 'regex_black': $_POST['type'] = LISTTYPE_REGEX_BLACKLIST; break; case 'white': $_POST['type'] = LISTTYPE_WHITELIST; break; case 'regex_white': $_POST['type'] = LISTTYPE_REGEX_WHITELIST; break; default: exit('Invalid list [supported: black, regex_black, white, regex_white]'); } if (isset($_GET['add'])) { // Set POST parameters and invoke script to add domain to list $_POST['domain'] = $_GET['add']; $_POST['action'] = 'add_domain'; require 'scripts/pi-hole/php/groups.php'; } elseif (isset($_GET['sub'])) { // Set POST parameters and invoke script to remove domain from list $_POST['domain'] = $_GET['sub']; $_POST['action'] = 'delete_domain_string'; require 'scripts/pi-hole/php/groups.php'; } else { // Set POST parameters and invoke script to get all domains $_POST['action'] = 'get_domains'; require 'scripts/pi-hole/php/groups.php'; } return; } elseif (isset($_GET['customdns']) && $auth) { if (isset($_GET['auth'])) { if ($_GET['auth'] !== $pwhash) { exit('Not authorized!'); } } else { // Skip token validation if explicit auth string is given check_csrf($_GET['token']); } switch ($_GET['action']) { case 'get': $data = echoCustomDNSEntries(); break; case 'add': $data = addCustomDNSEntry(); break; case 'delete': $data = deleteCustomDNSEntry(); break; default: exit('Wrong action'); } } elseif (isset($_GET['customcname']) && $auth) { if (isset($_GET['auth'])) { if ($_GET['auth'] !== $pwhash) { exit('Not authorized!'); } } else { // Skip token validation if explicit auth string is given check_csrf($_GET['token']); } switch ($_GET['action']) { case 'get': $data = echoCustomCNAMEEntries(); break; case 'add': $data = addCustomCNAMEEntry(); break; case 'delete': $data = deleteCustomCNAMEEntry(); break; default: exit('Wrong action'); } } // Other API functions require 'api_FTL.php'; header('Content-type: application/json'); if (isset($_GET['jsonForceObject'])) { echo json_encode($data, JSON_FORCE_OBJECT); } else { echo json_encode($data); }