From 708eb9be6f680a033b79d630a25504c05ae593d6 Mon Sep 17 00:00:00 2001 From: Floorb <132411956+Neetpone@users.noreply.github.com> Date: Fri, 12 May 2023 02:06:31 -0400 Subject: [PATCH] fix: some admin pages implementation --- includes/Models/AdminLog.php | 7 ++ includes/functions.php | 19 +++ package.json | 3 +- phpcs.xml | 21 ++++ psalm.xml | 16 +++ {admin => public/admin}/admin.php | 7 -- {admin => public/admin}/common.php | 2 +- {admin => public/admin}/configuration.php | 24 +--- .../admin}/css/bootstrap-checkbox.min.css | 0 .../admin}/css/bootstrap-select.min.css | 0 {admin => public/admin}/css/bootstrap.css | 0 {admin => public/admin}/css/bootstrap.min.css | 0 .../admin}/css/datatables.min.css | 0 .../admin}/css/font-awesome.min.css | 0 .../admin}/css/fonts/FontAwesome.otf | Bin .../admin}/css/fonts/fontawesome-webfont.eot | Bin .../admin}/css/fonts/fontawesome-webfont.svg | 0 .../admin}/css/fonts/fontawesome-webfont.ttf | Bin .../admin}/css/fonts/fontawesome-webfont.woff | Bin .../css/fonts/fontawesome-webfont.woff2 | Bin {admin => public/admin}/css/index.php | 0 {admin => public/admin}/css/paste.css | 0 {admin => public/admin}/css/responsive.css | 0 {admin => public/admin}/css/style.css | 0 {admin => public/admin}/css/style.min.css | 0 {admin => public/admin}/dashboard.php | 109 ++++++------------ {admin => public/admin}/favicon.ico | Bin {admin => public/admin}/index.php | 4 +- {admin => public/admin}/ipbans.php | 7 -- {admin => public/admin}/menu.php | 3 - {admin => public/admin}/pastes.php | 16 --- {admin => public/admin}/reports.php | 35 ------ {admin => public/admin}/stats.php | 7 -- {admin => public/admin}/users.php | 87 +++----------- theme/bulma/report.php | 15 --- vendor/composer/InstalledVersions.php | 17 ++- vendor/composer/installed.php | 4 +- 37 files changed, 134 insertions(+), 269 deletions(-) create mode 100644 phpcs.xml create mode 100644 psalm.xml rename {admin => public/admin}/admin.php (93%) rename {admin => public/admin}/common.php (94%) rename {admin => public/admin}/configuration.php (96%) rename {admin => public/admin}/css/bootstrap-checkbox.min.css (100%) rename {admin => public/admin}/css/bootstrap-select.min.css (100%) rename {admin => public/admin}/css/bootstrap.css (100%) rename {admin => public/admin}/css/bootstrap.min.css (100%) rename {admin => public/admin}/css/datatables.min.css (100%) rename {admin => public/admin}/css/font-awesome.min.css (100%) rename {admin => public/admin}/css/fonts/FontAwesome.otf (100%) rename {admin => public/admin}/css/fonts/fontawesome-webfont.eot (100%) rename {admin => public/admin}/css/fonts/fontawesome-webfont.svg (100%) rename {admin => public/admin}/css/fonts/fontawesome-webfont.ttf (100%) rename {admin => public/admin}/css/fonts/fontawesome-webfont.woff (100%) rename {admin => public/admin}/css/fonts/fontawesome-webfont.woff2 (100%) rename {admin => public/admin}/css/index.php (100%) rename {admin => public/admin}/css/paste.css (100%) rename {admin => public/admin}/css/responsive.css (100%) rename {admin => public/admin}/css/style.css (100%) rename {admin => public/admin}/css/style.min.css (100%) rename {admin => public/admin}/dashboard.php (68%) rename {admin => public/admin}/favicon.ico (100%) rename {admin => public/admin}/index.php (93%) rename {admin => public/admin}/ipbans.php (96%) rename {admin => public/admin}/menu.php (91%) rename {admin => public/admin}/pastes.php (92%) rename {admin => public/admin}/reports.php (91%) rename {admin => public/admin}/stats.php (96%) rename {admin => public/admin}/users.php (64%) delete mode 100644 theme/bulma/report.php diff --git a/includes/Models/AdminLog.php b/includes/Models/AdminLog.php index f4dbee1..f50f797 100644 --- a/includes/Models/AdminLog.php +++ b/includes/Models/AdminLog.php @@ -7,6 +7,13 @@ class AdminLog extends Model { public const ACTION_LOGIN = 0; public const ACTION_FAIL_LOGIN = 1; public const ACTION_EDIT_CONFIG = 2; + + public const ACTION_NAMES = [ + 'Login', + 'Failed Login', + 'Edit Config' + ]; + protected $table = 'admin_logs'; protected $fillable = ['user_id', 'action', 'ip', 'time']; diff --git a/includes/functions.php b/includes/functions.php index f1d62b0..e00b8ef 100644 --- a/includes/functions.php +++ b/includes/functions.php @@ -309,4 +309,23 @@ function pp_filename_escape(string $filename, string $extension) : string { } return $filename . $extension; +} + +function pp_setup_pagination() : array { + $per_page = 20; + $current_page = 0; + + if (!empty($_GET['page'])) { + $current_page = max(0, intval($_GET['page'])); + } + + if (!empty($_GET['per_page'])) { + $per_page = max(1, min(100, intval($_GET['per_page']))); + } + + return [$per_page, $current_page]; +} + +function pp_output_paginator(int $per_page, int $current_page) : void { + } \ No newline at end of file diff --git a/package.json b/package.json index 9970dc1..70a9356 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "license": "MIT", "dependencies": { "@rollup/plugin-commonjs": "^24.0.1", - "@rollup/plugin-node-resolve": "^15.0.1", - "zxcvbn": "^4.4.2" + "@rollup/plugin-node-resolve": "^15.0.1" } } diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 0000000..3947f27 --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,21 @@ + + My custom coding standard. + + + + + + + + + + + + + + + + + + + diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 0000000..008f2d8 --- /dev/null +++ b/psalm.xml @@ -0,0 +1,16 @@ + + + + + + + + + diff --git a/admin/admin.php b/public/admin/admin.php similarity index 93% rename from admin/admin.php rename to public/admin/admin.php index 9df48c6..b01f60b 100644 --- a/admin/admin.php +++ b/public/admin/admin.php @@ -127,13 +127,6 @@ $admin_logs = AdminLog::with('user') diff --git a/admin/common.php b/public/admin/common.php similarity index 94% rename from admin/common.php rename to public/admin/common.php index 11c12ef..25ca205 100644 --- a/admin/common.php +++ b/public/admin/common.php @@ -3,7 +3,7 @@ if (!defined('IN_PONEPASTE')) { die('This file may not be accessed directly.'); } -require_once('../includes/common.php'); +require_once('../../includes/common.php'); use PonePaste\Models\AdminLog; use PonePaste\Models\User; diff --git a/admin/configuration.php b/public/admin/configuration.php similarity index 96% rename from admin/configuration.php rename to public/admin/configuration.php index 2b0d8e0..df049c3 100644 --- a/admin/configuration.php +++ b/public/admin/configuration.php @@ -5,7 +5,7 @@ use PonePaste\Models\AdminLog; define('IN_PONEPASTE', 1); require_once('common.php'); -const CONFIG_FILE_PATH = '../config/site.php'; +const CONFIG_FILE_PATH = '../../config/site.php'; function updateConfiguration(string $path, array $new_config) : void { $fp = fopen($path, 'w'); @@ -366,32 +366,10 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { - diff --git a/admin/css/bootstrap-checkbox.min.css b/public/admin/css/bootstrap-checkbox.min.css similarity index 100% rename from admin/css/bootstrap-checkbox.min.css rename to public/admin/css/bootstrap-checkbox.min.css diff --git a/admin/css/bootstrap-select.min.css b/public/admin/css/bootstrap-select.min.css similarity index 100% rename from admin/css/bootstrap-select.min.css rename to public/admin/css/bootstrap-select.min.css diff --git a/admin/css/bootstrap.css b/public/admin/css/bootstrap.css similarity index 100% rename from admin/css/bootstrap.css rename to public/admin/css/bootstrap.css diff --git a/admin/css/bootstrap.min.css b/public/admin/css/bootstrap.min.css similarity index 100% rename from admin/css/bootstrap.min.css rename to public/admin/css/bootstrap.min.css diff --git a/admin/css/datatables.min.css b/public/admin/css/datatables.min.css similarity index 100% rename from admin/css/datatables.min.css rename to public/admin/css/datatables.min.css diff --git a/admin/css/font-awesome.min.css b/public/admin/css/font-awesome.min.css similarity index 100% rename from admin/css/font-awesome.min.css rename to public/admin/css/font-awesome.min.css diff --git a/admin/css/fonts/FontAwesome.otf b/public/admin/css/fonts/FontAwesome.otf similarity index 100% rename from admin/css/fonts/FontAwesome.otf rename to public/admin/css/fonts/FontAwesome.otf diff --git a/admin/css/fonts/fontawesome-webfont.eot b/public/admin/css/fonts/fontawesome-webfont.eot similarity index 100% rename from admin/css/fonts/fontawesome-webfont.eot rename to public/admin/css/fonts/fontawesome-webfont.eot diff --git a/admin/css/fonts/fontawesome-webfont.svg b/public/admin/css/fonts/fontawesome-webfont.svg similarity index 100% rename from admin/css/fonts/fontawesome-webfont.svg rename to public/admin/css/fonts/fontawesome-webfont.svg diff --git a/admin/css/fonts/fontawesome-webfont.ttf b/public/admin/css/fonts/fontawesome-webfont.ttf similarity index 100% rename from admin/css/fonts/fontawesome-webfont.ttf rename to public/admin/css/fonts/fontawesome-webfont.ttf diff --git a/admin/css/fonts/fontawesome-webfont.woff b/public/admin/css/fonts/fontawesome-webfont.woff similarity index 100% rename from admin/css/fonts/fontawesome-webfont.woff rename to public/admin/css/fonts/fontawesome-webfont.woff diff --git a/admin/css/fonts/fontawesome-webfont.woff2 b/public/admin/css/fonts/fontawesome-webfont.woff2 similarity index 100% rename from admin/css/fonts/fontawesome-webfont.woff2 rename to public/admin/css/fonts/fontawesome-webfont.woff2 diff --git a/admin/css/index.php b/public/admin/css/index.php similarity index 100% rename from admin/css/index.php rename to public/admin/css/index.php diff --git a/admin/css/paste.css b/public/admin/css/paste.css similarity index 100% rename from admin/css/paste.css rename to public/admin/css/paste.css diff --git a/admin/css/responsive.css b/public/admin/css/responsive.css similarity index 100% rename from admin/css/responsive.css rename to public/admin/css/responsive.css diff --git a/admin/css/style.css b/public/admin/css/style.css similarity index 100% rename from admin/css/style.css rename to public/admin/css/style.css diff --git a/admin/css/style.min.css b/public/admin/css/style.min.css similarity index 100% rename from admin/css/style.min.css rename to public/admin/css/style.min.css diff --git a/admin/dashboard.php b/public/admin/dashboard.php similarity index 68% rename from admin/dashboard.php rename to public/admin/dashboard.php index d6f3301..f7bb2e8 100644 --- a/admin/dashboard.php +++ b/public/admin/dashboard.php @@ -1,6 +1,8 @@ query("SELECT @last_id := MAX(id) FROM page_view"); -$row = $query->fetch(PDO::FETCH_NUM); -$page_last_id = intval($row[0]); - - -$query = $conn->prepare('SELECT tpage, tvisit FROM page_view ORDER BY id DESC LIMIT 1'); -$query->execute(); -$row = $query->fetch(); $last_page_view = PageView::select('tpage', 'tvisit') ->orderBy('id', 'desc') ->first(); @@ -26,38 +20,32 @@ $admin_email = getSiteInfo()['site_info']['email']; $c_date = date('jS F Y'); /* Number of users today */ -$query = $conn->prepare('SELECT COUNT(*) FROM users WHERE `date` = ?'); -$query->execute([$c_date]); -$today_users_count = intval($query->fetch(PDO::FETCH_NUM)[0]); +$today_users_count = User::where(['created_at' => 'TODAY()'])->count(); /* Number of pastes today */ -$query = $conn->query('SELECT COUNT(*) FROM pastes where DATE(created_at) = DATE(NOW())'); -$today_pastes_count = intval($query->fetch(PDO::FETCH_NUM)[0]); +$today_pastes_count = Paste::where(['created_at' => 'TODAY()'])->count(); -for ($loop = 0; $loop <= 6; $loop++) { - $myid = $page_last_id - $loop; - $query = $conn->prepare("SELECT date, tpage, tvisit FROM page_view WHERE id = ?"); - $query->execute([$myid]); - while ($row = $query->fetch()) { - $sdate = $row['date']; - $sdate = str_replace(date('Y'), '', $sdate); - $sdate = str_replace('January', 'Jan', $sdate); - $sdate = str_replace('February', 'Feb', $sdate); - $sdate = str_replace('March', 'Mar', $sdate); - $sdate = str_replace('April', 'Apr', $sdate); - $sdate = str_replace('August', 'Aug', $sdate); - $sdate = str_replace('September', 'Sep', $sdate); - $sdate = str_replace('October', 'Oct', $sdate); - $sdate = str_replace('November', 'Nov', $sdate); - $sdate = str_replace('December', 'Dec', $sdate); +foreach (PageView::orderBy('id', 'desc')->take(7)->get() as $row) { + $sdate = $row['date']; + $sdate = str_replace(date('Y'), '', $sdate); + $sdate = str_replace('January', 'Jan', $sdate); + $sdate = str_replace('February', 'Feb', $sdate); + $sdate = str_replace('March', 'Mar', $sdate); + $sdate = str_replace('April', 'Apr', $sdate); + $sdate = str_replace('August', 'Aug', $sdate); + $sdate = str_replace('September', 'Sep', $sdate); + $sdate = str_replace('October', 'Oct', $sdate); + $sdate = str_replace('November', 'Nov', $sdate); + $sdate = str_replace('December', 'Dec', $sdate); - $ldate[$loop] = $sdate; - $tpage[$loop] = $row['tpage']; - $tvisit[$loop] = $row['tvisit']; - } + $ldate[] = $sdate; + $tpage[] = $row['tpage']; + $tvisit[] = $row['tvisit']; } +$admin_histories = AdminLog::with('user')->orderBy('id', 'desc')->take(10)->get(); + function getRecentadmin($count = 5) { return Paste::with('user') ->orderBy('id') @@ -147,7 +135,6 @@ function getRecentadmin($count = 5) { - @@ -230,36 +217,24 @@ function getRecentadmin($count = 5) {
-
ID Username Date IP
- - - - - + + + + - - - - - - - '; - } - ?> + + + + + + + +
IDLast Login DateIPIDLast Login DateUsernameDateActionIP Address
' . $r_id . '' . $r_paste . '' . $m_report . '' . $r_date . '' . $r_reason . '
user->username); ?>time); ?>action]); ?>ip); ?>
@@ -267,30 +242,12 @@ function getRecentadmin($count = 5) { - -
-
-
-
-

-
You have the latest version - -

-
-
diff --git a/admin/favicon.ico b/public/admin/favicon.ico similarity index 100% rename from admin/favicon.ico rename to public/admin/favicon.ico diff --git a/admin/index.php b/public/admin/index.php similarity index 93% rename from admin/index.php rename to public/admin/index.php index 426f726..c16c631 100644 --- a/admin/index.php +++ b/public/admin/index.php @@ -1,6 +1,6 @@ admin) { } if ($_SERVER['REQUEST_METHOD'] == 'POST') { - if (password_verify($_POST['password'], $current_user->admin_password_hash)) { + if (pp_password_verify($_POST['password'], $current_user->admin_password_hash)) { updateAdminHistory($current_user, AdminLog::ACTION_LOGIN); $_SESSION['admin_login'] = true; header("Location: dashboard.php"); diff --git a/admin/ipbans.php b/public/admin/ipbans.php similarity index 96% rename from admin/ipbans.php rename to public/admin/ipbans.php index df4e8d6..6399d5f 100644 --- a/admin/ipbans.php +++ b/public/admin/ipbans.php @@ -263,13 +263,6 @@ if (isset($_GET['delete'])) { diff --git a/admin/menu.php b/public/admin/menu.php similarity index 91% rename from admin/menu.php rename to public/admin/menu.php index 300a689..9c3771f 100644 --- a/admin/menu.php +++ b/public/admin/menu.php @@ -25,9 +25,6 @@
  • Statistics
  • -
  • - Ads -
  • Sitemap
  • diff --git a/admin/pastes.php b/public/admin/pastes.php similarity index 92% rename from admin/pastes.php rename to public/admin/pastes.php index fbf464b..b0f1804 100644 --- a/admin/pastes.php +++ b/public/admin/pastes.php @@ -209,27 +209,11 @@ require_once('common.php'); - \ No newline at end of file diff --git a/admin/reports.php b/public/admin/reports.php similarity index 91% rename from admin/reports.php rename to public/admin/reports.php index 54e6718..c08a076 100644 --- a/admin/reports.php +++ b/public/admin/reports.php @@ -18,41 +18,6 @@ if (isset($_GET['logout'])) { $date = date('jS F Y'); $ip = $_SERVER['REMOTE_ADDR']; require_once('../includes/config.php'); -$con = mysqli_connect($dbhost, $dbuser, $dbpassword, $dbname); - -if (mysqli_connect_errno()) { - $sql_error = mysqli_connect_error(); - die("Unable connect to database"); -} - -$query = "SELECT @last_id := MAX(id) FROM admin_history"; - -$result = mysqli_query($con, $query); - -while ($row = mysqli_fetch_array($result)) { - $last_id = $row['@last_id := MAX(id)']; -} - -$query = "SELECT * FROM admin_history WHERE id=" . Trim($last_id); -$result = mysqli_query($con, $query); - -while ($row = mysqli_fetch_array($result)) { - $last_date = $row['last_date']; - $last_ip = $row['ip']; -} - -if ($last_ip == $ip) { - if ($last_date == $date) { - - } else { - $query = "INSERT INTO admin_history (last_date,ip) VALUES ('$date','$ip')"; - mysqli_query($con, $query); - } -} else { - $query = "INSERT INTO admin_history (last_date,ip) VALUES ('$date','$ip')"; - mysqli_query($con, $query); -} - ?> diff --git a/admin/stats.php b/public/admin/stats.php similarity index 96% rename from admin/stats.php rename to public/admin/stats.php index b24beb1..860aaa2 100644 --- a/admin/stats.php +++ b/public/admin/stats.php @@ -311,13 +311,6 @@ if ($last_ip == $ip) { diff --git a/admin/users.php b/public/admin/users.php similarity index 64% rename from admin/users.php rename to public/admin/users.php index 885c0b2..055fb33 100644 --- a/admin/users.php +++ b/public/admin/users.php @@ -1,6 +1,16 @@ offset($current_page * $per_page)->get(); + ?> @@ -41,54 +51,6 @@ require_once(__DIR__ . '/common.php');
    - - - - ' . mysqli_error($con) . ' -
    '; - } else { - $msg = '
    - User deleted -
    '; - } - } - - if (isset($_GET['ban'])) { - $ban_id = htmlentities(Trim($_GET['ban'])); - $query = "UPDATE users SET verified='2' WHERE id='$ban_id'"; - $result = mysqli_query($con, $query); - if (mysqli_errno($con)) { - $msg = '
    - ' . mysqli_error($con) . ' -
    '; - } else { - $msg = '
    - User banned -
    '; - } - } - - if (isset($_GET['unban'])) { - $ban_id = htmlentities(Trim($_GET['unban'])); - $query = "UPDATE users SET verified='1' WHERE id='$ban_id'"; - $result = mysqli_query($con, $query); - if (mysqli_errno($con)) { - $msg = '
    - ' . mysqli_error($con) . ' -
    '; - } else { - $msg = '
    - User unbanned -
    '; - } - } - ?>
    @@ -149,7 +111,6 @@ require_once(__DIR__ . '/common.php'); id="usersTable"> - ID Username Date Registered Ban User @@ -158,9 +119,17 @@ require_once(__DIR__ . '/common.php'); - + + + + username); ?> + + created_at); ?> + + +
    @@ -172,28 +141,10 @@ require_once(__DIR__ . '/common.php'); - - \ No newline at end of file diff --git a/theme/bulma/report.php b/theme/bulma/report.php deleted file mode 100644 index 1bcfd36..0000000 --- a/theme/bulma/report.php +++ /dev/null @@ -1,15 +0,0 @@ -
    -
    -
    -
    -
    -

    Paste Reported -

    -

    - New Paste
    - Archive
    - Discover -

    -
    -
    -
    \ No newline at end of file diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index c6b54af..51e734a 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -98,7 +98,7 @@ class InstalledVersions { foreach (self::getInstalled() as $installed) { if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || empty($installed['versions'][$packageName]['dev_requirement']); + return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; } } @@ -119,7 +119,7 @@ class InstalledVersions */ public static function satisfies(VersionParser $parser, $packageName, $constraint) { - $constraint = $parser->parseConstraints($constraint); + $constraint = $parser->parseConstraints((string) $constraint); $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); return $provided->matches($constraint); @@ -328,7 +328,9 @@ class InstalledVersions if (isset(self::$installedByVendor[$vendorDir])) { $installed[] = self::$installedByVendor[$vendorDir]; } elseif (is_file($vendorDir.'/composer/installed.php')) { - $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require $vendorDir.'/composer/installed.php'; + $installed[] = self::$installedByVendor[$vendorDir] = $required; if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { self::$installed = $installed[count($installed) - 1]; } @@ -340,12 +342,17 @@ class InstalledVersions // only require the installed.php file if this file is loaded from its dumped location, // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = require __DIR__ . '/installed.php'; + /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ + $required = require __DIR__ . '/installed.php'; + self::$installed = $required; } else { self::$installed = array(); } } - $installed[] = self::$installed; + + if (self::$installed !== array()) { + $installed[] = self::$installed; + } return $installed; } diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index e50ac13..6fa9b48 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'aftercase/ponepaste', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '7be5984b3eea1200a34b91ba7330a415e3a61ff5', + 'reference' => '9bd921ee714769fcddbcbbd0d7c49a64336794f9', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ 'aftercase/ponepaste' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '7be5984b3eea1200a34b91ba7330a415e3a61ff5', + 'reference' => '9bd921ee714769fcddbcbbd0d7c49a64336794f9', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(),