mirror of
https://github.com/slawkens/myaac.git
synced 2025-10-14 01:34:55 +02:00
CSRF Protection (#235)
* Fix alert class name * feature: csrf protection * Cosmetics * Fix token generate * Admin Panel: changelogs csrf protection * news/id route * Refactor admin newses + add csrf * Use admin.links instead * Admin panel: Pages csrf * Menus: better csrf + add success message on reset colors * Plugins csrf * Move definitions * add info function, same as note($message) * Update mailer.php * Fix new page/news links * clear_cache & maintenance csrf * Formatting * Fix news type * Fix changelog link * Add new changelog link * More info to confirm dialog * This is always true
This commit is contained in:
@@ -13,6 +13,9 @@ use MyAAC\Models\Player;
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$title = 'Account editor';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
$admin_base = ADMIN_URL . '?p=accounts';
|
||||
$use_datatable = true;
|
||||
|
||||
@@ -82,7 +85,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
$account = new OTS_Account();
|
||||
$account->load($id);
|
||||
|
||||
if (isset($account, $_POST['save']) && $account->isLoaded()) {
|
||||
if (isset($_POST['save']) && $account->isLoaded()) {
|
||||
$error = false;
|
||||
|
||||
$_error = '';
|
||||
@@ -289,6 +292,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
<div class="tab-content" id="accounts-tabContent">
|
||||
<div class="tab-pane fade active show" id="accounts-acc">
|
||||
<form action="<?php echo $admin_base . ((isset($id) && $id > 0) ? '&id=' . $id : ''); ?>" method="post">
|
||||
<?php csrf(); ?>
|
||||
<div class="form-group row">
|
||||
<?php if (USE_ACCOUNT_NAME): ?>
|
||||
<div class="col-12 col-sm-12 col-lg-4">
|
||||
@@ -581,6 +585,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
<div class="row">
|
||||
<div class="col-6 col-lg-12">
|
||||
<form action="<?php echo $admin_base; ?>" method="post">
|
||||
<?php csrf(); ?>
|
||||
<label for="search">Account Name:</label>
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" class="form-control" id="search" name="search" value="<?= escapeHtml($search_account); ?>" maxlength="32" size="32">
|
||||
@@ -590,6 +595,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
</div>
|
||||
<div class="col-6 col-lg-12">
|
||||
<form action="<?php echo $admin_base; ?>" method="post">
|
||||
<?php csrf(); ?>
|
||||
<label for="id">Account ID:</label>
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" class="form-control" id="id" name="id" value="<?= $id; ?>" maxlength="32" size="32">
|
||||
|
@@ -13,30 +13,29 @@ use MyAAC\Models\Changelog as ModelsChangelog;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$title = 'Changelog';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||
echo 'Access denied.';
|
||||
return;
|
||||
}
|
||||
|
||||
$title = 'Changelog';
|
||||
$use_datatable = true;
|
||||
const CL_LIMIT = 600; // maximum changelog body length
|
||||
?>
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="<?php echo BASE_URL; ?>tools/css/jquery.datetimepicker.css"/ >
|
||||
<script src="<?php echo BASE_URL; ?>tools/js/jquery.datetimepicker.js"></script>
|
||||
<?php
|
||||
$id = $_GET['id'] ?? 0;
|
||||
require_once LIBS . 'changelog.php';
|
||||
|
||||
if(!empty($action))
|
||||
{
|
||||
$id = $_REQUEST['id'] ?? null;
|
||||
$body = isset($_REQUEST['body']) ? stripslashes($_REQUEST['body']) : null;
|
||||
$create_date = isset($_REQUEST['createdate']) ? (int)strtotime($_REQUEST['createdate'] ): null;
|
||||
$player_id = isset($_REQUEST['player_id']) ? (int)$_REQUEST['player_id'] : null;
|
||||
$type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : null;
|
||||
$where = isset($_REQUEST['where']) ? (int)$_REQUEST['where'] : null;
|
||||
$id = $_POST['id'] ?? null;
|
||||
$body = isset($_POST['body']) ? stripslashes($_POST['body']) : null;
|
||||
$create_date = isset($_POST['createdate']) ? (int)strtotime($_POST['createdate'] ): null;
|
||||
$player_id = isset($_POST['player_id']) ? (int)$_POST['player_id'] : null;
|
||||
$type = isset($_POST['type']) ? (int)$_POST['type'] : null;
|
||||
$where = isset($_POST['where']) ? (int)$_POST['where'] : null;
|
||||
|
||||
$errors = array();
|
||||
|
||||
@@ -46,12 +45,13 @@ if(!empty($action))
|
||||
$body = '';
|
||||
$type = $where = $player_id = $create_date = 0;
|
||||
|
||||
success("Added successful.");
|
||||
success('Added successful.');
|
||||
}
|
||||
}
|
||||
else if($action == 'delete') {
|
||||
Changelog::delete($id, $errors);
|
||||
success("Deleted successful.");
|
||||
if (Changelog::delete($id, $errors)) {
|
||||
success('Deleted successful.');
|
||||
}
|
||||
}
|
||||
else if($action == 'edit')
|
||||
{
|
||||
@@ -68,13 +68,14 @@ if(!empty($action))
|
||||
$action = $body = '';
|
||||
$type = $where = $player_id = $create_date = 0;
|
||||
|
||||
success("Updated successful.");
|
||||
success('Updated successful.');
|
||||
}
|
||||
}
|
||||
}
|
||||
else if($action == 'hide') {
|
||||
Changelog::toggleHidden($id, $errors, $status);
|
||||
success(($status == 1 ? 'Show' : 'Hide') . " successful.");
|
||||
if (Changelog::toggleHidden($id, $errors, $status)) {
|
||||
success(($status == 1 ? 'Hide' : 'Show') . ' successful.');
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($errors))
|
||||
@@ -113,7 +114,7 @@ if($action == 'edit' || $action == 'new') {
|
||||
$account_players->orderBy('group_id', POT::ORDER_DESC);
|
||||
$twig->display('admin.changelog.form.html.twig', array(
|
||||
'action' => $action,
|
||||
'cl_link_form' => constant('ADMIN_URL').'?p=changelog&action=' . ($action == 'edit' ? 'edit' : 'new'),
|
||||
'cl_link_form' => constant('ADMIN_URL').'?p=changelog',
|
||||
'cl_id' => $id ?? null,
|
||||
'body' => isset($body) ? escapeHtml($body) : '',
|
||||
'create_date' => $create_date ?? '',
|
||||
@@ -128,15 +129,3 @@ if($action == 'edit' || $action == 'new') {
|
||||
$twig->display('admin.changelog.html.twig', array(
|
||||
'changelogs' => $changelogs,
|
||||
));
|
||||
|
||||
?>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
$('#createdate').datetimepicker({format: "M d Y, H:i:s",});
|
||||
|
||||
$('.tb_datatable').DataTable({
|
||||
"order": [[0, "desc"]],
|
||||
"columnDefs": [{targets: [1, 2,4,5],orderable: false}]
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
@@ -10,7 +10,9 @@
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Dashboard';
|
||||
|
||||
if (isset($_GET['clear_cache'])) {
|
||||
csrfProtect();
|
||||
|
||||
if (isset($_POST['clear_cache'])) {
|
||||
if (clearCache()) {
|
||||
success('Cache cleared.');
|
||||
} else {
|
||||
@@ -18,7 +20,7 @@ if (isset($_GET['clear_cache'])) {
|
||||
}
|
||||
}
|
||||
|
||||
if (isset($_GET['maintenance'])) {
|
||||
if (isset($_POST['maintenance'])) {
|
||||
$message = (!empty($_POST['message']) ? $_POST['message'] : null);
|
||||
$_status = (isset($_POST['status']) && $_POST['status'] == 'true');
|
||||
$_status = ($_status ? '0' : '1');
|
||||
|
@@ -10,6 +10,8 @@
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Login';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
require PAGES . 'account/login.php';
|
||||
if ($logged) {
|
||||
header('Location: ' . (admin() ? ADMIN_URL : BASE_URL));
|
||||
|
@@ -10,6 +10,8 @@
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Mailer';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
if (!hasFlag(FLAG_CONTENT_MAILER) && !superAdmin()) {
|
||||
echo 'Access denied.';
|
||||
return;
|
||||
@@ -20,7 +22,7 @@ if (!setting('core.mail_enabled')) {
|
||||
return;
|
||||
}
|
||||
|
||||
$mail_to = isset($_REQUEST['mail_to']) ? stripslashes(trim($_REQUEST['mail_to'])) : null;
|
||||
$mail_to = isset($_POST['mail_to']) ? stripslashes(trim($_POST['mail_to'])) : null;
|
||||
$mail_subject = isset($_POST['mail_subject']) ? stripslashes($_POST['mail_subject']) : null;
|
||||
$mail_content = isset($_POST['mail_content']) ? stripslashes($_POST['mail_content']) : null;
|
||||
|
||||
|
@@ -16,6 +16,8 @@ defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$title = 'Mass Account Actions';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
$hasCoinsColumn = $db->hasColumn('accounts', 'coins');
|
||||
$hasPointsColumn = $db->hasColumn('accounts', 'premium_points');
|
||||
$freePremium = $config['lua']['freePremium'];
|
||||
|
@@ -16,6 +16,8 @@ defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$title = 'Mass Teleport Actions';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
function admin_teleport_position($x, $y, $z) {
|
||||
if (!Player::query()->update([
|
||||
'posx' => $x, 'posy' => $y, 'posz' => $z
|
||||
|
@@ -13,19 +13,21 @@ use MyAAC\Models\Menu;
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Menus';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
if (!hasFlag(FLAG_CONTENT_MENUS) && !superAdmin()) {
|
||||
echo 'Access denied.';
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['template'])) {
|
||||
$template = $_REQUEST['template'];
|
||||
if (isset($_POST['template'])) {
|
||||
$template = $_POST['template'];
|
||||
|
||||
if (isset($_REQUEST['menu'])) {
|
||||
$post_menu = $_REQUEST['menu'];
|
||||
$post_menu_link = $_REQUEST['menu_link'];
|
||||
$post_menu_blank = $_REQUEST['menu_blank'];
|
||||
$post_menu_color = $_REQUEST['menu_color'];
|
||||
if (isset($_POST['menu'])) {
|
||||
$post_menu = $_POST['menu'];
|
||||
$post_menu_link = $_POST['menu_link'];
|
||||
$post_menu_blank = $_POST['menu_blank'];
|
||||
$post_menu_color = $_POST['menu_color'];
|
||||
if (count($post_menu) != count($post_menu_link)) {
|
||||
echo 'Menu count is not equal menu links. Something went wrong when sending form.';
|
||||
return;
|
||||
@@ -69,9 +71,10 @@ if (isset($_REQUEST['template'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['reset_colors'])) {
|
||||
if (isset($_GET['reset_colors'])) {
|
||||
if (isset($config['menu_default_color'])) {
|
||||
Menu::where('template', $template)->update(['color' => str_replace('#', '', $config['menu_default_color'])]);
|
||||
success('Colors has been reset.');
|
||||
}
|
||||
else {
|
||||
warning('There is no default color defined, cannot reset colors.');
|
||||
@@ -93,6 +96,7 @@ if (isset($_REQUEST['template'])) {
|
||||
</p>
|
||||
<?php if (isset($config['menu_default_color'])) {?>
|
||||
<form method="post" action="?p=menus&reset_colors" onsubmit="return confirm('Do you really want to reset colors?');">
|
||||
<?php csrf(); ?>
|
||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||
<button type="submit" class="btn btn-danger">Reset Colors to default</button>
|
||||
</form>
|
||||
@@ -112,6 +116,7 @@ if (isset($_REQUEST['template'])) {
|
||||
$last_id = array();
|
||||
?>
|
||||
<form method="post" id="menus-form" action="?p=menus">
|
||||
<?php csrf(); ?>
|
||||
<input type="hidden" name="template" value="<?php echo $template ?>"/>
|
||||
<button type="submit" class="btn btn-info">Save</button><br/><br/>
|
||||
<div class="row">
|
||||
|
@@ -1,28 +1,32 @@
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="card card-warning card-outline">
|
||||
<form action="?p=dashboard&maintenance" method="post" class="form-horizontal">
|
||||
<div class="card-header">
|
||||
<span class="m-0">Website Status<span class="float-right">
|
||||
<div class="custom-control custom-switch custom-switch-off-danger custom-switch-on-success">
|
||||
<input type="checkbox" class="custom-control-input" name="status" id="status" value="true" {% if not is_closed %} checked{% endif %}>
|
||||
<label id="status-label" class="custom-control-label" for="status"> {% if is_closed %}Closed{% else %}Open{% endif %}</label>
|
||||
</div></span>
|
||||
</span>
|
||||
<div class="card-header">
|
||||
<span class="m-0">Website Status<span class="float-right">
|
||||
<div class="custom-control custom-switch custom-switch-off-danger custom-switch-on-success">
|
||||
<input form="maintenance-form" type="checkbox" class="custom-control-input" name="status" id="status" value="true" {% if not is_closed %} checked{% endif %}>
|
||||
<label id="status-label" class="custom-control-label" for="status"> {% if is_closed %}Closed{% else %}Open{% endif %}</label>
|
||||
</div></span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="card-body p-2">
|
||||
<div class="col-sm-12">
|
||||
<label for="message" class="col-form-label">Maintenance Message</label>
|
||||
<textarea form="maintenance-form" name="message" class="form-control" cols="40" rows="3" maxlength="255" placeholder="Enter ...">{{ closed_message }}</textarea>
|
||||
<small>(only visible if closed)</small>
|
||||
</div>
|
||||
<div class="card-body p-2">
|
||||
<div class="col-sm-12">
|
||||
<label for="message" class="col-form-label">Maintenance Message</label>
|
||||
<textarea name="message" class="form-control" cols="40" rows="3" maxlength="255" placeholder="Enter ...">{{ closed_message }}</textarea>
|
||||
<small>(only visible if closed)</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<form id="maintenance-form" method="post" action="?p=dashboard" class="float-left">
|
||||
{{ csrf() }}
|
||||
<input type="hidden" name="maintenance" value="1" />
|
||||
<button type="submit" class="btn btn-info"><i class="far fa-update"></i> Update</button>
|
||||
<a href="?p=dashboard&clear_cache" onclick="return confirm('Are you sure?');" class="float-right">
|
||||
<span class="btn btn-danger"><i class="fas fa-clear"></i>Clear cache</span>
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
<form method="post" action="?p=dashboard" class="float-right">
|
||||
{{ csrf() }}
|
||||
<input type="hidden" name="clear_cache" value="1" />
|
||||
<button type="submit" onclick="return confirm('Are you sure that you want to clear cache?');" class="btn btn-danger" title="Clear Cache"><i class="fas fa-clear"></i>Clear cache</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@@ -9,12 +9,15 @@
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$title = 'News Panel';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
$use_datatable = true;
|
||||
|
||||
require_once LIBS . 'forum.php';
|
||||
require_once LIBS . 'news.php';
|
||||
|
||||
$title = 'News Panel';
|
||||
$use_datatable = true;
|
||||
|
||||
if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||
echo 'Access denied.';
|
||||
return;
|
||||
@@ -31,17 +34,17 @@ const ARTICLE_IMAGE_LIMIT = 100;
|
||||
$name = $p_title = '';
|
||||
if(!empty($action))
|
||||
{
|
||||
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
|
||||
$p_title = isset($_REQUEST['title']) ? $_REQUEST['title'] : null;
|
||||
$body = isset($_REQUEST['body']) ? stripslashes($_REQUEST['body']) : null;
|
||||
$comments = isset($_REQUEST['comments']) ? $_REQUEST['comments'] : null;
|
||||
$type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : null;
|
||||
$category = isset($_REQUEST['category']) ? (int)$_REQUEST['category'] : null;
|
||||
$player_id = isset($_REQUEST['player_id']) ? (int)$_REQUEST['player_id'] : null;
|
||||
$article_text = isset($_REQUEST['article_text']) ? $_REQUEST['article_text'] : null;
|
||||
$article_image = isset($_REQUEST['article_image']) ? $_REQUEST['article_image'] : null;
|
||||
$forum_section = isset($_REQUEST['forum_section']) ? $_REQUEST['forum_section'] : null;
|
||||
$errors = array();
|
||||
$id = $_POST['id'] ?? null;
|
||||
$p_title = $_POST['title'] ?? null;
|
||||
$body = isset($_POST['body']) ? stripslashes($_POST['body']) : null;
|
||||
$comments = $_POST['comments'] ?? null;
|
||||
$type = isset($_REQUEST['type']) ? (int)$_REQUEST['type'] : 1;
|
||||
$category = isset($_POST['category']) ? (int)$_POST['category'] : null;
|
||||
$player_id = isset($_POST['player_id']) ? (int)$_POST['player_id'] : null;
|
||||
$article_text = $_POST['article_text'] ?? null;
|
||||
$article_image = $_POST['article_image'] ?? null;
|
||||
$forum_section = $_POST['forum_section'] ?? null;
|
||||
$errors = [];
|
||||
|
||||
if($action == 'new') {
|
||||
if(isset($forum_section) && $forum_section != '-1') {
|
||||
@@ -88,8 +91,9 @@ if(!empty($action))
|
||||
}
|
||||
}
|
||||
else if($action == 'hide') {
|
||||
News::toggleHidden($id, $errors, $status);
|
||||
success(($status == 1 ? 'Show' : 'Hide') . " successful.");
|
||||
if (News::toggleHidden($id, $errors, $status)) {
|
||||
success(($status == 1 ? 'Hide' : 'Show') . ' successful.');
|
||||
}
|
||||
}
|
||||
|
||||
if(!empty($errors))
|
||||
@@ -115,12 +119,10 @@ if($action == 'edit' || $action == 'new') {
|
||||
$account_players->orderBy('group_id', POT::ORDER_DESC);
|
||||
$twig->display('admin.news.form.html.twig', array(
|
||||
'action' => $action,
|
||||
'news_link' => getLink(PAGE),
|
||||
'news_link_form' => '?p=news&action=' . ($action == 'edit' ? 'edit' : 'new'),
|
||||
'news_id' => $id ?? null,
|
||||
'title' => $p_title ?? '',
|
||||
'body' => isset($body) ? escapeHtml($body) : '',
|
||||
'type' => $type ?? null,
|
||||
'type' => $type,
|
||||
'player' => isset($player) && $player->isLoaded() ? $player : null,
|
||||
'player_id' => $player_id ?? null,
|
||||
'account_players' => $account_players,
|
||||
|
@@ -13,6 +13,8 @@ use MyAAC\Models\Notepad as ModelsNotepad;
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Notepad';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
/**
|
||||
* @var $account_logged OTS_Account
|
||||
*/
|
||||
|
@@ -9,11 +9,14 @@
|
||||
*/
|
||||
|
||||
use MyAAC\Models\Pages as ModelsPages;
|
||||
use MyAAC\Admin\Pages;
|
||||
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Pages';
|
||||
$use_datatable = true;
|
||||
|
||||
csrfProtect();
|
||||
|
||||
if (!hasFlag(FLAG_CONTENT_PAGES) && !superAdmin()) {
|
||||
echo 'Access denied.';
|
||||
return;
|
||||
@@ -29,31 +32,36 @@ $enable_tinymce = true;
|
||||
$access = 0;
|
||||
|
||||
// some constants, used mainly by database (cannot by modified without schema changes)
|
||||
define('PAGE_TITLE_LIMIT', 30);
|
||||
define('PAGE_NAME_LIMIT', 30);
|
||||
define('PAGE_BODY_LIMIT', 65535); // maximum page body length
|
||||
const PAGE_TITLE_LIMIT = 30;
|
||||
const PAGE_NAME_LIMIT = 30;
|
||||
const PAGE_BODY_LIMIT = 65535; // maximum page body length
|
||||
|
||||
if (!empty($action)) {
|
||||
if ($action == 'delete' || $action == 'edit' || $action == 'hide')
|
||||
$id = $_REQUEST['id'];
|
||||
|
||||
if (isset($_REQUEST['name']))
|
||||
$name = $_REQUEST['name'];
|
||||
|
||||
if (isset($_REQUEST['title']))
|
||||
$p_title = $_REQUEST['title'];
|
||||
|
||||
$php = isset($_REQUEST['php']) && $_REQUEST['php'] == 1;
|
||||
$enable_tinymce = isset($_REQUEST['enable_tinymce']) && $_REQUEST['enable_tinymce'] == 1;
|
||||
if ($php)
|
||||
$body = $_REQUEST['body'];
|
||||
else if (isset($_REQUEST['body'])) {
|
||||
//$body = $_REQUEST['body'];
|
||||
$body = html_entity_decode(stripslashes($_REQUEST['body']));
|
||||
if ($action == 'delete' || $action == 'edit' || $action == 'hide') {
|
||||
$id = $_POST['id'];
|
||||
}
|
||||
|
||||
if (isset($_REQUEST['access']))
|
||||
$access = $_REQUEST['access'];
|
||||
if (isset($_POST['name'])) {
|
||||
$name = $_POST['name'];
|
||||
}
|
||||
|
||||
if (isset($_POST['title'])) {
|
||||
$p_title = $_POST['title'];
|
||||
}
|
||||
|
||||
$php = isset($_POST['php']) && $_POST['php'] == 1;
|
||||
$enable_tinymce = isset($_POST['enable_tinymce']) && $_POST['enable_tinymce'] == 1;
|
||||
if ($php) {
|
||||
$body = $_POST['body'];
|
||||
}
|
||||
else if (isset($_POST['body'])) {
|
||||
//$body = $_POST['body'];
|
||||
$body = html_entity_decode(stripslashes($_POST['body']));
|
||||
}
|
||||
|
||||
if (isset($_POST['access'])) {
|
||||
$access = $_POST['access'];
|
||||
}
|
||||
|
||||
$errors = array();
|
||||
$player_id = 1;
|
||||
@@ -70,7 +78,7 @@ if (!empty($action)) {
|
||||
if (Pages::delete($id, $errors))
|
||||
success('Page with id ' . $id . ' has been deleted');
|
||||
} else if ($action == 'edit') {
|
||||
if (isset($id) && !isset($_REQUEST['name'])) {
|
||||
if (isset($id) && !isset($_POST['name'])) {
|
||||
$_page = Pages::get($id);
|
||||
$name = $_page['name'];
|
||||
$p_title = $_page['title'];
|
||||
@@ -89,8 +97,9 @@ if (!empty($action)) {
|
||||
}
|
||||
}
|
||||
} else if ($action == 'hide') {
|
||||
Pages::toggleHidden($id, $errors, $status);
|
||||
success(($status == 1 ? 'Show' : 'Hide') . ' successful.');
|
||||
if (Pages::toggleHidden($id, $errors, $status)) {
|
||||
success(($status == 0 ? 'Show' : 'Hide') . ' successful.');
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($errors))
|
||||
@@ -107,7 +116,7 @@ $pages = ModelsPages::all()->map(function ($e) {
|
||||
];
|
||||
})->toArray();
|
||||
|
||||
$twig->display('admin.pages.form.html.twig', array(
|
||||
$twig->display('admin.pages.form.html.twig', [
|
||||
'action' => $action,
|
||||
'id' => $action == 'edit' ? $id : null,
|
||||
'name' => $name,
|
||||
@@ -117,136 +126,8 @@ $twig->display('admin.pages.form.html.twig', array(
|
||||
'body' => isset($body) ? escapeHtml($body) : '',
|
||||
'groups' => $groups->getGroups(),
|
||||
'access' => $access
|
||||
));
|
||||
]);
|
||||
|
||||
$twig->display('admin.pages.html.twig', array(
|
||||
$twig->display('admin.pages.html.twig', [
|
||||
'pages' => $pages
|
||||
));
|
||||
|
||||
class Pages
|
||||
{
|
||||
static public function verify($name, $title, $body, $player_id, $php, $enable_tinymce, $access, &$errors)
|
||||
{
|
||||
if(!isset($title[0]) || !isset($body[0])) {
|
||||
$errors[] = 'Please fill all inputs.';
|
||||
return false;
|
||||
}
|
||||
if(strlen($name) > PAGE_NAME_LIMIT) {
|
||||
$errors[] = 'Page name cannot be longer than ' . PAGE_NAME_LIMIT . ' characters.';
|
||||
return false;
|
||||
}
|
||||
if(strlen($title) > PAGE_TITLE_LIMIT) {
|
||||
$errors[] = 'Page title cannot be longer than ' . PAGE_TITLE_LIMIT . ' characters.';
|
||||
return false;
|
||||
}
|
||||
if(strlen($body) > PAGE_BODY_LIMIT) {
|
||||
$errors[] = 'Page content cannot be longer than ' . PAGE_BODY_LIMIT . ' characters.';
|
||||
return false;
|
||||
}
|
||||
if(!isset($player_id) || $player_id == 0) {
|
||||
$errors[] = 'Player ID is wrong.';
|
||||
return false;
|
||||
}
|
||||
if(!isset($php) || ($php != 0 && $php != 1)) {
|
||||
$errors[] = 'Enable PHP is wrong.';
|
||||
return false;
|
||||
}
|
||||
if ($php == 1 && !getBoolean(setting('core.admin_pages_php_enable'))) {
|
||||
$errors[] = 'PHP pages disabled on this server. To enable go to Settings in Admin Panel and enable <strong>Enable PHP Pages</strong>.';
|
||||
return false;
|
||||
}
|
||||
if(!isset($enable_tinymce) || ($enable_tinymce != 0 && $enable_tinymce != 1)) {
|
||||
$errors[] = 'Enable TinyMCE is wrong.';
|
||||
return false;
|
||||
}
|
||||
if(!isset($access) || $access < 0 || $access > PHP_INT_MAX) {
|
||||
$errors[] = 'Access is wrong.';
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static public function get($id)
|
||||
{
|
||||
$row = ModelsPages::find($id);
|
||||
if ($row) {
|
||||
return $row->toArray();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static public function add($name, $title, $body, $player_id, $php, $enable_tinymce, $access, &$errors)
|
||||
{
|
||||
if(!self::verify($name, $title, $body, $player_id, $php, $enable_tinymce, $access, $errors)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!ModelsPages::where('name', $name)->exists())
|
||||
ModelsPages::create([
|
||||
'name' => $name,
|
||||
'title' => $title,
|
||||
'body' => $body,
|
||||
'player_id' => $player_id,
|
||||
'php' => $php ? '1' : '0',
|
||||
'enable_tinymce' => $enable_tinymce ? '1' : '0',
|
||||
'access' => $access
|
||||
]);
|
||||
else
|
||||
$errors[] = 'Page with this link already exists.';
|
||||
|
||||
return !count($errors);
|
||||
}
|
||||
|
||||
static public function update($id, $name, $title, $body, $player_id, $php, $enable_tinymce, $access, &$errors)
|
||||
{
|
||||
if(!self::verify($name, $title, $body, $player_id, $php, $enable_tinymce, $access, $errors)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ModelsPages::where('id', $id)->update([
|
||||
'name' => $name,
|
||||
'title' => $title,
|
||||
'body' => $body,
|
||||
'player_id' => $player_id,
|
||||
'php' => $php ? '1' : '0',
|
||||
'enable_tinymce' => $enable_tinymce ? '1' : '0',
|
||||
'access' => $access
|
||||
]);
|
||||
return true;
|
||||
}
|
||||
|
||||
static public function delete($id, &$errors)
|
||||
{
|
||||
if (isset($id)) {
|
||||
$row = ModelsPages::find($id);
|
||||
if ($row) {
|
||||
$row->delete();
|
||||
}
|
||||
else
|
||||
$errors[] = 'Page with id ' . $id . ' does not exists.';
|
||||
} else
|
||||
$errors[] = 'id not set';
|
||||
|
||||
return !count($errors);
|
||||
}
|
||||
|
||||
static public function toggleHidden($id, &$errors, &$status)
|
||||
{
|
||||
if (isset($id)) {
|
||||
$row = ModelsPages::find($id);
|
||||
if ($row) {
|
||||
$row->hidden = $row->hidden == 1 ? 0 : 1;
|
||||
$row->save();
|
||||
$status = $row->hidden;
|
||||
}
|
||||
else {
|
||||
$errors[] = 'Page with id ' . $id . ' does not exists.';
|
||||
}
|
||||
} else
|
||||
$errors[] = 'id not set';
|
||||
|
||||
return !count($errors);
|
||||
}
|
||||
}
|
||||
]);
|
||||
|
@@ -13,6 +13,9 @@ use MyAAC\Models\Player;
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
|
||||
$title = 'Player editor';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
$player_base = ADMIN_URL . '?p=players';
|
||||
|
||||
$use_datatable = true;
|
||||
@@ -75,7 +78,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
$player = new OTS_Player();
|
||||
$player->load($id);
|
||||
|
||||
if (isset($player) && $player->isLoaded() && isset($_POST['save'])) {// we want to save
|
||||
if ($player->isLoaded() && isset($_POST['save'])) {// we want to save
|
||||
$error = false;
|
||||
|
||||
if ($player->isOnline())
|
||||
@@ -373,6 +376,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
</ul>
|
||||
</div>
|
||||
<form action="<?php echo $player_base . ((isset($id) && $id > 0) ? '&id=' . $id : ''); ?>" method="post">
|
||||
<?php csrf(); ?>
|
||||
<div class="card-body">
|
||||
<div class="tab-content" id="tabs-tabContent">
|
||||
<div class="tab-pane fade active show" id="tabs-home">
|
||||
@@ -870,6 +874,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
<div class="card-body row">
|
||||
<div class="col-6 col-lg-12">
|
||||
<form action="<?php echo $player_base; ?>" method="post">
|
||||
<?php csrf(); ?>
|
||||
<label for="search">Player Name:</label>
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" class="form-control" id="search" name="search" value="<?= escapeHtml($search_player); ?>" maxlength="32" size="32">
|
||||
@@ -879,6 +884,7 @@ else if (isset($_REQUEST['search'])) {
|
||||
</div>
|
||||
<div class="col-6 col-lg-12">
|
||||
<form action="<?php echo $player_base; ?>" method="post">
|
||||
<?php csrf(); ?>
|
||||
<label for="id">Player ID:</label>
|
||||
<div class="input-group input-group-sm">
|
||||
<input type="text" class="form-control" id="id" name="id" value="<?= $id; ?>" maxlength="32" size="32">
|
||||
|
@@ -9,6 +9,9 @@
|
||||
*/
|
||||
defined('MYAAC') or die('Direct access not allowed!');
|
||||
$title = 'Plugin manager';
|
||||
|
||||
csrfProtect();
|
||||
|
||||
$use_datatable = true;
|
||||
|
||||
require_once LIBS . 'plugins.php';
|
||||
@@ -19,23 +22,23 @@ if (!getBoolean(setting('core.admin_plugins_manage_enable'))) {
|
||||
else {
|
||||
$twig->display('admin.plugins.form.html.twig');
|
||||
|
||||
if (isset($_REQUEST['uninstall'])) {
|
||||
$uninstall = $_REQUEST['uninstall'];
|
||||
if (isset($_POST['uninstall'])) {
|
||||
$uninstall = $_POST['uninstall'];
|
||||
|
||||
if (Plugins::uninstall($uninstall)) {
|
||||
success('Successfully uninstalled plugin ' . $uninstall);
|
||||
} else {
|
||||
error('Error while uninstalling plugin ' . $uninstall . ': ' . Plugins::getError());
|
||||
}
|
||||
} else if (isset($_REQUEST['enable'])) {
|
||||
$enable = $_REQUEST['enable'];
|
||||
} else if (isset($_POST['enable'])) {
|
||||
$enable = $_POST['enable'];
|
||||
if (Plugins::enable($enable)) {
|
||||
success('Successfully enabled plugin ' . $enable);
|
||||
} else {
|
||||
error('Error while enabling plugin ' . $enable . ': ' . Plugins::getError());
|
||||
}
|
||||
} else if (isset($_REQUEST['disable'])) {
|
||||
$disable = $_REQUEST['disable'];
|
||||
} else if (isset($_POST['disable'])) {
|
||||
$disable = $_POST['disable'];
|
||||
if (Plugins::disable($disable)) {
|
||||
success('Successfully disabled plugin ' . $disable);
|
||||
} else {
|
||||
@@ -116,7 +119,7 @@ foreach (get_plugins(true) as $plugin) {
|
||||
if (!$plugin_info) {
|
||||
warning('Cannot load plugin info ' . $plugin . '.json');
|
||||
} else {
|
||||
$disabled = (strpos($plugin, 'disabled.') !== false);
|
||||
$disabled = (str_contains($plugin, 'disabled.'));
|
||||
$pluginOriginal = ($disabled ? str_replace('disabled.', '', $plugin) : $plugin);
|
||||
$plugins[] = array(
|
||||
'name' => $plugin_info['name'] ?? '',
|
||||
|
Reference in New Issue
Block a user