-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
用户管理建议 #24
Comments
另外,Pro节点那个完全跟普通节点没什么意义,其实完全可以和"套餐"这个功能一起使用,比如当用户为A套餐时不可见Pro节点信息,从注册日期算起,满7天(由站长自由设定)自动更改为B套餐,则可见Pro节点, 目前我已经实现A套餐/B套餐后台切换和不可见的功能,没法实现自动满足条件切换。。我觉得这样用户质量能更高,也保护了站长的节点信息隐私~ |
其实SSpanel原本一些没用的功能可以利用起来实现的其它功能,这确实很不错。 |
最近我的事情很多,没空去想和做什么功能,等迟点有空再继续做。 |
@arnaudGithub 把你的代码提交上来嘛,免得我们重复造轮子。到时候做个定时任务就ok了。我最近也在想定时任务的问题,但是我不太懂php,只好先用python实现。然后再慢慢想办法。 |
@xuanhuan 请问一下,Materialize模板/admin/node.php及/admin/user.php列表颜色渐变在哪里更换它的颜色,我想换一下这个颜色与模板的蓝色太不搭配,Thanks! |
color-panel |
@xuanhuan 路径/templates/materialize/index.tpl添加代码
19-23行在HTTPS状态下会出现绿锁不安全资源 |
javascript:void(0); |
@xuanhuan 是的,因为这个地址是指向本地的,而且不是https,所以才会出现不安全资源的提示。 |
嗯,因为我没用图片,而使用css做背景了,你可以把图片地址加上,就是覆盖css了。
|
@xuanhuan 嗯,css生成的图片没法用https吗 ? |
如果不用图片,就只能把 |
我知道了,只要把 |
不行的 |
我这边测试了可以,是真的。。 |
@xuanhuan 经过测试,在javascript:void(0);前面加上//可解决 |
好吧。。。 |
@xuanhuan 那js也要改吧? |
不用 |
你们有没有发现一个问题,论播内容在加载完成闪了两下。 |
@xuanhuan 没有发现这个问题 |
我也没发现。。 |
@xuanhuan 你用的什么浏览器? |
Google Chrome 版本 45.0.2454.85 |
@xuanhuan 新添加的防自动签到好像对 https://qiandao.today 这种程序无效,我刚进行测试,可以使用这个正常自动签到 |
我擦,这年头自动签到都做得这么傻瓜。。话说我以前都不知道还有这种网站。 |
@falseen 我之前一直都是使用的这个程序签到的一些ss站和其它网站~ |
搞一个需要鼠标拖动的验证码应该就行了。 |
@xuanhuan 这张图是AdminLTE-2的报错,materialize的报邮箱或密码错误 |
@xuanhuan 这下是正常了 |
在复制的时候没看清楚造成的 |
那个防签到系统平台,你们测试的有效吗? |
@xuanhuan 我还没测试,代码在我朋友那,等会儿我朋友起来了我让他试试,不过原理就是用登陆后的Cookie签到 |
这样按理来说,是行不通的。 |
@xuanhuan 我也太清楚,等他起来试过了告诉你吧~ |
@xuanhuan 哦对了,目前开发进度怎么样 有打算cron吗 |
正在改进公告系统,昨天在测试发现重大问题,你在公告输入 |
现在改的已经支持使用已存在的变量,还没做完。 |
@xuanhuan 确实如此,我刚试了,全站白屏,幸苦了 |
@xuanhuan cron系统在进程中吗 |
@xuanhuan 好吧,我的意思是ss-panel的cron系统在开发或已在进度列表里吗,就如我这个Issues一楼写的一样 |
计划中 |
@xuanhuan 好,那行,幸苦了,注意身体啊,熬夜不好 |
我之前已经写了一个记录日志模块,但是不知道要不要合拼到程序里,担心一些人别有用心人,用来做钓鱼网站收集用户信息。 |
@xuanhuan 这个确实是有,难免会有些人不走正轨。不过不合并的话,要怎么去使用或查看? |
只有记录,因为用的是json格式,自己写一个查看程序就好了。 |
@xuanhuan 那挺好的啊 |
<?php
header("Content-type: text/html; charset=utf-8");
/**
* $log_name 日志名称
* visit 访问
* monitor D监控和百度云观测
* search 蜘蛛爬虫
* $log_content 日志内容
* $record_ip 等于“true”记录ip
* $record_ip_info 必须要$record_ip等于“true”,这个才能用,等于“true”记录ip信息。
* 使用方法:
* 先要包含文件: include_once 'log.php';
* 然后调用方法: write_log("visit",null,false,false);
* 解释:write_log("日志名称(请用英文)","日志内容","true记录IP,不写或者为空则不记录","true记录IP信息,不写或者为空则不记录,如果前一个参数不写或者为空,这个也不会记录ip信息");
*
* [write_log description]
* @param string $log_name [description]
* @param [type] $log_content [description]
* @param boolean $record_ip [description]
* @param boolean $record_ip_info [description]
* @return [type] [description]
*/
function write_log($log_name="visit",$log_content=null,$record_ip=false,$record_ip_info=false){
global $U, $uid, $user_email ;
//设置路径
$log_dir = str_replace("lib/log.php","log/",str_replace("\\","/",__FILE__));
$error_404 = "<?php header('HTTP/1.1 404 Not Found'); header(\"status: 404 Not Found\"); include(\$_SERVER['DOCUMENT_ROOT'].'/404.html'); exit();?>\n";
//判断log目录是否存在
if (!file_exists($log_dir)){
//创建log目录
mkdir ($log_dir);
//写入一个index.php文件,当别人访问目录时返回404。
file_put_contents($log_dir."index.php",$error_404);
}
//判断$log_name有user/时继续
if(preg_match("/user\//si",$log_name)){
//判断user目录是否存在
if (!file_exists($log_dir."user")){
//创建user目录
mkdir ($log_dir."user");
//写入一个index.php文件,当别人访问目录时返回404。
file_put_contents($log_dir."user/index.php",$error_404);
}
//判断$log_name有admin/时继续
}elseif(preg_match("/admin\//si",$log_name)){
//判断admin目录是否存在
if (!file_exists($log_dir."admin")){
//创建admin目录
mkdir ($log_dir."admin");
//写入一个index.php文件,当别人访问目录时返回404。
file_put_contents($log_dir."admin/index.php",$error_404);
}
}
//判断log相关名称目录是否存在
if (!file_exists($log_dir.$log_name)) {
//创建log相关名称目录
mkdir($log_dir.$log_name);
//写入一个index.php文件,当别人访问目录时返回404。
file_put_contents($log_dir.$log_name."/index.php",$error_404);
}
//要写入文件的文件名(可以是任意文件名),如果文件不存在,将会创建一个
$log_file = $log_dir.$log_name."/".date("Y-m-d_")."log.php";
$str_content='{'."\n";
$str_content.='"时间":"'.date("Y-m-d H:i:s").'",'."\n";
if(!empty($user_email)){
$str_content.='"email":"'.$user_email.'",'."\n";
}
if(!empty($uid)){
$str_content.='"uid":"'.@$uid.'",'."\n";
}
if(!empty($U)){
if(!empty($U->GetUserName())){
$str_content.='"用户名":"'.@$U->GetUserName().'",'."\n";
}
}
if($log_name=="mail_success" || $log_name=="mail_error"){
global $email,$Selectmailservice;
$str_content.='"邮箱":"'.$email.'",'."\n";
$str_content.='"邮件服务":"'.$Selectmailservice.'",'."\n";
}
if(@preg_match("/user_/si",$log_name) || @preg_match("/user\//si",$log_name)){
if(@$log_name=="user_login_success" || @$log_name=="user/login_success"){
global $id,$email;
$str_content.='"id":"'.$id.'",'."\n";
$str_content.='"邮箱":"'.$email.'",'."\n";
}elseif($log_name=="user_login_error" || $log_name=="user/login_error"){
global $email;
$str_content.='"邮箱":"'.$email.'",'."\n";
}elseif($log_name=="user_look_node_qr" || $log_name=="user_look_node_json" ||
$log_name=="user/look_node_qr" || $log_name=="user/look_node_json"){
global $id,$server,$port;
$str_content.='"节点_id":"'.$id.'",'."\n";
$str_content.='"节点_ip":"'.$server.'",'."\n";
$str_content.='"节点_端口":"'.$server.'",'."\n";
}elseif($log_name=="user_create_Invite_code" || $log_name=="user/create_Invite_code"){
$str_content.='"邀请码":"'.$U->InviteNumToZero().'",'."\n";
}
}elseif(@preg_match("/admin_/si",$log_name) || @preg_match("/admin//si",$log_name)){
if($log_name=="admin_login_success" || $log_name=="admin/login_success"){
global $id,$email;
$str_content.='"id"'.$id.'",'."\n";
$str_content.='"邮箱":"'.$email.'",'."\n";
}elseif($log_name=="admin_login_error" || $log_name=="admin/login_error"){
global $email;
$str_content.='"邮箱":"'.$email.'",'."\n";
}elseif($log_name=="admin_edit_user" || $log_name=="admin/edit_user"){
// global $email;
// $str_content.='"user_id"'.$_POST['user_uid'].'",'."\n";
// $str_content.='"用户名:"'.$_POST['user_name'].'",'."\n";
// $str_content.='"邮箱"'.$email.'",'."\n";
}
elseif($log_name=="admin_del_user" || $log_name=="admin/del_user"){
$str_content.='"用户id":"'.$_GET['uid'].'",'."\n";
}elseif($log_name=="admin_edit_node" || $log_name=="admin_add_node" ||
$log_name=="admin/edit_node" || $log_name=="admin/add_node"){
global $node_name,$node_server,$node_method,$node_info,$node_type,$node_status,$node_order;
if(!empty($node_id)){
global $node_id;
$str_content.='"节点id":"'.$node_id.'",'."\n";
}
$str_content.='"节点名字":"'.$node_name.'",'."\n";
$str_content.='"节点地址":"'.$node_server.'",'."\n";
$str_content.='"加密方式":"'.$node_method.'",'."\n";
$str_content.='"节点描述":"'.$node_info.'",'."\n";
$str_content.='"分类":"'.$node_type.'",'."\n";
$str_content.='"状态":"'.$node_status.'",'."\n";
$str_content.='"排序":"'.$node_order.'",'."\n";
}elseif($log_name=="amin_add_code" || $log_name=="amin/add_code"){
}elseif($log_name=="admin_change_announcement" || $log_name=="admin/change_announcement"){
global $announcement_name;
if ($announcement_name=='index_Announcement') {
global $index_Announcement;
$announcement_content = $index_Announcement;
}elseif ($announcement_name=='index_button') {
global $index_button;
$announcement_content = $index_button;
}elseif ($announcement_name=='index_Custom') {
global $index_Custom;
$announcement_content = $index_Custom;
}elseif ($announcement_name=='footer_Announcement') {
global $footer_Announcement;
$announcement_content = $footer_Announcement;
}elseif ($announcement_name=='tos_content') {
global $tos_content;
$announcement_content = $tos_content;
}elseif ($announcement_name=='code_Announcement') {
global $code_Announcement;
$announcement_content = $code_Announcement;
}elseif ($announcement_name=='user_index_Announcement') {
global $user_index_Announcement;
$announcement_content = $user_index_Announcement;
}elseif ($announcement_name=='user_node_Announcement_node') {
global $user_node_Announcement_node;
$announcement_content = $user_node_Announcement_node;
}elseif ($announcement_name=='user_node_Announcement_node_pro') {
global $user_node_Announcement_node_pro;
$announcement_content = $user_node_Announcement_node_pro;
}elseif ($announcement_name=='user_invite_Announcement_color_orange') {
global $user_invite_Announcement_color_orange;
$announcement_content = $user_invite_Announcement_color_orange;
}elseif ($announcement_name=='user_invite_Announcement_color_blue') {
global $user_invite_Announcement_color_blue;
$announcement_content = $user_invite_Announcement_color_blue;
}
if($announcement_content!=$log_content){
$str_content.='"名称":"'.$announcement_name.'",'."\n";
$announcement_content=preg_replace('/"/','\"',$announcement_content);
$str_content.='"原内容":"'.$announcement_content.'",'."\n";
}
}
}
if(!empty($log_content)){
if($log_name=="admin_change_announcement"){
if($announcement_content!=$log_content){
$log_content=preg_replace('/"/','\"',$log_content);
$str_content.='"新内容":"'.$log_content.'",'."\n";
}else{
$str_content.='"信息":"内容不变",'."\n";
}
}else{
$str_content.='"信息":"'.$log_content.'",'."\n";
}
}
//true记录IP
if($record_ip===true){
//在引用前判断SMARTY_DIR是否为假,如果是假,要先设置为真才能用ip.php,不然调用不了函数,还会返回一个404页面。
if(!defined('SMARTY_DIR')) {define('SMARTY_DIR','SMARTY_DIR');}
//包含ip.php文件
require_once dirname(__FILE__).DIRECTORY_SEPARATOR."Ss/Etc/ip.php";
//获取并记录ip
$str_content.='"ip":"'.getIP().'",'."\n";
if($record_ip_info===true){
//获取ip信息,以下记录。
$ip_data=(array)getCity(getIP());
/* 过滤<? ?> 和 < > */
$ip_data=preg_replace("/<\?|\?>|<|>/si"," tag ",$ip_data);
//true记录IP信息
if(!empty($ip_data['isp'])){
$str_content.='"运营商":"'.$ip_data['isp'].'",'."\n";
$str_content.='"运营商-id":"'.$ip_data['isp_id'].'",'."\n";
}
if(!empty($ip_data['country'])){
$str_content.='"国家":"'.$ip_data['country'].'",'."\n";
$str_content.='"国家-id":"'.$ip_data['country_id'].'",'."\n";
}
if(!empty($ip_data['area'])){
$str_content.='"地区":"'.$ip_data['area'].'",'."\n";
$str_content.='"地区-id":"'.$ip_data['area_id'].'",'."\n";
}
if(!empty($ip_data['region'])){
$str_content.='"省份":"'.$ip_data['region'].'",'."\n";
$str_content.='"省份-id":"'.$ip_data['region_id'].'",'."\n";
}
if(!empty($ip_data['city'])){
$str_content.='"城市":"'.$ip_data['city'].'",'."\n";
$str_content.='"城市-id":"'.$ip_data['city_id'].'",'."\n";
}
if(!empty($ip_data['county'])){
$str_content.='"县/区/镇":"'.$ip_data['county'].'",'."\n";
$str_content.='"县/区/镇-id":"'.$ip_data['county_id'].'",'."\n";
}
}
}
$str_content.='"url":"http://'.$_SERVER['SERVER_NAME'].':'.$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"].'",'."\n";
if(!empty($_SERVER['HTTP_REFERER'])){
$str_content.='"前一页":"'.$_SERVER['HTTP_REFERER'].'",'."\n";
}
/* 过滤<? ?> 和 < > */
$UA=preg_replace("/<\?|\?>|<|>/si"," tag ",@$_SERVER['HTTP_USER_AGENT']);
$str_content.='"UA":"'.$UA.'"'."\n";
$str_content.='}'."\n";
if(file_exists($log_file)){
if(!$f = file_put_contents($log_file,",".$str_content,FILE_APPEND)){
// echo "<br/>log写入失败";
}else{
// echo "<br/>log写入成功。";
}
}else{
if(!$f = file_put_contents($log_file,$error_404.$str_content,FILE_APPEND)){
// echo "<br/>log写入失败";
}else{
// echo "<br/>log写入成功。";
}
}
}
if(!defined('SMARTY_DIR')) {
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
include($_SERVER['DOCUMENT_ROOT'].'/404.html');
write_log("log.php","有人直接访问这个文件了。",true,true);
}
?> 放在lib/log.php |
<?php
if(!defined('SMARTY_DIR')) {
header('HTTP/1.1 404 Not Found');
header("status: 404 Not Found");
include($_SERVER['DOCUMENT_ROOT'].'/404.html');
define('SMARTY_DIR','SMARTY_DIR');
@require_once '../../log.php';
write_log("ip.php","有人直接访问这个文件了。",true,true);
exit();
}
/**
* 获取用户真实 IP
*/
function getIP()
{
static $realip;
if (isset($_SERVER)){
if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
$realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$realip = $_SERVER["HTTP_CLIENT_IP"];
} else {
$realip = $_SERVER["REMOTE_ADDR"];
}
} else {
if (getenv("HTTP_X_FORWARDED_FOR")){
$realip = getenv("HTTP_X_FORWARDED_FOR");
} else if (getenv("HTTP_CLIENT_IP")) {
$realip = getenv("HTTP_CLIENT_IP");
} else {
$realip = getenv("REMOTE_ADDR");
}
}
return $realip;
}
/**
* 获取 IP 地理位置
* 淘宝IP接口
* @Return: array
*/
function getCity($ip)
{
$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip;
try {
$ip=json_decode(file_get_contents($url));
if((string)$ip->code=='1'){
return false;
}
$data = (array)$ip->data;
return $data;
} catch (Exception $e) {
return $e;
}
}
?> 放在lib/Ss/Etc/ip.php |
@xuanhuan 弄这2个php就可以使用了? |
是的,请看log.php的说明,还有一部分没完成。 |
@xuanhuan 恩,我等会儿试试效果,期待完成~ |
建议加上筛选功能或者有一个条件自动处理用户 比如从注册日期算起 15天(这个时间由站长自由设定)没有签到或其它操作,自动将用户改为停用状态,希望采纳~
The text was updated successfully, but these errors were encountered: