sspanel按月结算,修改go版代码【mysql api】
来源:互联网 发布:sql随机生成6位数字 编辑:程序博客网 时间:2024/05/21 10:48
开头感谢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}
有疑问的可以加群讨论,群号256950656
0 0
- sspanel按月结算,修改go版代码【mysql api】
- sspanel按月结算,修改go版代码【web api】
- sspanel进阶——修改属于自己的sspanel站点(一)
- sspanel进阶——修改属于自己的sspanel站点(二)
- 应用内结算 API
- 修改捕鱼结算
- mysql按月统计数据
- 实现mysql按月统计
- MySQL-按月分组查询
- mysql 按日结算
- MySQL日志表按月分区
- MySQL中如何按月统计数据
- 【MySQL】MySQL API 示例代码
- mysql 按月,周 查询,mysql日期函数
- Go实战--golang中使用echo和MySQL搭建api(labstack/echo、go-sql-driver/mysql)
- 按月份时间循环的代码
- MySQL的经典用法(二)----按月统计数据
- MySql按周,按月,按日分组统计数据
- Fragment的切换
- RasSetEapUserData
- VirtualApp出现无法编译问题整理
- Implement Stack using Queues
- 欢迎使用CSDN-markdown编辑器
- sspanel按月结算,修改go版代码【mysql api】
- Small Game
- Android截屏(fb0)
- 支持向量分类机---乳腺癌的诊断
- CSU - 1161 Sums
- NOIP2012 提高组 复赛 day1 game
- JVM——自定义类加载器
- 在Centos搭建Django测试环境
- 移动WEB开发框架