2023-01-22 09:47:36 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
use WillySoft\Http\Route;
|
|
|
|
|
|
|
|
abstract class WillyChat {
|
|
|
|
public static string $data_path;
|
|
|
|
public static array $messages;
|
|
|
|
}
|
|
|
|
|
|
|
|
Route::middleware(function() {
|
|
|
|
WillyChat::$data_path = '/dev/shm/database.json';
|
|
|
|
|
|
|
|
if (!file_exists(WillyChat::$data_path)) {
|
|
|
|
file_put_contents(
|
|
|
|
WillyChat::$data_path,
|
|
|
|
json_encode([])
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
WillyChat::$messages = json_decode(
|
|
|
|
file_get_contents(WillyChat::$data_path),
|
|
|
|
true
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
Route::match('get|post','/willychat/', function() {
|
|
|
|
$default_nick = 'Willy';
|
|
|
|
$nick = $default_nick;
|
|
|
|
$just_sent_message = false;
|
|
|
|
|
|
|
|
if (!empty($_POST)) {
|
|
|
|
$nick = filter_input(INPUT_POST, 'nick');
|
|
|
|
$text = filter_input(INPUT_POST, 'text');
|
|
|
|
|
|
|
|
if (empty(trim($nick, ' '))) {
|
|
|
|
$nick = $default_nick;
|
|
|
|
}
|
|
|
|
|
2023-01-22 12:17:50 +00:00
|
|
|
if (strlen($nick) > 128) {
|
|
|
|
view('pages/willychat/error', [
|
2023-01-22 12:27:20 +00:00
|
|
|
'error' => 'Your nickname is too long.'
|
2023-01-22 12:17:50 +00:00
|
|
|
]);
|
|
|
|
die();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (strlen($text) > 4096) {
|
|
|
|
view('pages/willychat/error', [
|
2023-01-22 12:27:20 +00:00
|
|
|
'error' => 'Do not send EXTREMELY long messages.'
|
2023-01-22 12:17:50 +00:00
|
|
|
]);
|
|
|
|
die();
|
|
|
|
}
|
|
|
|
|
2023-01-22 09:47:36 +00:00
|
|
|
if (count(WillyChat::$messages) > 10) {
|
|
|
|
array_pop(WillyChat::$messages);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!empty(trim($text, ' '))) {
|
|
|
|
|
|
|
|
array_unshift(WillyChat::$messages, [
|
|
|
|
'nick' => $nick,
|
|
|
|
'date' => time(),
|
|
|
|
'text' => $text
|
|
|
|
]);
|
|
|
|
|
|
|
|
file_put_contents(WillyChat::$data_path,
|
|
|
|
json_encode(
|
|
|
|
WillyChat::$messages
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
$just_sent_message = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
view('pages/willychat/index', [
|
|
|
|
'nick' => $nick,
|
2023-01-22 12:17:50 +00:00
|
|
|
'just_sent_message' => $just_sent_message,
|
2023-01-22 09:47:36 +00:00
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
Route::get('/willychat/messages', function() {
|
|
|
|
view('pages/willychat/messages', [
|
|
|
|
'messages' => WillyChat::$messages
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
|
|
|
|
Route::get('/willychat/sync', function() {
|
|
|
|
json_response(
|
|
|
|
hash('crc32', serialize(WillyChat::$messages))
|
|
|
|
);
|
|
|
|
});
|