$requiredLevel)
exit(header('HTTP/1.0 403 Forbidden'));
}
function redirect($uri) {
$host = $_SERVER['HTTP_HOST'];
exit(header('Location: https://'.$host.$uri));
}
/*
*
* Core Functions
*
*/
function panel() {
global $db;
checkSession(3);
include('./panel.php');
$q = $db->prepare("SELECT apikey FROM accounts WHERE user = (:user)");
$q->bindParam(':user', $_SESSION['user']);
$q->execute();
$r = $q->fetch();
echo 'Your API Key is '.$r['apikey'];
}
function register($user, $pass, $code) {
global $db;
// Check if code exists, if it is used, and store it in $r for later use
$q = $db->prepare("SELECT id, used, level FROM invites WHERE code = (:code) AND used = 0");
$q->bindParam(':code', $code);
$q->execute();
$r = $q->fetch();
if ($q->rowCount() == 0) redirect('/register/index.html#fail');
// Check if username is used
$q = $db->prepare("SELECT user FROM accounts WHERE user = (:user)");
$q->bindParam(':user', $user);
$q->execute();
if ($q->rowCount() > 0) redirect('/register/index.html#fail');
// If the checks passed, create the account
$q = $db->prepare("INSERT INTO accounts (user, pass, apikey, level) VALUES (:user, :pass, :apikey, :level)");
$q->bindParam(':user', $user);
$q->bindParam(':pass', password_hash($pass, PASSWORD_DEFAULT));
$q->bindParam(':apikey', generateString(KEY_CHARSET, 32));
$q->bindParam(':level', $r['level']);
$q->execute();
// Set the code as used
$q = $db->prepare("UPDATE invites SET used = (:used), usedby = (:usedby) WHERE code = (:code)");
$q->bindValue(':used', 1);
$q->bindValue(':usedby', $user);
$q->bindParam(':code', $code);
$q->execute();
// Log them in
createSession($r['id'], $user, $r['level']);
}
function generate($level) {
global $db;
checkSession(2);
// Display form if not generating an invite
if (empty($level)) {
include_once('./invite.php');
exit();
}
// Check to make sure level is valid
if ($level < $_SESSION['level'] || $level > 3) {
echo 'Invalid Access Level.
Level must be greater than your current level, and less than 4.';
exit();
}
// Create the invite code
$q = $db->prepare("INSERT INTO invites (code, level, issuer) VALUES (:code, :level, :issuer)");
$code = generateString(CODE_CHARSET, 16);
$q->bindParam(':code', $code);
$q->bindParam(':level', $level);
$q->bindParam(':issuer', $_SESSION['user']);
$q->execute();
echo 'Generation Successful.
Code: '.$code.'
Access Level: '.$level;
}
function generateString($charset, $length) {
$string = '';
for ($i = 0; $i < $length; $i++) {
$string .= $charset[rand(0, strlen($charset) - 1)];
}
return $string;
}
function login($user, $pass) {
global $db;
// Get the specified user's data
$q = $db->prepare("SELECT pass, id, user, level FROM accounts WHERE user = (:user)");
$q->bindParam(':user', $user);
$q->execute();
$r = $q->fetch();
if (password_verify($pass, $r['pass']))
createSession($r['id'], $r['user'], $r['level']);
else
redirect('/login/index.html#fail');
}
function delete($fileid) {
global $db;
checkSession(3);
if (empty($fileid)) {
echo 'Invalid File.';
exit();
}
// Get owner + filename
$q = $db->prepare("SELECT filename, user FROM files WHERE id = (:id)");
$q->bindParam(':id', $fileid);
$q->execute();
$r = $q->fetch();
// If they own it or are an admin
if ($_SESSION['level'] <= 1 || $r['user'] == $_SESSION['user']) {
// Remove it from the DB
$q = $db->prepare("DELETE FROM files WHERE id = (:id)");
$q->bindParam(':id', $fileid);
$q->execute();
// Delete the file
unlink(SHIM_FILES_ROOT.$r['filename']);
echo 'File deleted.';
}
}
function fetchFiles($method, $date, $count, $keyword) {
global $db;
checkSession(3);
include('./search.php');
if (empty($method)) {
include('./footer.php');
exit();
}
if ($method == 'Fetch') {
// Either fetch all files matching query, or only the user's files
if ($_SESSION['level'] == 0)
$q = $db->prepare('SELECT * FROM files WHERE (originalname LIKE (:keyword) AND date LIKE (:date)) OR (filename LIKE (:keyword) AND date LIKE (:date)) ORDER BY id DESC LIMIT :count');
else {
$q = $db->prepare('SELECT * FROM files WHERE user = (:user) AND ((originalname LIKE (:keyword) AND date LIKE (:date)) OR (filename LIKE (:keyword) AND date LIKE (:date))) ORDER BY id DESC LIMIT :count');
$q->bindValue(':user', $_SESSION['user']);
}
$q->bindValue(':date', '%'.$date.'%');
$q->bindValue(':count', (int)$count, PDO::PARAM_INT);
$q->bindValue(':keyword', '%'.$keyword.'%');
$q->execute();
} else if ($method == 'Fetch All') {
// Either fetch all files or only the user's files
if ($_SESSION['level'] == 0)
$q = $db->prepare('SELECT * FROM files ORDER BY id DESC LIMIT :count');
else {
$q = $db->prepare('SELECT * FROM files WHERE user = (:user) ORDER BY id DESC LIMIT :count');
$q->bindValue(':user', $_SESSION['user']);
}
$q->bindValue(':count', (int)$count, PDO::PARAM_INT);
$q->execute();
}
while ($r = $q->fetch()) {
$id = $r['id'];
$oname = strip_tags($r['originalname']);
$fname = $r['filename'];
$bytes = $r['size'].' B';
$temp = $r['size'] / 1000;
$kilobytes = $temp.' KB';
$uploadDate = $r['date'];
$uploader = $r['user'];
echo '
'.$q->rowCount().' files found.
'; echo ''; include('./footer.php'); } function report($file, $reason) { global $db; if (isset($_SESSION['id'])) { if ($_SESSION['level'] < '4') { if (empty($file)) { include('./report.php'); } else { $q = $db->prepare("SELECT id, hash FROM files WHERE filename = :file"); $q->bindValue(':file', strip_tags($file)); $q->execute(); $result = $q->fetch(); if ($q->rowCount() != '0') { $q = $db->prepare("INSERT INTO reports (hash, date, file, fileid, reporter, reason) VALUES (:hash, :date, :file, :fileid, :reporter, :reason)"); $q->bindValue(':file', strip_tags($file)); $q->bindValue(':date', date('Y-m-d')); $q->bindValue(':reporter', $_SESSION['user']); $q->bindValue(':fileid', $result['id']); $q->bindValue(':hash', $result['hash']); $q->bindValue(':reason', $reason); $q->execute(); echo 'Thank you, report has been sent. The file will be reviewed.'; } else echo 'File does not exist.'; } } else echo 'Insufficient Access Level.'; } else header('Location: ../login'); } function reports() { global $db; checkSession(1); include('./reports.php'); // Populate the table $q = $db->prepare("SELECT * FROM reports WHERE status = '0'"); $q->execute(); while ($r = $q->fetch()) { $id = $r['id']; $fileid = $r['fileid']; $filename = strip_tags($r['file']); $reporter = $r['reporter']; $status = $r['status']; $reason = strip_tags($r['reason']); echo '