144 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			144 lines
		
	
	
		
			6.9 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
//
 | 
						|
// Copyright (c) 2019, Mr. Gecko's Media (James Coleman)
 | 
						|
// All rights reserved.
 | 
						|
//
 | 
						|
// Redistribution and use in source and binary forms, with or without modification,
 | 
						|
//    are permitted provided that the following conditions are met:
 | 
						|
//
 | 
						|
// 1. Redistributions of source code must retain the above copyright notice, this
 | 
						|
//    list of conditions and the following disclaimer.
 | 
						|
//
 | 
						|
// 2. Redistributions in binary form must reproduce the above copyright notice,
 | 
						|
//    this list of conditions and the following disclaimer in the documentation
 | 
						|
//    and/or other materials provided with the distribution.
 | 
						|
//
 | 
						|
// 3. Neither the name of the copyright holder nor the names of its contributors
 | 
						|
//    may be used to endorse or promote products derived from this software without
 | 
						|
//    specific prior written permission.
 | 
						|
//
 | 
						|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 | 
						|
//    ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 | 
						|
//    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | 
						|
//    IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 | 
						|
//    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | 
						|
//    BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 | 
						|
//    OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
 | 
						|
//    WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | 
						|
//    ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | 
						|
//    POSSIBILITY OF SUCH DAMAGE.
 | 
						|
//
 | 
						|
 | 
						|
if (isset($_MGM['user']) && $_MGM['user']['level']==1 && $_MGM['path'][1]=="users") {
 | 
						|
	if ($_MGM['path'][2]=="list") {
 | 
						|
		$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}users");
 | 
						|
		while ($result = databaseFetchAssoc($results)) {
 | 
						|
			$level = "Viewer";
 | 
						|
			if ($result['level']==0)
 | 
						|
				$level = "Disabled";
 | 
						|
			if ($result['level']==1)
 | 
						|
				$level = "Administrator";
 | 
						|
			if ($result['level']==2)
 | 
						|
				$level = "Editor";
 | 
						|
			?><tr><td class="id"><?=htmlspecialchars($result['docid'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true)?></td><td class="email"><?=htmlspecialchars($result['email'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true)?></td><td class="level" value="<?=htmlspecialchars($result['level'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true)?>"><?=$level?></td></tr><?php
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if ($_MGM['path'][2]=="update") {
 | 
						|
		$id = (isset($_REQUEST['id']) ? trim($_REQUEST['id']) : "");
 | 
						|
		$email = (isset($_REQUEST['email']) ? trim($_REQUEST['email']) : "");
 | 
						|
		$password = (isset($_REQUEST['password']) ? trim($_REQUEST['password']) : "");
 | 
						|
		$level = (isset($_REQUEST['level']) ? trim($_REQUEST['level']) : "");
 | 
						|
		$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}users WHERE docid=%s", $id);
 | 
						|
		$result = databaseFetchAssoc($results);
 | 
						|
		if ($result!=NULL) {
 | 
						|
			if (empty($email))
 | 
						|
				$email = $result['email'];
 | 
						|
			$epassword = $result['password'];
 | 
						|
			if (!empty($password)) {
 | 
						|
				$salt = substr(sha1(rand()),0,12);
 | 
						|
				$epassword = $salt.hashPassword($password,hex2bin($salt));
 | 
						|
			}
 | 
						|
			if ($level=="")
 | 
						|
				$level = $result['level'];
 | 
						|
			databaseQuery("UPDATE {$_MGM['DBPrefix']}users SET email=%s,password=%s,level=%s WHERE docid=%s", $email, $epassword, $level, $id);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if ($_MGM['path'][2]=="create") {
 | 
						|
		$email = (isset($_REQUEST['email']) ? trim($_REQUEST['email']) : "");
 | 
						|
		$password = (isset($_REQUEST['password']) ? trim($_REQUEST['password']) : "");
 | 
						|
		$level = (isset($_REQUEST['level']) ? trim($_REQUEST['level']) : "");
 | 
						|
		if (!empty($email) && !empty($level)) {
 | 
						|
			$salt = substr(sha1(rand()),0,12);
 | 
						|
			$epassword = $salt.hashPassword($password,hex2bin($salt));
 | 
						|
			databaseQuery("INSERT INTO {$_MGM['DBPrefix']}users (email, password, time, level) VALUES (%s,%s,%d,%s)", $email, $epassword, $_MGM['time'], $level);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	exit();
 | 
						|
}
 | 
						|
if ($_MGM['path'][1]=="response") {
 | 
						|
	if (isset($_MGM['user'])) {
 | 
						|
		if ($_MGM['path'][2]=="list") {
 | 
						|
			$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}responses");
 | 
						|
			while ($result = databaseFetchAssoc($results)) {
 | 
						|
				?><tr><td class="id"><?=htmlspecialchars($result['docid'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true)?></td><td class="key"><?=htmlspecialchars($result['key'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true)?></td><td class="message"><?=str_replace("\n", "<br />", htmlspecialchars($result['message'], ENT_COMPAT | ENT_HTML401, 'UTF-8', true))?></td></tr><?php
 | 
						|
			}
 | 
						|
		}
 | 
						|
		if ($_MGM['user']['level']==1 || $_MGM['user']['level']==2) {
 | 
						|
			if ($_MGM['path'][2]=="update") {
 | 
						|
				$id = (isset($_REQUEST['id']) ? trim($_REQUEST['id']) : "");
 | 
						|
				$key = (isset($_REQUEST['key']) ? trim($_REQUEST['key']) : "");
 | 
						|
				$message = (isset($_REQUEST['message']) ? trim($_REQUEST['message']) : "");
 | 
						|
				$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}responses WHERE docid=%s", $id);
 | 
						|
				$result = databaseFetchAssoc($results);
 | 
						|
				if ($result!=NULL) {
 | 
						|
					databaseQuery("UPDATE {$_MGM['DBPrefix']}responses SET key=%s,message=%s WHERE docid=%s", $key, $message, $id);
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if ($_MGM['path'][2]=="delete") {
 | 
						|
				$id = (isset($_REQUEST['id']) ? trim($_REQUEST['id']) : "");
 | 
						|
				databaseQuery("DELETE FROM {$_MGM['DBPrefix']}responses WHERE docid=%s", $id);
 | 
						|
			}
 | 
						|
			if ($_MGM['path'][2]=="create") {
 | 
						|
				$key = (isset($_REQUEST['key']) ? trim($_REQUEST['key']) : "");
 | 
						|
				$message = (isset($_REQUEST['message']) ? trim($_REQUEST['message']) : "");
 | 
						|
				if (!empty($key) && !empty($message)) {
 | 
						|
					databaseQuery("INSERT INTO {$_MGM['DBPrefix']}responses (key, message) VALUES (%s,%s)", $key, $message);
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	if (count($_MGM['PublicAPIWhiteListedIPs'])==0 || in_array($_MGM['ip'], $_MGM['PublicAPIWhiteListedIPs'])) {
 | 
						|
		if ($_MGM['path'][2]=="get") {
 | 
						|
			$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}responses WHERE key=%s OR docid=%s", $_REQUEST['key'], $_REQUEST['key']);
 | 
						|
			$response = array("type" => "success", "results" => array());
 | 
						|
			while ($result = databaseFetchAssoc($results)) {
 | 
						|
				$response['results'][] = $result;
 | 
						|
			}
 | 
						|
			header("content-type: application/json");
 | 
						|
			echo json_encode($response);
 | 
						|
		}
 | 
						|
		if ($_MGM['path'][2]=="find") {
 | 
						|
			$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}responses WHERE key LIKE %s OR docid=%s", "%".$_REQUEST['key']."%", $_REQUEST['key']);
 | 
						|
			$response = array("type" => "success", "results" => array());
 | 
						|
			while ($result = databaseFetchAssoc($results)) {
 | 
						|
				$response['results'][] = $result;
 | 
						|
			}
 | 
						|
			header("content-type: application/json");
 | 
						|
			echo json_encode($response);
 | 
						|
		}
 | 
						|
		if ($_MGM['path'][2]=="get-all") {
 | 
						|
			$results = databaseQuery("SELECT * FROM {$_MGM['DBPrefix']}responses");
 | 
						|
			$response = array("type" => "success", "results" => array());
 | 
						|
			while ($result = databaseFetchAssoc($results)) {
 | 
						|
				$response['results'][] = $result;
 | 
						|
			}
 | 
						|
			header("content-type: application/json");
 | 
						|
			echo json_encode($response);
 | 
						|
		}
 | 
						|
	}
 | 
						|
	exit();
 | 
						|
}
 | 
						|
$response = array("type" => "failure", "error" => "Not a valid request.");
 | 
						|
header("content-type: application/json");
 | 
						|
echo json_encode($response);
 | 
						|
exit();
 |