Implementing Sanity checks into the website

This commit is contained in:
Michał 2022-09-28 14:36:45 +00:00
parent 0e23bfffb6
commit b5a5ca6468
5 changed files with 331 additions and 206 deletions

View file

@ -1,24 +1,24 @@
<?php require_once __DIR__."/app/required.php"; ?>
<!DOCTYPE html>
<html>
<head>
<?php require_once __DIR__."/assets/ui/header.php"; ?>
</head>
<body>
<?php
require_once __DIR__."/assets/ui/nav.php";
<?php
require_once __DIR__."/app/required.php";
use App\Account;
use App\Diff;
use App\Sanity;
$user_info = new Account();
$diff = new Diff();
$sanity = new Sanity();
$profile_info = $user_info->get_user_info($conn, $_SESSION['id']);
?>
?>
<!DOCTYPE html>
<html>
<head>
<?php require_once __DIR__."/assets/ui/header.php"; ?>
</head>
<body>
<?php require_once __DIR__."/assets/ui/nav.php"; ?>
<?php
if ($user_info->is_loggedin()) {
@ -82,10 +82,10 @@
<div class="warningDecoration defaultSpacing defaultFonts">
<h2>Account</h2>
<a class='btn btn-bad' href='password-reset.php'><img class='svg' src='assets/icons/password.svg'>Reset Password</a>
<button class="btn btn-bad" onclick="deleteAccount()"><img class='svg' src='assets/icons/trash.svg'>Delete account</button>
<button class="btn btn-bad" onclick="deleteAccount()"><img class='svg' src='assets/icons/trash.svg'>Forget me forever</button>
<br>
<p>Don't leave! I'm with the science team!</p>
<a class='btn btn-bad' href='app/account/logout.php'><img class='svg' src='assets/icons/sign-out.svg'>Logout</a>
<a class='btn btn-bad' href='app/account/logout.php'><img class='svg' src='assets/icons/sign-out.svg'>Forget Me</a>
</div>
<script>
function deleteAccount() {
@ -379,6 +379,25 @@
}
</script>
</div>
<div class="warningDecoration defaultSpacing defaultFonts">
<h2>Sanity check</h2>
<?php
$check_sanity = $sanity->get_results();
if (empty($check_sanity) || !isset($check_sanity)) {
echo "<p class='btn btn-good' style='outline: none;'>No errors! Lookin' good</p>";
} else {
foreach ($check_sanity as $result) {
if (str_contains($result, "Critical")) {
echo "<p class='btn btn-bad' style='outline: none; cursor: default;'>".$result."</p>";
} elseif (str_contains($result, "Warning")) {
echo "<p class='btn btn-warning' style='outline: none; cursor: default;'>".$result."</p>";
}
}
}
?>
</div>
<?php
}
} else {

View file

@ -266,3 +266,92 @@ class Diff {
return $string ? implode(', ', $string) . ' ago' : 'just now';
}
}
class Sanity {
function check_json() {
$results = array();
if (!is_file(__DIR__."/settings/manifest.json")) {
$results[] = "Critical: manifest.json is missing";
} else {
$manifest = json_decode(file_get_contents(__DIR__."/settings/manifest.json"), true);
if (!isset($manifest['user_name']) || empty($manifest['user_name']) || $manifest['user_name'] == "[your name]") {
$results[] = "Warning: manifest.json is missing yor name";
}
if ($manifest['upload']['rename_on_upload'] == true ) {
if (!isset($manifest['upload']['rename_to']) || empty($manifest['upload']['rename_to'])) {
$results[] = "Critical: manifest.json is missing what you're renaming your files to";
} else {
$rename_to = $manifest['upload']['rename_to'];
$rename_rate = 0;
if (str_contains($rename_to, '{{autoinc}}')) $rename_rate = 5;
if (str_contains($rename_to, '{{time}}')) $rename_rate = 5;
if (str_contains($rename_to, '{{date}}')) $rename_rate += 2;
if (str_contains($rename_to, '{{filename}}')) $rename_rate += 2;
if (str_contains($rename_to, '{{username}}') || str_contains($rename_to, '{{userid}}')) $rename_rate += 1;
if ($rename_rate == 0 || $rename_rate < 2) {
$results[] = "Critical: You will encounter errors when uploading images due to filenames, update your manifest.json";
} elseif ($rename_rate < 5 && $rename_rate > 2) {
$results[] = "Warning: You may encounter errors when uploading images due to filenames, concider update your manifest.json";
}
}
}
if ($manifest['is_testing']) {
$results[] = "Warning: You are currently in testing mode, errors will be displayed to the user";
}
}
return $results;
}
function check_files() {
$results = array();
if (!is_dir("images")) {
$results[] = "Critical: You need to setup an images folder, follow the guide on the GitHub repo";
}
if (!is_dir("images/pfp")) {
$results[] = "Critical: You need to setup an pfp folder, follow the guide on the GitHub repo";
}
if (!is_dir("images/previews")) {
$results[] = "Critical: You need to setup an previews folder, follow the guide on the GitHub repo";
}
if (!is_dir("images/thumbnails")) {
$results[] = "Critical: You need to setup an thumbnails folder, follow the guide on the GitHub repo";
}
return $results;
}
function check_version() {
$results = array();
if (PHP_VERSION_ID < 50102) {
$results[] = "Critical: Your current version of PHP is ".PHP_VERSION.". The reccomended version is 8.1.2";
}
return $results;
}
function get_results() {
$results = array();
foreach ($this->check_json() as $result) {
$results[] = $result;
}
foreach ($this->check_files() as $result) {
$results[] = $result;
}
foreach ($this->check_version() as $result) {
$results[] = $result;
}
return $results;
}
}

View file

@ -48,7 +48,7 @@ if (isset($_POST['submit_delete'])) {
unlink(dirname(__DIR__)."/images/previews/".$image_array['imagename']);
}
// TP user to the homepage with a success message
mysqli_query($conn,"INSERT INTO logs (ipaddress, action) VALUES('$user_ip','Deleted image ".$_POST['id']."')");
mysqli_query($conn, "INSERT INTO logs (ipaddress, action) VALUES('$user_ip','Deleted image " . $_POST['id'] . "')");
$_SESSION['del'] = $_POST['id'];
?>
<script>

View file

@ -24,7 +24,7 @@
"Eat hotchip and lie"
],
"license":"GPL 3.0",
"version": "22.09.26",
"version": "22.09.28",
"user_name": "[your name]",
"is_testing": true,
"upload": {

View file

@ -1,12 +1,18 @@
<?php require_once __DIR__."/app/required.php"; ?>
<?php
require_once __DIR__."/app/required.php";
use App\Account;
use App\Sanity;
$user_info = new Account();
$sanity = new Sanity();
?>
<!DOCTYPE html>
<html>
<head>
<head>
<?php require_once __DIR__."/assets/ui/header.php"; ?>
</head>
</head>
<body>
<?php
require_once __DIR__."/assets/ui/nav.php";
@ -26,6 +32,17 @@
</script>
<?php
unset($_SESSION['welc']);
if ($user_info->is_admin($conn, $_SESSION['id'])) {
$check_sanity = $sanity->get_results();
if (!empty($check_sanity) || isset($check_sanity)) {
?>
<script>
sniffleAdd('Uh oh', 'Website has not passed some Sanity checks, please check your settings for more information', 'var(--warning)', 'assets/icons/warning.svg');
</script>
<?php
}
}
}
?>