sspanel按月结算,修改go版代码【mysql api】

w2180z · · 930 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

开头感谢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             int
	port           int
	passwd         string
	method         string
	enable         int
	transferEnable int
	u              int
	d              int
}

需要在里面加上我们新加的三个字段(因为我不知道go语言如何获取时间戳,所以直接从sql读了,有一个好处是如果配置多个服务器,可以保持时间同步,不受本地时间 )

	end_time        int
	//从mysql读取服务器当前时间戳
	now_time        int
	package_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.User
		return 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



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:w2180z

查看原文:sspanel按月结算,修改go版代码【mysql api】

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

930 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传