Add public API endpoint

This commit is contained in:
Skylar Ittner 2020-10-06 15:32:05 -06:00
parent 8683aaf460
commit 35714f96b9
3 changed files with 162 additions and 1 deletions

View File

@ -1,4 +1,4 @@
Copyright (c) 2017-2019 Netsyms Technologies. Some rights reserved. Copyright (c) 2017-2020 Netsyms Technologies. Some rights reserved.
Licensed under the Mozilla Public License Version 2.0. Files without MPL header Licensed under the Mozilla Public License Version 2.0. Files without MPL header
comments, including third party code, may be under a different license. comments, including third party code, may be under a different license.

156
public/api.php Normal file
View File

@ -0,0 +1,156 @@
<?php
/*
* Copyright 2020 Netsyms Technologies.
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
require_once __DIR__ . "/../lib/required_public.php";
header('Content-Type: application/json; charset=utf-8');
header("Access-Control-Allow-Origin: *");
$publicsettings = json_decode(file_get_contents(__DIR__ . "/../custom/public.json"), true);
function sendResp($msg, $status = "ERROR") {
exit(json_encode(["status" => $status, "msg" => $msg]));
}
function sendData($info, $events = [], $components = []) {
exit(json_encode(["status" => "OK", "info" => $info, "events" => $events, "components" => $components]));
}
if (empty($_GET["id"])) {
sendResp('No ID or tracking number entered.');
}
$ID = $_GET["id"];
if (!empty($ID) && strpos($ID, "68") === 0 && !CheckDigit::validateS10($ID)) {
sendResp($ID . ' is not valid. Please try re-typing it.');
} else if (!Machine::exists($ID) && !Machine::serialExists($ID) && !Component::exists($ID)) {
// try package tracking query
$trackingok = false;
if (preg_match("/^[a-z0-9]{10,}$/", $ID)) {
$trkresp = json_decode(file_get_contents("https://apis.netsyms.net/packagehelper/track.php?code=$ID"), true);
if ($trkresp["status"] == "OK" && $trkresp["current"]["status"] != "UNKNOWN" && $trkresp["service"]["id"] != null) {
$trackingok = true;
function trackingStatusToNiceString($status) {
switch ($status) {
case "UNKNOWN":
return "Unknown";
case "PRE_TRANSIT":
return "Pre-transit";
case "TRANSIT":
return "In Transit";
case "DELIVERED":
return "Delivered";
case "RETURNED":
return "Returned";
case "FAILURE":
return "Failure";
default:
return $status;
}
}
$events = [];
$info = [
"Tracking code" => $trkresp["code"],
"Current status" => trackingStatusToNiceString($trkresp["current"]["status"]) . ": " . $trkresp["current"]["details"],
"Last updated" => date($SETTINGS["datetime_format"], $trkresp["current"]["date"]),
"Last location" => implode(" ", $trkresp["current"]["location"]),
"Carrier" => $trkresp["carrier"]["name"]
];
foreach ($trkresp["history"] as $his) {
$events[] = [
"title" => trackingStatusToNiceString($his["status"]),
"details" => $his["details"] . "\n" . implode(" ", $his["location"]),
"date" => date($SETTINGS["datetime_format"], $his["date"])
];
}
sendData($info, $events);
}
}
sendResp($ID . ' could not be found.');
} else {
if (Component::exists($ID)) {
$component = new Component($ID);
$mid = $component->getMachineID();
if (!empty($mid) && Machine::exists($mid)) {
$machine = new Machine($mid);
} else {
// component exists but isn't attached to a machine
sendResp($ID . ' exists as a component in our inventory system but is not assigned to a device.');
}
} else {
if (Machine::exists($ID)) {
$machine = new Machine($ID);
} else {
$machine = new Machine(Machine::getIDFromSerial($ID));
}
$info = [
"ID" => $machine->getID()
];
if (!empty($machine->getOS())) {
$info["OS"] = $machine->getOS();
}
if (!empty($machine->getManufacturer())) {
$info["Manufacturer"] = $machine->getManufacturer();
}
if (!empty($machine->getModel())) {
$info["Model"] = $machine->getModel();
}
if (!empty($machine->getSerial())) {
$info["Serial"] = $machine->getSerial();
}
if (!empty($machine->getPrice())) {
$info["Price"] = "$" . number_format($machine->getPrice(), 2);
}
if (!empty($machine->getPublicNotes())) {
$info["Notes"] = $machine->getPublicNotes();
}
$events = [];
$components = [];
foreach ($machine->getEvents() as $evt) {
$events[] = [
"title" => $evt->getName(),
"details" => $evt->getPublicNotes(),
"date" => date($SETTINGS["datetime_format"], strtotime($evt->getDate()))
];
}
foreach ($machine->getComponents() as $comp) {
$compdata = [];
if (!empty($comp->getModel())) {
$compdata["Model"] = $comp->getModel();
}
if (!empty($comp->getCapacity())) {
$compdata["Capacity"] = $comp->getCapacity();
}
if (!empty($comp->getSerial())) {
$compdata["Serial"] = $comp->getSerial();
}
if (!empty($comp->getPrice())) {
$compdata["Price"] = "$" . number_format($comp->getPrice(), 2);
}
if (!empty($comp->getPublicNotes())) {
$compdata["Notes"] = $comp->getPublicNotes();
}
$components[] = $compdata;
}
sendData($info, $events, $components);
}
}

View File

@ -10,6 +10,11 @@ require_once __DIR__ . "/../lib/required_public.php";
$publicsettings = json_decode(file_get_contents(__DIR__ . "/../custom/public.json"), true); $publicsettings = json_decode(file_get_contents(__DIR__ . "/../custom/public.json"), true);
if (!empty($_GET["format"]) && strtolower($_GET["format"]) == "json") {
include __DIR__ . "/api.php";
exit();
}
function getSearchBox(bool $searchagain = false): string { function getSearchBox(bool $searchagain = false): string {
global $publicsettings, $Strings; global $publicsettings, $Strings;
if (isset($_GET["embed"])) { if (isset($_GET["embed"])) {