Example #1
0
function Puff_Member_2FA_Disable($Connection, $Username, $Code)
{
    global $Sitewide;
    require_once $Sitewide['Puff']['Libs'] . 'authenticatron.php';
    ////	Check Member Existence
    // For the sake of the space-time continuum,
    // new users should not already exist.
    $Username = Puff_Member_Sanitize_Username($Username);
    $MemberExists = Puff_Member_Exists($Connection, $Username, true);
    if (!$MemberExists) {
        return array('error' => 'Sorry, that user doesn\'t exist, so we can\'t disable 2FA for it.');
    }
    ////	Get Secret
    $Secret = mysqli_fetch_once($Connection, 'SELECT `2FA Secret` FROM `Members` WHERE `Username`=\'' . $Username . '\';');
    if (empty($Secret['2FA Secret'])) {
        return array('error' => 'Sorry, 2FA isn\'t set up for that user.');
    }
    $Secret = $Secret['2FA Secret'];
    ////	Generate all the 2FA Stuff
    $Check = Authenticatron_Check($Code, $Secret);
    if ($Check) {
        ////	Update Database
        $Result = mysqli_query($Connection, 'UPDATE `Members` SET `2FA Active`=\'0\' WHERE `Username`=\'' . $Username . '\';');
        return $Result;
    } else {
        return array('error' => 'Sorry, your code was not valid. They are only valid for 30 seconds.');
    }
}
function tracker_stats()
{
    global $connection, $settings;
    require_once __DIR__ . '/once.db.connect.php';
    require_once __DIR__ . '/function.mysqli.fetch.once.php';
    // Statistics
    $stats = mysqli_fetch_once('SELECT ' . 'SUM(`state`=\'1\') AS `seeders`, ' . 'SUM(`state`=\'0\') AS `leechers`, ' . 'COUNT(DISTINCT info_hash) AS `torrents` ' . 'FROM `' . $settings['db_prefix'] . 'peers`');
    // Downloads
    $downloads = mysqli_fetch_once('SELECT ' . 'SUM(`downloads`) AS `downloads` ' . 'FROM `' . $settings['db_prefix'] . 'torrents`');
    if (!$stats) {
        tracker_error('Unable to get stats.');
    } else {
        $phoenix_version = 'Phoenix Procedural 1.3 2015-02-16 20:44:00Z eustasy';
        $stats['seeders'] = intval($stats['seeders']);
        $stats['leechers'] = intval($stats['leechers']);
        $stats['torrents'] = intval($stats['torrents']);
        $stats['downloads'] = intval($downloads['downloads']);
        $stats['peers'] = $stats['seeders'] + $stats['leechers'];
        // XML
        if (isset($_GET['xml'])) {
            header('Content-Type: text/xml');
            echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' . '<tracker version="$Id: ' . $phoenix_version . ' $">' . '<peers>' . $stats['peers'] . '</peers>' . '<seeders>' . $stats['seeders'] . '</seeders>' . '<leechers>' . $stats['leechers'] . '</leechers>' . '<torrents>' . $stats['torrents'] . '</torrents>' . '<downloads>' . $stats['downloads'] . '</downloads></tracker>';
            // JSON
        } else {
            if (isset($_GET['json'])) {
                header('Content-Type: application/json');
                echo json_encode(array('tracker' => array('version' => '$Id: ' . $phoenix_version . ' $,', 'peers' => $stats['peers'], 'seeders' => $stats['seeders'], 'leechers' => $stats['leechers'], 'torrents' => $stats['torrents'], 'downloads' => $stats['downloads'])));
                // HTML
            } else {
                echo '<!DocType html><html><head><meta charset="UTF-8">' . '<title>Phoenix: $Id: ' . $phoenix_version . ' $</title>' . '<body><pre>' . number_format($stats['peers']) . ' peers (' . number_format($stats['seeders']) . ' seeders + ' . number_format($stats['leechers']) . ' leechers) in ' . number_format($stats['torrents']) . ' torrents and' . ' ' . number_format($stats['downloads']) . ' downloads completed.</pre></body></html>';
            }
        }
    }
}
Example #3
0
function Puff_Member_Key_Value($Connection, $Username, $Key)
{
    $Username = Puff_Member_Sanitize_Username($Username);
    $Key = htmlentities($Key, ENT_QUOTES, 'UTF-8');
    $Result = mysqli_fetch_once($Connection, 'SELECT `Value` FROM `KeyValues` WHERE `Username`=\'' . $Username . '\' AND `Key`=\'' . $Key . '\';');
    return $Result['Value'];
}
function peer_event()
{
    global $connection, $settings;
    require_once __DIR__ . '/once.db.connect.php';
    require_once __DIR__ . '/function.mysqli.fetch.once.php';
    $peer = mysqli_fetch_once('SELECT * FROM `' . $settings['db_prefix'] . 'peers` ' . 'WHERE `info_hash`=\'' . $_GET['info_hash'] . '\' AND `peer_id`=\'' . $_GET['peer_id'] . '\'');
    // IF Event
    if (isset($_GET['event'])) {
        // IF Peer Exited
        if ($_GET['event'] == 'stopped') {
            if ($peer) {
                require_once __DIR__ . '/function.peer.delete.php';
                peer_delete();
                // HOOK PEER DELETE
                if (is_readable(__DIR__ . '/hook.peer.delete.php')) {
                    include __DIR__ . '/hook.peer.delete.php';
                }
            }
            exit;
            // END IF Peer Exited
            // IF Peer Completed
        } else {
            if ($_GET['event'] == 'completed') {
                // Force Seeding Status
                $settings['seeding'] = 1;
                // Increment downloads
                require_once __DIR__ . '/function.peer.completed.php';
                peer_completed();
                // HOOK DOWNLOAD COMPLETE
                if (is_readable(__DIR__ . '/hook.download.complete.php')) {
                    include __DIR__ . '/hook.download.complete.php';
                }
            }
        }
        // END IF Peer Completed
    }
    // END IF Event
    // IF Any Change
    if (!$peer || $peer['ip'] != $_GET['ip'] || $peer['port'] != $_GET['port'] || $peer['state'] != $settings['seeding']) {
        require_once __DIR__ . '/function.peer.new.php';
        peer_new();
        // HOOK PEER NEW/CHANGE
        if (is_readable(__DIR__ . '/hook.peer.change.php')) {
            include __DIR__ . '/hook.peer.change.php';
        }
        // END Any Change
        // IF Unchanged
    } else {
        require_once __DIR__ . '/function.peer.access.php';
        peer_access();
        // HOOK PEER ACCESS
        if (is_readable(__DIR__ . '/hook.peer.access.php')) {
            include __DIR__ . '/hook.peer.access.php';
        }
    }
    // END IF Unchanged
}
function torrent_scrape()
{
    global $connection, $settings;
    require_once __DIR__ . '/once.db.connect.php';
    require_once __DIR__ . '/function.mysqli.fetch.once.php';
    // select seeders and leechers
    $query = '
		SELECT
			`p`.`info_hash` AS `info_hash`,
			SUM(`p`.`state`=\'1\') AS `seeders`,
			SUM(`p`.`state`=\'0\') AS `leechers`,
			`t`.`downloads` AS `downloads`
		FROM `' . $settings['db_prefix'] . 'peers` AS `p`
			LEFT JOIN `' . $settings['db_prefix'] . 'torrents` AS `t`
			ON `p`.`info_hash`=`t`.`info_hash`
		WHERE `p`.`info_hash`=\'' . $_GET['info_hash'] . '\';';
    $scrape = mysqli_fetch_once($query);
    if (!$scrape) {
        tracker_error('Unable to scrape for that torrent.');
    } else {
        $scrape['seeders'] = intval($scrape['seeders']);
        $scrape['leechers'] = intval($scrape['leechers']);
        $scrape['downloads'] = intval($scrape['downloads']);
        $scrape['peers'] = $scrape['seeders'] + $scrape['leechers'];
        // XML
        if (isset($_GET['xml'])) {
            header('Content-Type: text/xml');
            echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' . '<torrent>' . '<info_hash>' . $_GET['info_hash'] . '</info_hash>' . '<seeders>' . $scrape['seeders'] . '</seeders>' . '<leechers>' . $scrape['leechers'] . '</leechers>' . '<peers>' . $scrape['peers'] . '</peers>' . '<downloads>' . $scrape['downloads'] . '</downloads>' . '</torrent>';
            // JSON
        } else {
            if (isset($_GET['json'])) {
                header('Content-Type: application/json');
                echo json_encode(array('torrent' => array('info_hash' => $_GET['info_hash'], 'seeders' => $scrape['seeders'], 'leechers' => $scrape['leechers'], 'peers' => $scrape['peers'], 'downloads' => $scrape['downloads'])));
            } else {
                $echo = 'd
	5:files
	d
		20:' . hex2bin($_GET['info_hash']) . '
		d
			8:complete
			i' . $scrape['seeders'] . 'e
			10:downloaded
			i' . $scrape['downloads'] . 'e
			10:incomplete
			i' . $scrape['leechers'] . 'e
		e
	e
e';
                if (isset($_GET['verbose'])) {
                    echo $echo;
                } else {
                    echo preg_replace('/\\s+/', '', $echo);
                }
            }
        }
    }
}
<?php

require_once $settings['functions'] . 'function.peer.delete.php';
require_once $settings['functions'] . 'function.mysqli.fetch.once.php';
$insert = 'INSERT INTO `' . $settings['db_prefix'] . 'peers` ( `info_hash`, `peer_id` ) VALUES ( \'__TEST_1__\', \'__TEST_1__\' );';
mysqli_query($connection, $insert);
$peer['info_hash'] = '__TEST_1__';
$peer['peer_id'] = '__TEST_1__';
peer_delete($connection, $settings, $peer);
$select = 'SELECT * FROM `' . $settings['db_prefix'] . 'peers` WHERE `info_hash` = \'__TEST_1__\' AND `peer_id` = \'__TEST_1__\';';
$result = mysqli_fetch_once($connection, $select);
$delete = 'DELETE FROM `' . $settings['db_prefix'] . 'peers` WHERE `info_hash` LIKE \'__TEST_%\';';
mysqli_query($connection, $delete);
if ($result) {
    echo 'Peer does not appear to have been deleted.' . PHP_EOL;
    $failure = true;
}
<?php

require_once $settings['functions'] . 'function.mysqli.fetch.once.php';
// Statistics
$sql = 'SELECT ' . 'SUM(`state`=\'1\') AS `seeders`, ' . 'SUM(`state`=\'0\') AS `leechers`, ' . 'COUNT(DISTINCT info_hash) AS `torrents` ' . 'FROM `' . $settings['db_prefix'] . 'peers`;';
$stats = mysqli_fetch_once($connection, $sql);
// Downloads
$sql = 'SELECT ' . 'SUM(`downloads`) AS `downloads` ' . 'FROM `' . $settings['db_prefix'] . 'torrents`;';
$downloads = mysqli_fetch_once($connection, $sql);
if (!$stats || !$downloads) {
    tracker_error('Unable to get stats.');
} else {
    $stats['seeders'] = intval($stats['seeders']);
    $stats['leechers'] = intval($stats['leechers']);
    $stats['torrents'] = intval($stats['torrents']);
    $stats['downloads'] = intval($downloads['downloads']);
    $stats['peers'] = $stats['seeders'] + $stats['leechers'];
    // XML
    if (isset($_GET['xml'])) {
        header('Content-Type: text/xml');
        echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>' . '<tracker version="$Id: ' . $settings['phoenix_version'] . ' $">' . '<peers>' . $stats['peers'] . '</peers>' . '<seeders>' . $stats['seeders'] . '</seeders>' . '<leechers>' . $stats['leechers'] . '</leechers>' . '<torrents>' . $stats['torrents'] . '</torrents>' . '<downloads>' . $stats['downloads'] . '</downloads></tracker>';
        // JSON
    } else {
        if (isset($_GET['json'])) {
            header('Content-Type: application/json');
            echo json_encode(array('tracker' => array('version' => '$Id: ' . $settings['phoenix_version'] . ' $,', 'peers' => $stats['peers'], 'seeders' => $stats['seeders'], 'leechers' => $stats['leechers'], 'torrents' => $stats['torrents'], 'downloads' => $stats['downloads'])));
            // HTML
        } else {
            echo '<!DocType html><html><head><meta charset="UTF-8">' . '<title>Phoenix: $Id: ' . $settings['phoenix_version'] . ' $</title>' . '<body><pre>' . number_format($stats['peers']) . ' peers (' . number_format($stats['seeders']) . ' seeders + ' . number_format($stats['leechers']) . ' leechers) in ' . number_format($stats['torrents']) . ' torrents and' . ' ' . number_format($stats['downloads']) . ' downloads completed.</pre></body></html>';
        }
    }
<?php

require_once $settings['functions'] . 'function.mysqli.fetch.once.php';
// begin response
$response = 'd8:intervali' . $settings['announce_interval'] . 'e12:min intervali' . $settings['min_interval'] . 'e5:peers';
$sql = 'SELECT COUNT(*) AS `count` FROM `' . $settings['db_prefix'] . 'peers` ' . 'WHERE `info_hash`=\'' . $peer['info_hash'] . '\';';
$peer_count = mysqli_fetch_once($connection, $sql);
if (!$peer_count) {
    $peer_count = 0;
} else {
    $peer_count = $peer_count['count'];
}
$sql = 'SELECT * FROM `' . $settings['db_prefix'] . 'peers` WHERE `info_hash`=\'' . $peer['info_hash'] . '\'';
// IF there are more peers than requested,
// only return the ones we need.
if ($peer_count > $peer['numwant']) {
    $sql .= ' LIMIT ' . $peer['numwant'] . ' OFFSET ' . mt_rand(0, $peer_count - $peer['numwant']) . ';';
    // IF there are more peers than the random limit.
} else {
    if ($peer_count > $settings['random_limit']) {
        $sql .= ' ORDER BY RAND();';
    }
}
// IF Compact
if ($peer['compact']) {
    $peers = '';
    $peersv6 = '';
    // END IF Compact
    // IF Not Compact
} else {
    $response .= 'l';
function torrent_announce()
{
    global $connection, $settings;
    require_once __DIR__ . '/once.db.connect.php';
    // begin response
    $response = 'd8:intervali' . $settings['announce_interval'] . 'e12:min intervali' . $settings['min_interval'] . 'e5:peers';
    require_once __DIR__ . '/function.mysqli.fetch.once.php';
    $peer_count = mysqli_fetch_once('SELECT COUNT(*) AS `count` FROM `' . $settings['db_prefix'] . 'peers` WHERE `info_hash`=\'' . $_GET['info_hash'] . '\'');
    if (!$peer_count) {
        $peer_count = 0;
    } else {
        $peer_count = $peer_count['count'];
    }
    $sql = 'SELECT * FROM `' . $settings['db_prefix'] . 'peers` WHERE `info_hash`=\'' . $_GET['info_hash'] . '\'';
    // IF there are more peers than requested,
    // only return the ones we need.
    if ($peer_count > $_GET['numwant']) {
        $sql .= ' LIMIT ' . $_GET['numwant'] . ' OFFSET ' . mt_rand(0, $peer_count - $_GET['numwant']);
        // IF there are more peers than the random limit.
    } else {
        if ($peer_count > $settings['random_limit']) {
            $sql .= ' ORDER BY RAND()';
        }
    }
    // IF Compact
    if ($_GET['compact']) {
        $peers = '';
        // END IF Compact
        // IF Not Compact
    } else {
        $response .= 'l';
    }
    // END IF Not Compact
    $query = mysqli_query($connection, $sql);
    if (!$query) {
        tracker_error('Failed to select peers.');
    } else {
        while ($peer = mysqli_fetch_assoc($query)) {
            // IF Compact
            if ($_GET['compact']) {
                $peers .= hex2bin($peer['compact']);
                // END IF Compact
                // IF No Peer ID
            } else {
                if ($_GET['no_peer_id']) {
                    $response .= 'd2:ip' . strlen($peer['ip']) . ':' . $peer['ip'] . '4:porti' . $peer['port'] . 'ee';
                    // END IF No Peer ID
                    // IF Normal
                } else {
                    $response .= 'd2:ip' . strlen($peer['ip']) . ':' . $peer['ip'] . '7:peer id20:' . hex2bin($peer['peer_id']) . '4:porti' . $peer['port'] . 'ee';
                }
            }
            // END IF Normal
        }
    }
    // IF Compact
    if ($_GET['compact']) {
        // 6-byte compacted peer info
        $response .= strlen($peers) . ':' . $peers;
        // END IF Compact
        // IF Not Compact
    } else {
        $response .= 'e';
    }
    // END IF Not Compact
    echo $response . 'e';
}
<?php

require_once $settings['functions'] . 'function.mysqli.fetch.once.php';
$peer['old'] = mysqli_fetch_once($connection, 'SELECT * FROM `' . $settings['db_prefix'] . 'peers` ' . 'WHERE `info_hash`=\'' . $peer['info_hash'] . '\' AND `peer_id`=\'' . $peer['peer_id'] . '\';');
// IF Event
if (isset($_GET['event'])) {
    // IF Peer Exited
    if ($_GET['event'] == 'stopped') {
        if ($peer) {
            require_once $settings['functions'] . 'function.peer.delete.php';
            peer_delete($connection, $settings, $peer);
            // HOOK PEER STOPPED
            if (is_readable($settings['hooks'] . 'phoenix.peer.stopped.php')) {
                include $settings['hooks'] . 'phoenix.peer.stopped.php';
            }
        }
        // EXIT Only because the client does not require any data.
        exit;
        // END IF Peer Exited
        // IF Peer Completed
    } else {
        if ($_GET['event'] == 'completed') {
            // Force Seeding Status
            $peer['state'] = 1;
            // Increment downloads
            require_once $settings['functions'] . 'function.peer.completed.php';
            peer_completed($connection, $settings, $peer);
            // HOOK DOWNLOAD COMPLETE
            if (is_readable($settings['hooks'] . 'phoenix.download.complete.php')) {
                include $settings['hooks'] . 'phoenix.download.complete.php';
            }