golden hour
/home/doctorbruno/public_html/doctorbruno.info/taeionline/support/include
⬆️ Go Up
Upload
File/Folder
Size
Actions
.MANIFEST
194.97 KB
Del
OK
.htaccess
14 B
Del
OK
JSON.php
33.13 KB
Del
OK
PasswordHash.php
6.92 KB
Del
OK
Spyc.php
31.74 KB
Del
OK
UniversalClassLoader.php
8.61 KB
Del
OK
ajax.admin.php
7.29 KB
Del
OK
ajax.config.php
4.61 KB
Del
OK
ajax.content.php
9.76 KB
Del
OK
ajax.draft.php
13.03 KB
Del
OK
ajax.email.php
2.33 KB
Del
OK
ajax.export.php
1006 B
Del
OK
ajax.filter.php
874 B
Del
OK
ajax.forms.php
13.84 KB
Del
OK
ajax.i18n.php
5.1 KB
Del
OK
ajax.kbase.php
2.93 KB
Del
OK
ajax.note.php
2.05 KB
Del
OK
ajax.orgs.php
11.73 KB
Del
OK
ajax.plugins.php
2.15 KB
Del
OK
ajax.schedule.php
4.29 KB
Del
OK
ajax.search.php
12.72 KB
Del
OK
ajax.sequence.php
3.2 KB
Del
OK
ajax.staff.php
11.62 KB
Del
OK
ajax.tasks.php
33.87 KB
Del
OK
ajax.thread.php
8.81 KB
Del
OK
ajax.tickets.php
79.7 KB
Del
OK
ajax.tips.php
1.66 KB
Del
OK
ajax.upgrader.php
2.24 KB
Del
OK
ajax.users.php
18.33 KB
Del
OK
api.cron.php
1.06 KB
Del
OK
api.tickets.php
10.36 KB
Del
OK
class.2fa.php
7.76 KB
Del
OK
class.ajax.php
1.45 KB
Del
OK
class.api.php
15.31 KB
Del
OK
class.app.php
1.49 KB
Del
OK
class.attachment.php
6.95 KB
Del
OK
class.auth.php
50.73 KB
Del
OK
class.avatar.php
6.44 KB
Del
OK
class.banlist.php
2.58 KB
Del
OK
class.base32.php
4.07 KB
Del
OK
class.businesshours.php
7.08 KB
Del
OK
class.canned.php
9.05 KB
Del
OK
class.captcha.php
1.73 KB
Del
OK
class.category.php
11.14 KB
Del
OK
class.charset.php
3.41 KB
Del
OK
class.cli.php
9.48 KB
Del
OK
class.client.php
15.39 KB
Del
OK
class.collaborator.php
5.65 KB
Del
OK
class.company.php
2.65 KB
Del
OK
class.config.php
60.36 KB
Del
OK
class.controller.php
1.15 KB
Del
OK
class.cron.php
3.6 KB
Del
OK
class.crypto.php
18.92 KB
Del
OK
class.csrf.php
2.38 KB
Del
OK
class.dept.php
33.21 KB
Del
OK
class.dispatcher.php
7.12 KB
Del
OK
class.draft.php
6.23 KB
Del
OK
class.dynamic_forms.php
64.98 KB
Del
OK
class.email.php
49 KB
Del
OK
class.error.php
1.69 KB
Del
OK
class.export.php
32.92 KB
Del
OK
class.faq.php
15.05 KB
Del
OK
class.file.php
34.59 KB
Del
OK
class.filter.php
31.9 KB
Del
OK
class.filter_action.php
23.67 KB
Del
OK
class.format.php
44.3 KB
Del
OK
class.forms.php
195.58 KB
Del
OK
class.http.php
7.16 KB
Del
OK
class.i18n.php
24.28 KB
Del
OK
class.import.php
6.9 KB
Del
OK
class.json.php
2.71 KB
Del
OK
class.knowledgebase.php
5.8 KB
Del
OK
class.list.php
42 KB
Del
OK
class.lock.php
4.05 KB
Del
OK
class.log.php
1.55 KB
Del
OK
class.mail.php
35.76 KB
Del
OK
class.mailer.php
25.75 KB
Del
OK
class.mailfetch.php
9.72 KB
Del
OK
class.mailparse.php
30.99 KB
Del
OK
class.message.php
6.42 KB
Del
OK
class.migrater.php
5.2 KB
Del
OK
class.misc.php
7.5 KB
Del
OK
class.model.php
2.3 KB
Del
OK
class.nav.php
14.15 KB
Del
OK
class.note.php
2.39 KB
Del
OK
class.oauth2.php
4.04 KB
Del
OK
class.organization.php
22.45 KB
Del
OK
class.orm.php
120.9 KB
Del
OK
class.osticket.php
20.64 KB
Del
OK
class.ostsession.php
21.86 KB
Del
OK
class.page.php
10.59 KB
Del
OK
class.pagenate.php
5.53 KB
Del
OK
class.passwd.php
1.21 KB
Del
OK
class.pdf.php
3.83 KB
Del
OK
class.plugin.php
36.13 KB
Del
OK
class.priority.php
1.81 KB
Del
OK
class.queue.php
103.51 KB
Del
OK
class.report.php
11.76 KB
Del
OK
class.role.php
11.27 KB
Del
OK
class.schedule.php
46.28 KB
Del
OK
class.search.php
61.66 KB
Del
OK
class.sequence.php
7.27 KB
Del
OK
class.session.php
19.25 KB
Del
OK
class.setup.php
3.55 KB
Del
OK
class.signal.php
4.16 KB
Del
OK
class.sla.php
9.11 KB
Del
OK
class.staff.php
60.21 KB
Del
OK
class.task.php
56.21 KB
Del
OK
class.team.php
12.31 KB
Del
OK
class.template.php
23.45 KB
Del
OK
class.thread.php
108.96 KB
Del
OK
class.thread_actions.php
17.08 KB
Del
OK
class.ticket.php
167.39 KB
Del
OK
class.timezone.php
21.94 KB
Del
OK
class.topic.php
20.06 KB
Del
OK
class.translation.php
34.79 KB
Del
OK
class.upgrader.php
13.76 KB
Del
OK
class.user.php
43.4 KB
Del
OK
class.usersession.php
7.55 KB
Del
OK
class.util.php
10.07 KB
Del
OK
class.validator.php
12.94 KB
Del
OK
class.variable.php
11.93 KB
Del
OK
class.xml.php
3.23 KB
Del
OK
class.yaml.php
1.15 KB
Del
OK
cli
-
Del
OK
client
-
Del
OK
config
-
Del
OK
fpdf
-
Del
OK
htmLawed.php
53.53 KB
Del
OK
html2text.php
33.71 KB
Del
OK
i18n
-
Del
OK
index.php
37 B
Del
OK
laminas-mail
-
Del
OK
mpdf
-
Del
OK
mysqli.php
9.55 KB
Del
OK
ost-config.php
5.63 KB
Del
OK
ost-sampleconfig.php
6.24 KB
Del
OK
pear
-
Del
OK
plugins
-
Del
OK
staff
-
Del
OK
tnef_decoder.php
19.82 KB
Del
OK
upgrader
-
Del
OK
Edit: class.osticket.php
<?php /******************************************************************* class.osticket.php osTicket (sys) -> Config. Core osTicket object: loads congfig and provides loggging facility. Use osTicket::start(configId) Peter Rotich <peter@osticket.com> Copyright (c) 2006-2013 osTicket http://www.osticket.com Released under the GNU General Public License WITHOUT ANY WARRANTY. See LICENSE.TXT for details. vim: expandtab sw=4 ts=4 sts=4: **********************************************************************/ require_once(INCLUDE_DIR.'class.csrf.php'); //CSRF token class. require_once(INCLUDE_DIR.'class.migrater.php'); require_once(INCLUDE_DIR.'class.plugin.php'); require_once INCLUDE_DIR . 'class.message.php'; require_once(INCLUDE_DIR.'UniversalClassLoader.php'); use Symfony\Component\ClassLoader\UniversalClassLoader_osTicket; define('LOG_WARN',LOG_WARNING); class osTicket { var $loglevel=array(1=>'Error','Warning','Debug'); //Page errors. var $errors; //System var $system; var $warning; var $message; var $title; //Custom title. html > head > title. var $headers; var $pjax_extra; var $config; var $session; var $csrf; var $company; var $plugins; function __construct() { require_once(INCLUDE_DIR.'class.config.php'); //Config helper require_once(INCLUDE_DIR.'class.company.php'); // Load the config $this->config = new OsticketConfig(); // Start Session if (!defined('SESSION_SESSID')) define('SESSION_SESSID', 'OSTSESSID'); $this->session = osTicketSession::start(SESSION_SESSID, SESSION_TTL, $this->isUpgradePending()); // CSRF Token $this->csrf = new CSRF('__CSRFToken__'); // Company information $this->company = new Company(); // Load Plugin Manager $this->plugins = new PluginManager(); } function isSystemOnline() { return ($this->getConfig() && $this->getConfig()->isHelpDeskOnline() && !$this->isUpgradePending()); } function isUpgradePending() { foreach (DatabaseMigrater::getUpgradeStreams(UPGRADE_DIR.'streams/') as $stream=>$hash) if (strcasecmp($hash, $this->getConfig()->getSchemaSignature($stream))) return true; return false; } function getSession() { return $this->session; } function getConfig() { return $this->config; } function getDBSignature($namespace='core') { return $this->getConfig()->getSchemaSignature($namespace); } function getVersion() { return THIS_VERSION; } function getCSRF(){ return $this->csrf; } function getCSRFToken() { return $this->getCSRF()->getToken(); } function getCSRFFormInput() { return $this->getCSRF()->getFormInput(); } function validateCSRFToken($token) { return ($token && $this->getCSRF()->validateToken($token)); } function checkCSRFToken($name=false, $rotate=false) { $name = $name ?: $this->getCSRF()->getTokenName(); $token = $_POST[$name] ?: $_SERVER['HTTP_X_CSRFTOKEN']; if ($token && $this->validateCSRFToken($token)) { if ($rotate) $this->getCSRF()->rotate(); return true; } $msg=sprintf(__('Invalid CSRF token [%1$s] on %2$s'), Format::htmlchars(Format::sanitize($token)), THISPAGE); $this->logWarning(__('Invalid CSRF Token').' '.$name, $msg, false); return false; } function getLinkToken() { return md5($this->getCSRFToken().SECRET_SALT.session_id()); } function validateLinkToken($token) { return ($token && !strcasecmp($token, $this->getLinkToken())); } /* Replace Template Variables */ function replaceTemplateVariables($input, $vars=array()) { $replacer = new VariableReplacer(); $replacer->assign(array_merge($vars, array('url' => $this->getConfig()->getBaseUrl(), 'company' => $this->company) )); return $replacer->replaceVars($input); } static function getVarScope() { return array( 'url' => __("osTicket's base url (FQDN)"), 'company' => array('class' => 'Company', 'desc' => __('Company Information')), ); } function addExtraHeader($header, $pjax_script=false) { $this->headers[md5($header)] = $header; $this->pjax_extra[md5($header)] = $pjax_script; } function getExtraHeaders() { return $this->headers; } function getExtraPjax() { return $this->pjax_extra; } function setPageTitle($title) { $this->title = $title; } function getPageTitle() { return $this->title; } function getErrors() { return $this->errors; } function setErrors($errors) { $this->errors = $errors; } function getError() { return $this->system['err'] ?? null; } function setError($error) { $this->system['error'] = $error; } function clearError() { $this->setError(''); } function getWarning() { return $this->system['warning']; } function setWarning($warning) { $this->system['warning'] = $warning; } function clearWarning() { $this->setWarning(''); } function getNotice() { return $this->system['notice'] ?? null; } function setNotice($notice) { $this->system['notice'] = $notice; } function clearNotice() { $this->setNotice(''); } function alertAdmin($subject, $message, $log=false) { //Set admin's email address if (!($to = $this->getConfig()->getAdminEmail())) $to = ADMIN_EMAIL; //append URL to the message $message.="\n\n".$this->getConfig()->getBaseUrl(); //Try getting the alert email. $email=null; if(!($email=$this->getConfig()->getAlertEmail())) $email=$this->getConfig()->getDefaultEmail(); //will take the default email. if($email) { $email->sendAlert($to, $subject, $message, null, array('text'=>true, 'reply-tag'=>false)); } else {//no luck - try the system mail. osTicket\Mail\Mailer::sendmail($to, $subject, $message, '"'.__('osTicket Alerts').sprintf('" <%s>',$to)); } //log the alert? Watch out for loops here. if($log) $this->log(LOG_CRIT, $subject, $message, false); //Log the entry...and make sure no alerts are resent. } function logDebug($title, $message, $force=false) { return $this->log(LOG_DEBUG, $title, $message, false, $force); } function logInfo($title, $message, $alert=false) { return $this->log(LOG_INFO, $title, $message, $alert); } function logWarning($title, $message, $alert=true) { return $this->log(LOG_WARN, $title, $message, $alert); } function logError($title, $error, $alert=true) { return $this->log(LOG_ERR, $title, $error, $alert); } function logDBError($title, $error, $alert=true) { if($alert && !$this->getConfig()->alertONSQLError()) $alert =false; $e = new Exception(); $bt = str_replace(ROOT_DIR, _S(/* `root` is a root folder */ '(root)').'/', $e->getTraceAsString()); $error .= nl2br("\n\n---- "._S('Backtrace')." ----\n".$bt); // Prevent recursive loops through this code path if (substr_count($bt, __FUNCTION__) > 1) return; return $this->log(LOG_ERR, $title, $error, $alert); } function log($priority, $title, $message, $alert=false, $force=false) { //We are providing only 3 levels of logs. Windows style. switch($priority) { case LOG_EMERG: case LOG_ALERT: case LOG_CRIT: case LOG_ERR: $level=1; //Error break; case LOG_WARN: case LOG_WARNING: $level=2; //Warning break; case LOG_NOTICE: case LOG_INFO: case LOG_DEBUG: default: $level=3; //Debug } $loglevel=array(1=>'Error','Warning','Debug'); $info = array( 'title' => &$title, 'level' => $loglevel[$level], 'level_id' => $level, 'body' => &$message, ); Signal::send('syslog', null, $info); //Logging everything during upgrade. if($this->getConfig()->getLogLevel()<$level && !$force) return false; //Save log based on system log level settings. $sql='INSERT INTO '.SYSLOG_TABLE.' SET created=NOW(), updated=NOW() ' .',title='.db_input(Format::sanitize($title, true)) .',log_type='.db_input($loglevel[$level]) .',log='.db_input(Format::sanitize($message, false)) .',ip_address='.db_input($_SERVER['REMOTE_ADDR']) .',logger=""'; db_query($sql, false); // Alert admin if enabled... $alert = $alert && !$this->isUpgradePending(); if ($alert && $this->getConfig()->getLogLevel() >= $level) $this->alertAdmin($title, $message); return true; } function purgeLogs() { if(!($gp=$this->getConfig()->getLogGracePeriod()) || !is_numeric($gp)) return false; //System logs $sql='DELETE FROM '.SYSLOG_TABLE.' WHERE DATE_ADD(created, INTERVAL '.$gp.' MONTH)<=NOW()'; db_query($sql); //TODO: Activity logs return true; } /* * Util functions * */ function get_var($index, $vars, $default='', $type=null) { if(is_array($vars) && array_key_exists($index, $vars) && (!$type || gettype($vars[$index])==$type)) return $vars[$index]; return $default; } function get_db_input($index, $vars, $quote=true) { return db_input($this->get_var($index, $vars), $quote); } static function get_path_info() { if(isset($_SERVER['PATH_INFO'])) return htmlentities($_SERVER['PATH_INFO']); if(isset($_SERVER['ORIG_PATH_INFO'])) return htmlentities($_SERVER['ORIG_PATH_INFO']); //TODO: conruct possible path info. return null; } /** * Fetch the current version(s) of osTicket softwares via DNS. The * constants of MAJOR_VERSION, THIS_VERSION, and GIT_VERSION will be * consulted to arrive at the most relevant version code for the latest * release. * * Parameters: * $product - (string|default:'core') the product to fetch versions for * $major - (string|optional) optional major version to compare. This is * useful if more than one version is available. Only versions * specifying this major version ('m') are considered as version * candidates. * * Dns: * The DNS zone will have TXT records for the product will be published * in this format: * * "v=1; m=1.9; V=1.9.11; c=deadbeef" * * Where the string is a semicolon-separated string of key/value pairs * with the following meanings: * * --+-------------------------- * v | DNS record format version * * For v=1, this is the meaning of the other keys * --+------------------------------------------- * m | (optional) major product version * V | Full product version (usually a git tag) * c | Git commit id of the release tag * s | Schema signature of the version, which might help detect * | required migration * * Returns: * (string|bool|null) * - 'v1.9.11' or 'deadbeef' if release tag or git commit id seems to * be most appropriate based on the value of GIT_VERSION * - null if the $major version is no longer supported * - false if no information is available in DNS */ function getLatestVersion($product='core', $major=null) { $records = dns_get_record($product.'.updates.osticket.com', DNS_TXT); if (!$records) return false; $versions = array(); foreach ($records as $r) { $txt = $r['txt']; $info = array(); foreach (explode(';', $r['txt']) as $kv) { list($k, $v) = explode('=', $kv); if (!($k = trim($k))) continue; $info[$k] = trim($v); } $versions[] = $info; } foreach ($versions as $info) { switch ($info['v']) { case '1': if ($major && $info['m'] && $info['m'] != $major) continue 2; if ($product == 'core' && GIT_VERSION == '$git') return $info['c']; return $info['V']; } } } /* * getTrustedProxies * * Get defined trusted proxies */ static function getTrustedProxies() { static $proxies = null; // Parse trusted proxies from config file if (!isset($proxies) && defined('TRUSTED_PROXIES')) $proxies = array_filter( array_map('trim', explode(',', TRUSTED_PROXIES))); return $proxies ?: array(); } /* * getLocalNetworkAddresses * * Get defined local network addresses */ static function getLocalNetworkAddresses() { static $ips = null; // Parse local addreses from config file if (!isset($ips) && defined('LOCAL_NETWORKS')) $ips = array_filter( array_map('trim', explode(',', LOCAL_NETWORKS))); return $ips ?: array(); } static function get_root_path($dir) { /* If run from the commandline, DOCUMENT_ROOT will not be set. It is * also likely that the ROOT_PATH will not be necessary, so don't * bother attempting to figure it out. * * Secondly, if the directory of main.inc.php is the same as the * document root, the the ROOT path truly is '/' */ if(!isset($_SERVER['DOCUMENT_ROOT']) || !strcasecmp($_SERVER['DOCUMENT_ROOT'], $dir)) return '/'; /* The main idea is to try and use full-path filename of PHP_SELF and * SCRIPT_NAME. The SCRIPT_NAME should be the path of that script * inside the DOCUMENT_ROOT. This is most likely useful if osTicket * is run using something like Apache UserDir setting where the * DOCUMENT_ROOT of Apache and the installation path of osTicket * have nothing in comon. * * +---------------------------+-------------------+----------------+ * | PHP Script | SCRIPT_NAME | ROOT_PATH | * +---------------------------+-------------------+----------------+ * | /home/u1/www/osticket/... | /~u1/osticket/... | /~u1/osticket/ | * +---------------------------+-------------------+----------------+ * * The algorithm will remove the directory of main.inc.php from * as seen. What's left should be the script executed inside * the osTicket installation. That is removed from SCRIPT_NAME. * What's left is the ROOT_PATH. */ $bt = debug_backtrace(false); $frame = array_pop($bt); $file = str_replace('\\','/', $frame['file']); $path = substr($file, strlen(ROOT_DIR)); if($path && ($pos=strpos($_SERVER['SCRIPT_NAME'], $path))!==false) return ($pos) ? substr($_SERVER['SCRIPT_NAME'], 0, $pos) : '/'; if (self::is_cli()) return '/'; return null; } /* * get_base_url * * Get base url osTicket is installed on * It Should match help desk url. * */ static function get_base_url() { return sprintf('http%s://%s', osTicket::is_https() ? 's' : '', $_SERVER['HTTP_HOST'] . ROOT_PATH); } /* * get_client_port * * Get client PORT from "Http_X-Forwarded-PORT" if we have trusted * proxies set. * FIXME: Follow trusted proxies chain * */ static function get_client_port($header='HTTP_X_FORWARDED_PORT') { $port = $_SERVER['SERVER_PORT']; // We're just making sure we have Trusted Proxies // FIXME: Validate $proxies = self::getTrustedProxies(); if (isset($_SERVER[$header]) && $proxies) $port = $_SERVER[$header]; return $port; } /* * get_client_ip * * Get client IP address from "Http_X-Forwarded-For" header by following a * chain of trusted proxies. * * "Http_X-Forwarded-For" header value is a comma+space separated list of IP * addresses, the left-most being the original client, and each successive * proxy that passed the request all the way to the originating IP address. * */ static function get_client_ip($header='HTTP_X_FORWARDED_FOR') { // Request IP $ip = $_SERVER['REMOTE_ADDR']; // Trusted proxies. $proxies = self::getTrustedProxies(); // Return current IP address if header is not set and // request is not from a trusted proxy. if (!isset($_SERVER[$header]) || !$proxies || !self::is_trusted_proxy($ip, $proxies)) return $ip; // Get chain of proxied ip addresses $ips = array_map('trim', explode(',', $_SERVER[$header])); // Add request IP to the chain $ips[] = $ip; // Walk the chain in reverse - remove invalid IPs $ips = array_reverse($ips); foreach ($ips as $k => $ip) { // Make sure the IP is valid and not a trusted proxy if ($k && !Validator::is_ip($ip)) unset($ips[$k]); elseif ($k && !self::is_trusted_proxy($ip, $proxies)) return $ip; } // We trust the 400 lb hacker... return left most valid IP return array_pop($ips); } /* * Checks if the IP is that of a trusted proxy * */ static function is_trusted_proxy($ip, $proxies=array()) { $proxies = $proxies ?: self::getTrustedProxies(); // We don't have any proxies set. if (!$proxies) return false; // Wildcard set - trust all proxies else if (in_array('*', $proxies)) return true; return ($proxies && Validator::check_ip($ip, $proxies)); } /** * is_local_ip * * Check if a given IP is part of defined local address blocks * */ static function is_local_ip($ip, $ips=array()) { $ips = $ips ?: self::getLocalNetworkAddresses() ?: array(); foreach ($ips as $addr) { if (Validator::check_ip($ip, $addr)) return true; } return false; } /** * Returns TRUE if the request was made via HTTPS and false otherwise */ static function is_https() { // Local server flags if (isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on') return true; // Check if SSL was terminated by a loadbalancer return (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && !strcasecmp($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https')); } /** * Returns TRUE if the current browser is IE and FALSE otherwise */ static function is_ie() { if (preg_match('/MSIE|Internet Explorer|Trident\/[\d]{1}\.[\d]{1,2}/', $_SERVER['HTTP_USER_AGENT'])) return true; return false; } /* returns true if script is being executed via commandline */ static function is_cli() { return (!strcasecmp(substr(php_sapi_name(), 0, 3), 'cli') || (!isset($_SERVER['REQUEST_METHOD']) && !isset($_SERVER['HTTP_HOST'])) //Fallback when php-cgi binary is used via cli ); } static function register_namespace($dirs) { $dirs = is_array($dirs) ? $dirs : [$dirs]; $loader = new UniversalClassLoader_osTicket(); $loader->registerNamespaceFallbacks($dirs); $loader->register(); return $loader; } static function start() { // Prep basic translation support Internationalization::bootstrap(); if(!($ost = new osTicket())) return null; // Bootstrap installed plugins //XXX: This is TEMP for v1.17 if (!$ost->isUpgradePending()) $ost->plugins->bootstrap(); // Mirror content updates to the search backend $ost->searcher = new SearchInterface(); return $ost; } } ?>
Save