Skip to content

Instantly share code, notes, and snippets.

Created August 23, 2016 18:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/52cfe60de2baff5aa2aa803f9c59683c to your computer and use it in GitHub Desktop.
Save anonymous/52cfe60de2baff5aa2aa803f9c59683c to your computer and use it in GitHub Desktop.
<?php
date_default_timezone_set('America/Los_Angeles');
class General {
public function start_perms() {
return json_encode(array(
"citations"=>true,
"active_incidents"=>true,
"active_units"=>true,
"civilian_database"=>true,
"vehicle_database"=>true,
"incident_reports"=>true,
"garage_manager"=>true
));
}
public function gen_uuid() {
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
mt_rand( 0, 0xffff ),
mt_rand( 0, 0x0fff ) | 0x4000,
mt_rand( 0, 0x3fff ) | 0x8000,
mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}
public function gen_rand_password($len = 6) {
return substr(md5(rand()),0,$len);
}
public function valid_uuid_format($uuid) {
if(preg_match("/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i",$uuid))
return TRUE;
return FALSE;
}
public function hash_password($password) {
return sha1($password.md5(sha1(md5($password))).$password);
}
public function validate_sl_username($username) {
$d = $this->get_http_request("http://w-hat.com/name2key/".$username);
if($d == "00000000-0000-0000-0000-000000000000")
return FALSE;
else if($d == "Invalid name")
return FALSE;
return TRUE;
}
public function sl_name2key($username) {
return "".$this->get_http_request("http://w-hat.com/name2key/".$username);
}
public function pretty_name($username) {
$username = str_replace("."," ",$username);
if(str_word_count($username) == 1)
$username = $username .= " resident";
$username = ucwords($username);
return $username;
}
private function get_http_request($url) {
$ch = curl_init();
curl_setopt_array($ch,array(
CURLOPT_RETURNTRANSFER=>TRUE,
CURLOPT_TIMEOUT=>30,
CURLOPT_URL=>$url,
CURLOPT_USERAGENT=>"Aileron Server"
));
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
public function post_http_request($url,$body) {
$ch = curl_init();
curl_setopt_array($ch,array(
CURLOPT_URL=>$url,
CURLOPT_HTTPHEADER=>array('Content-Type: application/x-www-form-urlencoded'),
CURLOPT_POST=>TRUE,
CURLOPT_POSTFIELDS, parse_str($body),
CURLOPT_RETURNTRANSFER=>TRUE,
));
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
public function pdo_sql_debug($sql,$placeholders) {
foreach($placeholders as $k => $v)
$sql = preg_replace('/:'.$k.'/',"'".$v."'",$sql);
return $sql;
}
public function validate_age($birthday, $age = 18) {
if(is_string($birthday))
$birthday = strtotime($birthday);
if(time() - $birthday < $age * 31536000)
return false;
return true;
}
public function ValidateDOB($dob, $return_data = FALSE) {
$pattern = '#^(?<day>(0[1-9])|([1-2][0-9])|(3[0-1]))/(?<month>(0[1-9])|(1[0-2]))/(?<year>[1-2][0-9][0-9][0-9])$#';
if (1 === preg_match($pattern, $dob, $matches)) {
if($return_data)
return array("day"=>$matches['day'],"month"=>$matches['month'],"year"=>$matches['year']);
return true;
}
return false;
}
}
class Management {
protected $pdo;
public function __construct() {
$this->pdo = new PDO(DB_URL, DB_USER, DB_PASS);
}
public function create_user($network, $user_name, $user_uuid, $admin = FALSE) {
$g = new General;
$password = $g->gen_rand_password();
$query = $this->pdo->prepare("INSERT INTO network_users (network_id, user_name, user_uuid, password, admin, permissions) VALUES(:network_id, :user_name, :user_uuid, :password, :admin, :permissions)");
$query->bindValue(":network_id",$network,PDO::PARAM_INT);
$query->bindValue(":user_name", $user_name,PDO::PARAM_STR);
$query->bindValue(":user_uuid",$user_uuid,PDO::PARAM_STR);
$query->bindValue(":password",$g->hash_password($password),PDO::PARAM_STR);
$query->bindValue(":admin",$admin,PDO::PARAM_BOOL);
$query->bindValue(":permissions",$this->get_default_permissions($network),PDO::PARAM_STR);
$query->execute();
$this->write_to_logs($network,"User Created - (".$user_name." [".$user_uuid."])");
return array("row"=>$this->pdo->lastInsertId(),"password"=>$password);
}
public function network_valid($network_id) {
$query = $this->pdo->prepare("SELECT network_id FROM network WHERE network_id=:network_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->execute();
if($query->rowCount() == 1)
return TRUE;
return FALSE;
}
public function network_name_to_id($network_name) {
$query = $this->pdo->prepare("SELECT network_id FROM network WHERE network_name=:network_name");
$query->bindValue(":network_name",$network_name,PDO::PARAM_STR);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row['network_id'];
}
public function server_uuid($network_id) {
$query = $this->pdo->prepare("SELECT server_uuid FROM network WHERE network_id=:network_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row['server_uuid'];
}
public function user_exists($network_id, $user_uuid) {
$query = $this->pdo->prepare("SELECT user_id FROM network_users WHERE network_id=:network_id AND user_uuid=:user_uuid");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->bindValue(":user_uuid",$user_uuid,PDO::PARAM_STR);
$query->execute();
if($query->rowCount() == 1) {
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row['user_id'];
}
return FALSE;
}
public function is_admin($network_id, $user_id) {
$query = $this->pdo->prepare("SELECT * FROM network_users WHERE network_id=:network_id AND user_id=:user_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
if($row['admin'] == 1)
return TRUE;
return FALSE;
}
public function update_password($network_id, $user_id, $password) {
$g = new General;
$query = $this->pdo->prepare("UPDATE network_users SET password=:password WHERE network_id=:network_id AND user_id=:user_id");
$query->bindValue(":password",$g->hash_password($password),PDO::PARAM_STR);
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
}
public function delete_user($network_id, $user_id) {
$query = $this->pdo->prepare("DELETE FROM network_users WHERE network_id=:network_id AND user_id=:user_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
}
public function user_info($user_id,$JSON = FALSE) {
$query = $this->pdo->prepare("SELECT * FROM network_users WHERE user_id=:user_id");
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
if($JSON)
return json_encode($result);
return $result;
}
public function change_user_role($user_id, $user_role) {
$query = $this->pdo->prepare("UPDATE network_users SET user_role=:user_role WHERE user_id=:user_id");
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->bindValue(":user_role",$user_role,PDO::PARAM_STR);
$query->execute();
}
public function get_user_perms($user_id, $json = FALSE) {
$query = $this->pdo->prepare("SELECT permissions FROM network_users WHERE user_id=:user_id");
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
if($json)
return $result['permissions'];
return json_decode($result['permissions'],true);
}
public function update_user_perms($user_id, $key, $value) {
$json = $this->get_user_perms($user_id);
if($value == 0 || $value == false) $json = array_replace($json, array($key => false));
else $json = array_replace($json, array($key => $value));
$query = $this->pdo->prepare("UPDATE network_users SET permissions=:permissions WHERE user_id=:user_id");
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->bindValue(":permissions",json_encode($json),PDO::PARAM_STR);
$query->execute();
}
public function update_user_perms_bulk($user_id, $json) {
$query = $this->pdo->prepare("UPDATE network_users SET permissions=:permissions WHERE user_id=:user_id");
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->bindValue(":permissions",$json,PDO::PARAM_STR);
$query->execute();
}
public function get_default_permissions($network) {
$query = $this->pdo->prepare("SELECT * FROM network WHERE network_id=:network_id");
$query->bindValue(":network_id",$network,PDO::PARAM_INT);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
return $result['default_permissions'];
}
public function edit_info($user_id, $role, $is_admin) {
$query = $this->pdo->prepare("UPDATE network_users SET user_role=:role, admin=:admin WHERE user_id=:user_id");
$query->bindValue(":role",$role,PDO::PARAM_STR);
$query->bindValue(":admin",$is_admin,PDO::PARAM_INT);
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
}
public function require_relog($user_id) {
$query = $this->pdo->prepare("SELECT * FROM network_users WHERE user_id=:user_id");
$query->bindValue(":user_id",$user_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return ($row['relog'] == 1 ? true : false);
}
public function write_to_logs($network, $data) {
if($this->network_valid($network)) {
/*$fh = fopen($_SERVER['DOCUMENT_ROOT']."/beta/logs/network-".$network.".txt","a+");
fwrite($fh,"[".date("m/d/Y h:i:s a")."]: ".$data."\n");
fclose($fh);*/
}
}
public function create_log($network) {
/*echo $_SERVER['DOCUMENT_ROOT']."/beta/logs/network-".$network.".txt";
$fh = fopen($_SERVER['DOCUMENT_ROOT']."/beta/logs/network-".$network.".txt","w");
fwrite($fh," ");
fclose($fh);*/
}
public function get_incident_info($event_id) {
$query = $this->pdo->prepare("SELECT * FROM incidents WHERE event_id=:event_id");
$query->bindValue(":event_id",$event_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row;
}
public function get_incident_id($event_number) {
$query = $this->pdo->prepare("SELECT event_id FROM incidents WHERE event_number=:event_number");
$query->bindValue(":event_number",$event_number,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row['event_id'];
}
public function update_incident($network_id, $event_id, $data_array) {
$query = $this->pdo->prepare("UPDATE incidents SET call_type=:call_type, priority=:priority, status=:status, location=:location, description=:description WHERE event_id=:event_id");
$query->bindValue(":event_id",$event_id,PDO::PARAM_INT);
$query->bindValue(":call_type",$data_array['call_type'],PDO::PARAM_STR);
$query->bindValue(":priority",$data_array['priority'],PDO::PARAM_INT);
$query->bindValue(":status",$data_array['status'],PDO::PARAM_INT);
$query->bindValue(":location",$data_array['location'],PDO::PARAM_STR);
$query->bindValue(":description",$data_array['description'],PDO::PARAM_STR);
$query->execute();
}
public function delete_incident($event_id) {
$query = $this->pdo->prepare("DELETE FROM incidents WHERE event_id=:event_id");
$query->bindValue(":event_id",$event_id,PDO::PARAM_INT);
$query->execute();
}
public function create_incident($network_id, $data) {
$query = $this->pdo->prepare("INSERT INTO incidents (network_id,event_number,status,priority,call_type,location,time_out,description) VALUES (:network_id,:event_number,:status,:priority,:call_type,:location,:timeout,:description)");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->bindValue(":event_number",mt_rand(10000,99999),PDO::PARAM_INT);
$query->bindValue(":status",1,PDO::PARAM_INT);
$query->bindValue(":priority",$data['priority'],PDO::PARAM_INT);
$query->bindValue(":call_type",$data['call_type'],PDO::PARAM_STR);
$query->bindValue(":location",$data['location'],PDO::PARAM_STR);
$query->bindValue(":timeout",$data['timeout'],PDO::PARAM_STR);
$query->bindValue(":description",$data['description'],PDO::PARAM_STR);
$query->execute();
return array("row_id"=>$this->pdo->lastInsertId());
}
public function get_network_settings($network_id) {
$query = $this->pdo->prepare("SELECT * FROM network_settings WHERE network_id=:network_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row;
}
public function get_unit_info($unit_id) {
$query = $this->pdo->prepare("SELECT * FROM active_units WHERE unit_id=:unit_id");
$query->bindValue(":unit_id",$unit_id,PDO::PARAM_INT);
$query->execute();
return $query->fetch(PDO::FETCH_ASSOC);
}
public function get_delivery_contents($network_id) {
$query = $this->pdo->prepare("SELECT * FROM network_delivery_server WHERE network_id=:network_id");
$query->bindValue(":network_id",$_SESSION['network_id'],PDO::PARAM_INT);
$query->execute();
while($row = $query->fetch(PDO::FETCH_ASSOC))
$contents .= $row['contents'].",";
$contents = substr($contents,0,strlen($contents)-1);
$contents_list = explode(",",$contents);
return array_filter(array_unique($contents_list));
}
public function get_annoucement() {
$query = $this->pdo->prepare("SELECT * FROM annoucements ORDER BY annoucement_id DESC LIMIT 1");
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row;
}
public function get_civilian_data($user_id) {
$query = $this->pdo->prepare("SELECT * FROM civilians WHERE civilian_id=:civilian_id");
$query->bindValue(":civilian_id",$user_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row;
}
public function get_license_data($license_id) {
$query = $this->pdo->prepare("SELECT * FROM license_cards WHERE card_id=:card_id");
$query->bindValue(":card_id",$license_id,PDO::PARAM_INT);
$query->execute();
return $query->fetch(PDO::FETCH_ASSOC);
}
public function get_license_card_data_by_type($license_type) {
$query = $this->pdo->prepare("SELECT * FROM license_cards WHERE card_type=:card_type");
$query->bindValue(":card_type",$license_type,PDO::PARAM_STR);
$query->execute();
return $query->fetch(PDO::FETCH_ASSOC);
}
public function get_city_settings($network_id) {
$network_settings = $this->get_network_settings($network_id);
return json_decode($network_settings['city_settings'],TRUE);
}
public function get_license_data_by_type($network_id, $license_type) {
$query = $this->pdo->prepare("SELECT * FROM licenses WHERE license_type=:license_type AND network_id=:network_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->bindValue(":license_type",$license_type,PDO::PARAM_STR);
$query->execute();
return $query->fetch(PDO::FETCH_ASSOC);
}
public function verify_access_key($access_key) {
$query = $this->pdo->prepare("SELECT * FROM garage_manager WHERE access_key=:access_key");
$query->bindValue(":access_key",$access_key,PDO::PARAM_STR);
$query->execute();
if($query->rowCount() == 1)
return TRUE;
return FALSE;
}
public function get_network_owner_key($network_id) {
if($this->network_valid($network_id)) {
$query = $this->pdo->prepare("SELECT * FROM network WHERE network_id=:network_id");
$query->bindValue(":network_id",$network_id,PDO::PARAM_INT);
$query->execute();
$row = $query->fetch(PDO::FETCH_ASSOC);
return $row['owner_uuid'];
}
}
public function get_network_modules($network_id) {
$modules = array();
$owner = $this->get_network_owner_key($network_id);
$query = $this->pdo->prepare("SELECT * FROM network_modules WHERE owner_uuid=:owner_uuid");
$query->bindValue(":owner_uuid",$owner,PDO::PARAM_STR);
$query->execute();
while($row = $query->fetch(PDO::FETCH_ASSOC))
$modules[$row['module_name']] = true;
return $modules;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment