%PDF- %PDF-
Direktori : /data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/ |
Current File : //data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Ajax.php |
<?php /** * TorrentPier – Bull-powered BitTorrent tracker engine * * @copyright Copyright (c) 2005-2018 TorrentPier (https://torrentpier.com) * @link https://github.com/torrentpier/torrentpier for the canonical source repository * @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License */ namespace TorrentPier\Legacy; /** * Class Ajax * @package TorrentPier\Legacy */ class Ajax { public $request = []; public $response = []; public $valid_actions = [ // ACTION NAME AJAX_AUTH 'edit_user_profile' => ['admin'], 'change_user_rank' => ['admin'], 'change_user_opt' => ['admin'], 'manage_user' => ['admin'], 'manage_admin' => ['admin'], 'sitemap' => ['admin'], 'mod_action' => ['mod'], 'topic_tpl' => ['mod'], 'group_membership' => ['mod'], 'post_mod_comment' => ['mod'], 'avatar' => ['user'], 'gen_passkey' => ['user'], 'change_torrent' => ['user'], 'change_tor_status' => ['user'], 'manage_group' => ['user'], 'view_post' => ['guest'], 'view_torrent' => ['guest'], 'user_register' => ['guest'], 'posts' => ['guest'], 'index_data' => ['guest'], ]; public $action; /** * Constructor */ public function __construct() { ob_start([&$this, 'ob_handler']); header('Content-Type: text/plain'); } /** * Perform action */ public function exec() { global $lang; // Exit if we already have errors if (!empty($this->response['error_code'])) { $this->send(); } // Check that requested action is valid $action = $this->action; if (!$action || !\is_string($action)) { $this->ajax_die('no action specified'); } elseif (!$action_params =& $this->valid_actions[$action]) { $this->ajax_die('invalid action: ' . $action); } // Auth check switch ($action_params[AJAX_AUTH]) { // GUEST case 'guest': break; // USER case 'user': if (IS_GUEST) { $this->ajax_die($lang['NEED_TO_LOGIN_FIRST']); } break; // MOD case 'mod': if (!IS_AM) { $this->ajax_die($lang['ONLY_FOR_MOD']); } $this->check_admin_session(); break; // ADMIN case 'admin': if (!IS_ADMIN) { $this->ajax_die($lang['ONLY_FOR_ADMIN']); } $this->check_admin_session(); break; // SUPER_ADMIN case 'super_admin': if (!IS_SUPER_ADMIN) { $this->ajax_die($lang['ONLY_FOR_SUPER_ADMIN']); } $this->check_admin_session(); break; default: trigger_error("invalid auth type for $action", E_USER_ERROR); } // Run action $this->$action(); // Send output $this->send(); } /** * Exit on error * * @param $error_msg * @param int $error_code */ public function ajax_die($error_msg, $error_code = E_AJAX_GENERAL_ERROR) { $this->response['error_code'] = $error_code; $this->response['error_msg'] = $error_msg; $this->send(); } /** * Initialization */ public function init() { $this->request = $_POST; $this->action =& $this->request['action']; } /** * Send data */ public function send() { $this->response['action'] = $this->action; if (DBG_USER && SQL_DEBUG && !empty($_COOKIE['sql_log'])) { $this->response['sql_log'] = Dev::get_sql_log(); } // sending output will be handled by $this->ob_handler() exit(); } /** * OB Handler * * @param $contents * @return string */ public function ob_handler($contents) { if (DBG_USER) { if ($contents) { $this->response['raw_output'] = $contents; } } $response_js = json_encode($this->response); if (GZIP_OUTPUT_ALLOWED && !\defined('NO_GZIP')) { if (UA_GZIP_SUPPORTED && \strlen($response_js) > 2000) { header('Content-Encoding: gzip'); $response_js = gzencode($response_js, 1); } } return $response_js; } /** * Admin session */ public function check_admin_session() { global $user; if (!$user->data['session_admin']) { if (empty($this->request['user_password'])) { $this->prompt_for_password(); } else { $login_args = [ 'login_username' => $user->data['username'], 'login_password' => $_POST['user_password'], ]; if (!$user->login($login_args, true)) { $this->ajax_die('Wrong password'); } } } } /** * Prompt for password */ public function prompt_for_password() { $this->response['prompt_password'] = 1; $this->send(); } /** * Prompt for confirmation * * @param string $confirm_msg */ public function prompt_for_confirm($confirm_msg) { if (empty($confirm_msg)) { $this->ajax_die('false'); } $this->response['prompt_confirm'] = 1; $this->response['confirm_msg'] = $confirm_msg; $this->send(); } /** * Verify mod rights * * @param int $forum_id */ public function verify_mod_rights($forum_id) { global $userdata, $lang; $is_auth = auth(AUTH_MOD, $forum_id, $userdata); if (!$is_auth['auth_mod']) { $this->ajax_die($lang['ONLY_FOR_MOD']); } } public function edit_user_profile() { require AJAX_DIR . '/edit_user_profile.php'; } public function change_user_rank() { require AJAX_DIR . '/change_user_rank.php'; } public function change_user_opt() { require AJAX_DIR . '/change_user_opt.php'; } public function gen_passkey() { require AJAX_DIR . '/gen_passkey.php'; } public function group_membership() { require AJAX_DIR . '/group_membership.php'; } public function manage_group() { require AJAX_DIR . '/edit_group_profile.php'; } public function post_mod_comment() { require AJAX_DIR . '/post_mod_comment.php'; } public function view_post() { require AJAX_DIR . '/view_post.php'; } public function change_tor_status() { require AJAX_DIR . '/change_tor_status.php'; } public function change_torrent() { require AJAX_DIR . '/change_torrent.php'; } public function view_torrent() { require AJAX_DIR . '/view_torrent.php'; } public function user_register() { require AJAX_DIR . '/user_register.php'; } public function mod_action() { require AJAX_DIR . '/mod_action.php'; } public function posts() { require AJAX_DIR . '/posts.php'; } public function manage_user() { require AJAX_DIR . '/manage_user.php'; } public function manage_admin() { require AJAX_DIR . '/manage_admin.php'; } public function topic_tpl() { require AJAX_DIR . '/topic_tpl.php'; } public function index_data() { require AJAX_DIR . '/index_data.php'; } public function avatar() { require AJAX_DIR . '/avatar.php'; } public function sitemap() { require AJAX_DIR . '/sitemap.php'; } }