improvements for saimod security

This commit is contained in:
Ulf Gebhardt 2014-01-27 01:42:12 +01:00
parent a7152116dd
commit 770702ddb4
14 changed files with 164 additions and 19 deletions

View File

@ -19,4 +19,3 @@ class SYS_SAIMOD_LOG_FILTER extends \SYSTEM\DB\QP {
' WHERE '.\SYSTEM\DBD\system_log::FIELD_CLASS.' LIKE ?'.
' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_TIME.' DESC LIMIT 100;'
);}}

View File

@ -0,0 +1,12 @@
<?php
namespace SYSTEM\DBD;
class SYS_SAIMOD_SECURITY_USER extends \SYSTEM\DB\QP {
protected static function query(){
return new \SYSTEM\DB\QQuery(get_class(),
//pg
'SELECT id,username,email,joindate,locale, EXTRACT(EPOCH FROM last_active) as last_active ,account_flag FROM system.user WHERE username = $1 LIMIT 1;',
//mys
'SELECT id,username,email,joindate,locale,last_active,account_flag FROM system_user WHERE username = ? LIMIT 1;'
);}}

View File

@ -0,0 +1,22 @@
<?php
namespace SYSTEM\DBD;
class SYS_SAIMOD_SECURITY_USER_LOG extends \SYSTEM\DB\QP {
protected static function query(){
return new \SYSTEM\DB\QQuery(get_class(),
//pg
'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_PG.
' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_PG.
' ON '.\SYSTEM\DBD\system_log::NAME_PG.'.'.\SYSTEM\DBD\system_log::FIELD_USER.
' = '.\SYSTEM\DBD\system_user::NAME_PG.'.'.\SYSTEM\DBD\system_user::FIELD_ID.
' WHERE '.\SYSTEM\DBD\system_log::FIELD_USER.' = $1'.
' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_TIME.' DESC LIMIT 100;',
//mys
'SELECT * FROM '.\SYSTEM\DBD\system_log::NAME_MYS.
' LEFT JOIN '.\SYSTEM\DBD\system_user::NAME_MYS.
' ON '.\SYSTEM\DBD\system_log::NAME_MYS.'.'.\SYSTEM\DBD\system_log::FIELD_USER.
' = '.\SYSTEM\DBD\system_user::NAME_MYS.'.'.\SYSTEM\DBD\system_user::FIELD_ID.
' WHERE '.\SYSTEM\DBD\system_log::FIELD_USER.' = ?'.
' ORDER BY '.\SYSTEM\DBD\system_log::FIELD_TIME.' DESC LIMIT 100;'
);}}

View File

@ -0,0 +1,17 @@
<?php
namespace SYSTEM\DBD;
class SYS_SAIMOD_SECURITY_USER_LOG_COUNT extends \SYSTEM\DB\QP {
protected static function query(){
return new \SYSTEM\DB\QQuery(get_class(),
//pg
'SELECT COUNT(*) as count FROM '.\SYSTEM\DBD\system_log::NAME_PG.
' WHERE '.\SYSTEM\DBD\system_log::FIELD_USER.
' = $1;',
//mys
'SELECT COUNT(*) as count'.
' FROM '.\SYSTEM\DBD\system_log::NAME_MYS.
' WHERE '.\SYSTEM\DBD\system_log::FIELD_USER.
' = ?;'
);}}

View File

@ -62,8 +62,7 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule {
public static function sai_mod__SYSTEM_SAI_saimod_sys_log_action_filter($filter = "%"){
$count = \SYSTEM\DBD\SYS_SAIMOD_LOG_FILTER_COUNT::Q1(array(mysql_escape_string($filter)));
$res = \SYSTEM\DBD\SYS_SAIMOD_LOG_FILTER::QQ(array(mysql_escape_string($filter)));
$now = microtime(true);
$res = \SYSTEM\DBD\SYS_SAIMOD_LOG_FILTER::QQ(array(mysql_escape_string($filter)));
$table='';
while($r = $res->next()){
//print_r($r);
@ -71,7 +70,7 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule {
$r['time'] = self::time_elapsed_string(strtotime($r['time']));
$r['message'] = substr($r['message'],0,255);
$table .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_table_row.tpl'),$r);
}
}
$vars = array();
$vars['count'] = $count['count'];
$vars['table'] = $table;
@ -113,13 +112,13 @@ class saimod_sys_log extends \SYSTEM\SAI\SaiModule {
return $result;
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_log(){
public static function sai_mod__SYSTEM_SAI_saimod_sys_log(){
$vars = array();
$vars['PICPATH'] = \SYSTEM\WEBPATH(new \SYSTEM\PSAI(), 'modules/saimod_sys_log/img/');
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log.tpl'), $vars);
}
private static function tablerow_class($class){
public static function tablerow_class($class){
switch($class){
case 'SYSTEM\LOG\INFO': case 'INFO': case 'SYSTEM\LOG\COUNTER':
return 'success';

View File

@ -3,11 +3,20 @@
<li><a href="#" filter="2592000">30d</a></li>
<li><a href="#" filter="1209600">14d</a></li>
<li class="active"><a href="#" filter="604800">7d</a></li>
<li><a href="#" filter="172800">2d</a></li>
<li><a href="#" filter="86400">1d</a></li>
<li><a href="#" filter="43200">12h</a></li>
<li><a href="#" filter="21600">6h</a></li>
<li><a href="#" filter="3600">1h</a></li>
<li><a href="#" filter="21600">6h</a></li>
<li><a href="#" filter="14400">4h</a></li>
<li><a href="#" filter="7200">2h</a></li>
<li><a href="#" filter="3600">1h</a></li>
<li><a href="#" filter="1800">30m</a></li>
<li><a href="#" filter="600">10m</a></li>
<li><a href="#" filter="300">5m</a></li>
<li><a href="#" filter="60">1m</a></li>
<li><a href="#" filter="30">30s</a></li>
<li><a href="#" filter="10">10s</a></li>
<li><a href="#" filter="5">5s</a></li>
<li><a href="#" filter="1">1s</a></li>
</ul>

View File

@ -1,3 +1,4 @@
var user_search = '';
function init__SYSTEM_SAI_saimod_sys_security() {
$('#securitytab a').click(function (e) {
e.preventDefault();
@ -12,11 +13,13 @@ function load_security_tab(action){
$('img#loader').show();
switch(action){
case 'users':
$('#tab_users').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_security&action='+action, function(){
$('#tab_users').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_security&action='+action+'&search='+user_search, function(){
register_users();
$('img#loader').hide();});
return;
case 'rights':
$('#tab_rights').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_security&action='+action, function(){
$('#tab_rights').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_security&action='+action, function(){
register_rights();
$('img#loader').hide();});
return;
case 'groups':
@ -26,4 +29,20 @@ function load_security_tab(action){
default:
$('img#loader').hide();
}
}
function register_rights(){
$('#new_right').click(function(){
$('#tab_rights').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_security&action=newright');
});
}
function register_users(){
$('#user_go').click(function(){
user_search = $('#user_search').val();
load_security_tab('users');
});
$('#user_search').val(user_search);
$('.user_entry').click(function(){
$('#tab_users').load(SAI_ENDPOINT+'sai_mod=.SYSTEM.SAI.saimod_sys_security&action=user&username='+$(this).attr('username'));
});
}

View File

@ -6,6 +6,9 @@ class saimod_sys_security extends \SYSTEM\SAI\SaiModule {
public static function sai_mod__SYSTEM_SAI_saimod_sys_security_action_groups(){
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security_groups.tpl'),array());}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security_action_newright(){
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security_newright.tpl'),array());}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security_action_rights(){
$rows = '';
$res = \SYSTEM\DBD\SYS_SAIMOD_SECURITY_RIGHTS::QQ();
@ -14,8 +17,32 @@ class saimod_sys_security extends \SYSTEM\SAI\SaiModule {
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security_rights.tpl'),array('rows' => $rows));
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security_action_users($search = null){
$search = '%'.$search.'%';
private static function user_actions($userid){
$count = \SYSTEM\DBD\SYS_SAIMOD_SECURITY_USER_LOG_COUNT::Q1(array($userid));
$res = \SYSTEM\DBD\SYS_SAIMOD_SECURITY_USER_LOG::QQ(array($userid));
$table='';
while($r = $res->next()){
//print_r($r);
$r['class_row'] = \SYSTEM\SAI\saimod_sys_log::tablerow_class($r['class']);
$r['time'] = self::time_elapsed_string(strtotime($r['time']));
$r['message'] = substr($r['message'],0,255);
$table .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_table_row.tpl'),$r);
}
$vars = array();
$vars['count'] = $count['count'];
$vars['table'] = $table;
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_log/saimod_sys_log_table.tpl'), $vars);
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security_action_user($username){
$vars = \SYSTEM\DBD\SYS_SAIMOD_SECURITY_USER::Q1(array($username));
$vars['time_elapsed'] = self::time_elapsed_string($vars['last_active']);
$vars['user_actions'] = self::user_actions($vars['id']);
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security_user_view.tpl'),$vars);
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security_action_users($search = null){
$search = '%'.$search.'%';
$count = \SYSTEM\DBD\SYS_SAIMOD_SECURITY_USER_COUNT::Q1(array($search),array($search,$search));
$rows = '';
$res = \SYSTEM\DBD\SYS_SAIMOD_SECURITY_USERS::QQ(array($search),array($search,$search));
@ -27,8 +54,10 @@ class saimod_sys_security extends \SYSTEM\SAI\SaiModule {
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security_users.tpl'),array('rows' => $rows, 'count' => $count['count']));
}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security(){
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security.tpl'), array());}
public static function sai_mod__SYSTEM_SAI_saimod_sys_security(){
$vars = array();
$vars['PICPATH'] = \SYSTEM\WEBPATH(new \SYSTEM\PSAI(), 'modules/saimod_sys_log/img/');
return \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \SYSTEM\PSAI(),'modules/saimod_sys_security/saimod_sys_security.tpl'), $vars);}
private static function tablerow_class($last_active){
$time = time() - $last_active;

View File

@ -3,6 +3,7 @@
<li class="active"><a href="#tab_users" action="users">Users</a></li>
<li><a href="#tab_rights" action="rights">Rights</a></li>
<li><a href="#tab_groups" action="groups">Groups</a></li>
<img id="loader" src="${PICPATH}ajax-loader.gif" style="margin-left: 10px; margin-top: 10px; display: none; float: left"/>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="tab_users"></div>

View File

@ -0,0 +1 @@
new right

View File

@ -1,4 +1,4 @@
<input type="submit" class="btn" value="New Right" newright="1">
<input type="submit" class="btn" id="new_right" value="New Right">
</br></br>
<table class="table table-hover table-condensed" style="overflow: auto;">
<tr>

View File

@ -1,4 +1,4 @@
<tr class="${class}">
<tr class="user_entry ${class}" username="${username}">
<td>${id}</td>
<td>${username}</td>
<td>${email}</td>

View File

@ -0,0 +1,36 @@
<div class="masthead">
<h2 class="muted">Userinfo for User: ${username}</h2>
<h4 class="text-info">Basics</h4>
</div>
<table class="table">
<tr>
<th>ID</th>
<td>${id}</td>
</tr>
<tr>
<th>Username</th>
<td>${username}</td>
</tr>
<tr>
<th>EMail</th>
<td>${email}</td>
</tr>
<tr>
<th>Joindate</th>
<td>${joindate}</td>
</tr>
<tr>
<th>Locale</th>
<td>${locale}</td>
</tr>
<tr>
<th>Last active</th>
<td>${time_elapsed}</td>
</tr>
<tr>
<th>Flag(remove)</th>
<td>${account_flag}</td>
</tr>
</table>
<h4 class="text-info">Users Last Actions</h4>
${user_actions}

View File

@ -1,7 +1,8 @@
Users: ${count}
<input class="input-medium search-query" id="user_search" type="text" placeholder="EMail or Username" size="30"/>
<input class="btn" id="user_go" type="submit" value="Search"/>
</br>
<input type="text" value="Search email or username" size="30"/>
</br>
Users: ${count}
<table class="table table-hover table-condensed" style="overflow: auto;">
<tr>
<th>ID</th>