feat: add wrapper function to log page access and exit

This commit is contained in:
David Bailey 2023-12-23 10:52:29 +01:00
parent 70a2c45509
commit b089bfc551
2 changed files with 44 additions and 34 deletions

View file

@ -5,18 +5,9 @@ $data_time_start = microtime(true);
require_once 'vendor/autoload.php';
require_once 'post_adapter.php';
// $sql = mysqli_connect('mysql', 'root', 'example', 'dragon_fire');
$adapter = new PostHandler();
//if (!$sql)
// {
// echo 'Connection failed<br>';
// echo 'Error number: ' . mysqli_connect_errno() . '<br>';
// echo 'Error message: ' . mysqli_connect_error() . '<br>';
// die();
// }
$loader = new \Twig\Loader\FilesystemLoader(['./templates', './user_content']);
$twig = new \Twig\Environment($loader,['debug' => true]);
@ -26,6 +17,42 @@ use Twig\Extra\Markdown\DefaultMarkdown;
use Twig\Extra\Markdown\MarkdownRuntime;
use Twig\RuntimeLoader\RuntimeLoaderInterface;
function deduce_user_agent() {
$real_agent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(Googlebot|\w*Google\w*)/', $real_agent, $match)) {
return "bot/google/" . $match[1];
}
elseif(preg_match('/(Mozilla|Chrome|Chromium)/', $real_agent, $match)) {
return "user/" . $match[1];
}
else {
return "unidentified";
}
}
function log_and_die($path, $die_code = 0, $referrer = null) {
global $data_time_start;
global $adapter;
$data_time_end = microtime(true);
if(!isset($referrer)) {
$referrer = 'magic';
if(isset($_SERVER['HTTP_REFERER'])) {
$referrer = parse_url($_SERVER['HTTP_REFERER'], PHP_URL_HOST);
}
}
$adapter->log_post_access($path,
deduce_user_agent(),
$referrer,
$data_time_end - $data_time_start);
die($die_code);
}
$twig->addRuntimeLoader(new class implements RuntimeLoaderInterface {
public function load($class) {
if (MarkdownRuntime::class === $class) {
@ -34,22 +61,6 @@ $twig->addRuntimeLoader(new class implements RuntimeLoaderInterface {
}
});
function deduce_user_agent() {
$real_agent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/(?:Mozilla|Chrome|Chromium)/', $real_agent)) {
return "web";
}
elseif(preg_match('/(?:google)/', $real_agent)) {
return "bot/google";
}
else {
return "unidentified";
}
}
$user_agent = deduce_user_agent();
function generate_website($SURI) {
global $twig;
global $adapter;
@ -72,7 +83,7 @@ function generate_website($SURI) {
"authorized" => false
]);
die();
log_and_die('/api/401');
}
if($SURI = '/api/admin/upload') {
@ -84,6 +95,9 @@ function generate_website($SURI) {
if($SURI == '/api/post_counters') {
header('Content-Type: application/json');
echo json_encode($adapter->get_post_access_counters());
} elseif($SURI == '/api/metrics') {
header('Content-Type: application/line');
echo $adapter->get_post_access_counters_line();
} elseif(preg_match('/^\/api\/posts(.*)$/', $SURI, $match)) {
header('Content-Type: application/json');
@ -112,14 +126,14 @@ function generate_website($SURI) {
"post" => $post
]);
die();
log_and_die('/404', referrer: ($_SERVER['HTTP_REFERER'] ?? 'magic'));
}
if($post['post_metadata']['type'] == 'directory') {
if(preg_match('/^(.*[^\/])((?:#.*)?)$/', $SURI, $match)) {
header('Location: ' . $match[1] . '/' . $match[2]);
return;
die();
}
echo $twig->render('post_types/directory.html', [
@ -150,10 +164,6 @@ function generate_website($SURI) {
generate_website($_SERVER['REQUEST_URI']);
$data_time_end = microtime(true);
$adapter->log_post_access($_SERVER['REQUEST_URI'],
$user_agent,
$data_time_end - $data_time_start)
log_and_die($_SERVER['REQUEST_URI']);
?>

View file

@ -15,7 +15,7 @@
{%endblock%}
<span id="content_footer">
This article was created on {{ post.post_create_time }}, last edited {{ post.post_update_time }}, and was viewed {{ post.post_access_counter }} times~
This article was created on {{ post.post_create_time }}, last edited {{ post.post_update_time }}, and was viewed {{ post.post_access_count }} times~
</span>
</article>