Add public API endpoint

master
Skylar Ittner 4 years ago
parent 8683aaf460
commit 35714f96b9

@ -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.

@ -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);
}
}

@ -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"])) {

Loading…
Cancel
Save