sspanel按月结算,修改go版代码【mysql api】
开头感谢sspanel的作者orvice大神!【转载请注明】
博主最近在搭建sspanel v3,中间坑确实挺多的,我回头开贴补充一下,ss服务器端我选择了orvice的shadowsocks-go mu版,因为作者是基于流量控制的机理,实际上奸商都是通过时间控制(233),所以我就寻思在作者的基础上加以修改,添加时间的限制。
注:此版本基于mysqlapi,webapi的修改方式令开贴
我在sspanel数据的user表中添加了两个字段:end_time int,到期日期(1970开始的时间戳);package_type int 套餐类型(无,月,三个月,半年,一年)。
具体可以根据自己实际需要情况修改。
首先,我们找到用户控制代码,在shadowsocks-go-mu\mu\mysql\mysql.go中,作者在这里用struct读取mysql中的数据
type User struct {id intport intpasswd stringmethod stringenable inttransferEnable intu intd int
}
需要在里面加上我们新加的三个字段(因为我不知道go语言如何获取时间戳,所以直接从sql读了,有一个好处是如果配置多个服务器,可以保持时间同步,不受本地时间 )
end_time int//从mysql读取服务器当前时间戳now_time intpackage_type int
找到读取数据库数据的方法,给上述字段赋值
func (c *Client) GetUsers() ([]user.User, error) {log.Log.Info("get mysql users")var datas []*User//查询数据库加上新增的字段rows, err := c.db.Model(User{}).Select("id, passwd, port, method,enable,transfer_enable,u,d,end_time,UNIX_TIMESTAMP(LOCALTIME()) as now_time,package_type").Rows()if err != nil {log.Log.Error(err)var users []user.Userreturn users, err}defer rows.Close()for rows.Next() {var data User//将读取到的到期时间和账户类型赋值err := rows.Scan(&data.id, &data.passwd, &data.port, &data.method, &data.enable, &data.transferEnable, &data.u, &data.d, &data.end_time, &data.now_time, &data.package_type)if err != nil {log.Log.Error(err)continue}datas = append(datas, &data)}log.Log.Info(len(datas))users := make([]user.User, len(datas))for k, v := range datas {users[k] = v}return users, nil
}
下一步,找到控制方法,增加到期自动断开
func (u *User) IsEnable() bool {if u.enable == 0 {return false}if u.u+u.d > u.transferEnable {return false}//如果过期,停用用户if u.now_time > u.end_time {return false}return true
}
以上,改完之后重新编译,替换掉原有的mu文件,将服务端重新启动即可
有疑问的可以加群讨论,群号256950656
sspanel按月结算,修改go版代码【mysql api】相关推荐
- x-http-wrapper: 如何解决每次发版时,修改http相关代码造成的错误!(Android、iOS、h5)...
其实是我做了个开源工具(^__^),拿出来给大家鉴赏下,欢迎大家提意见 项目:github.com/xuyt11/x-ht- 欢迎关注和star . 功能:这是一个http相关代码的创建工具. 现在我 ...
- mysql5.5太平洋,太平洋软件下载站SQL全功能新云2.1商业版代码 下载
太平洋软件下载站SQL全功能新云2.1商业版代码 下载 更新时间:2007年04月17日 00:00:00 作者: 运行环境:Asp/Access/Asp/Mssql/ 文件大小:30.76 MB ...
- 【DP练习】月饼盒(提高版)(vijos1255)
[DP练习]月饼盒(提高版) 测试链接:https://vijos.org/p/1255 [题目背景]:中秋节了,CCC老师决定去送礼. [问题描述]:一个被分为 n*m 个格子的月饼盒,第 i 行 ...
- 【完整教程】nginx反向代理wss,实现不修改服务器端websocket代码加密通讯请求
最近在用go语言的leaf框架开发H5游戏的服务器端,用websocket的方式进行服务器与客户端之间的通讯.然后之前都是本地websocket开发,要部署到facebook平台的时候,平台要求与第三 ...
- 短视频批量伪原创 视频md5修改手机版
短视频批量伪原创 视频md5修改手机版 都说人是自私的,只关注与自己相关的事情,不论是"唐山大地震"还是"毒鸡汤",它们都能 ...
- 基于jQuery仿QQ音乐播放器网页版代码
基于jQuery仿QQ音乐播放器网页版代码是一款黑色样式风格的网页QQ音乐播放器样式代码.效果图如下: 在线预览 源码下载 实现的代码. html代码: <div class=" ...
- 【系统之家首发】10月最新GhostWin7_SP1旗舰版(64位)电脑公司装机版v2011.10
GhostWin7_SP1旗舰版(64位)电脑公司装机版v2011.10 ■ 概述: Ghost7是指使用Ghost软件做成压缩包的Windows7,俗称克隆版Win7.用克隆版的目的是节省安装时间. ...
- twrp调整分区_一加7专版TWRP中英文修改优化版-刷机之家
详情 一加7TWRP是一款一加7手机专用的TWRP工具,recovery是用来刷第三方的系统包,twrp是刷机必不可少的工具之一,自定义触摸恢复,非常专业的刷机工具,小编带来的是一加7专版TWRP中英 ...
- MySQL(最全的MySQL基础版,代码版)
MySQL 一.引言 1.1 现有的数据存储方式有哪些? Java中存储数据(变量.对象.数组.集合),数据都是保存在内存中,属于瞬时状态数据 文件(File)存储数据,保存在硬盘上,属于持久化状态存 ...
最新文章
- java随机产生若干个偶数完成求和_java - 创建随机生成器以生成并计算奇数对偶数 - 堆栈内存溢出...
- RSA加密和DH加密
- Java数据类型转换(自动转换和强制转换)
- OpenCASCADE:拓扑 API之特征
- Express + mongoDB + nodejs
- MySQL存储树形数据优化技笔记
- Android自定义控件学习(三)----- 自定义视图组件
- 深度学习2.0-6.tensorflow的高阶操作之合并与分割
- Java 字符串使用之性能优化实践
- 如何重新编辑排版错乱的PDF文件
- [中文语音识别后文本加标点] 维基百科数据下载和解析(xml-txt)
- 计算机毕业设计Java宠物收养管理系统(源码+系统+mysql数据库+lw文档)
- 【批处理DOS-CMD命令-汇总和小结】-注册表编辑命令reg,如何用cmd命令打开注册表编辑器regedit
- android是乐视手机刷机,乐视MAX(乐视 X900+)一键刷机教程,轻松刷机
- 内网自建yum源和apt源(含各信创系统)
- SIGIR2020推荐系统论文解析:Recommendation for New Users and New Items
- 一文了解EpiQuik CUT&RUN m6A RNA富集(MeRIP)试剂盒
- cst matlab,CST-MATLAB-API-1.0.0 Linking matlab and cst - 下载 - 搜珍网
- Opencv3.0--第二篇【双阈值二值化图像】
- 操作系统笔记(王道)(持续更新中)
热门文章
- 计算机画画小游戏,这个突然爆火的小游戏,简直是你朋友圈画画水平的照妖镜!...
- 以前看flex 性能优化一文后记录
- KubeEdge:下一代云原生边缘设备管理标准DMI的设计与实现
- Python if else条件语句
- 行为识别笔记:C3D network-用于视频特征提取的3维卷积网络
- mysql的第一次作业_数据库入门第一次作业 - osc_2frf70qv的个人空间 - OSCHINA - 中文开源技术交流社区...
- 通过git上传代码到代码库步骤(亲测有效)
- 〖Python APP 自动化测试实战篇⑦〗- 实战 - appium 定位手机元素的超级方法 - uiautomator
- electron-layui搭建桌面应用
- Java实现算法应用--百钱买百鸡 主要内容:公鸡5元一只,母鸡3元一只,小鸡一元3只。 * 问100块钱怎样可以买100只鸡?