This commit is contained in:
arraykeys
2019-08-08 17:13:34 +08:00
parent e8e5966a8c
commit f0bf2d5fec
2885 changed files with 1195993 additions and 12 deletions
+116
View File
@@ -0,0 +1,116 @@
package models
import (
"anytunnel/at-admin/app/utils"
"github.com/snail007/go-activerecord/mysql"
)
type Area struct {
}
func (p *Area) GetAreaByAreaId(areaId string) (area map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("area").Where(map[string]interface{}{
"area_id": areaId,
}))
if err != nil {
return
}
area = rs.Row()
return
}
func (p *Area) Delete(areaId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Delete("area", map[string]interface{}{
"area_id": areaId,
}))
if err != nil {
return
}
return
}
func (p *Area) Insert(area map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("area", area))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Area) Update(areaId string, area map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("area", area, map[string]interface{}{
"area_id": areaId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据搜索分页获取Area
func (area *Area) GetAreasByIDAndLimit(column, id string, limit int, number int) (areas []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("area").Where(map[string]interface{}{
column: id,
}).OrderBy("area_id", "desc").Limit(limit, number))
if err != nil {
return
}
areas = rs.Rows()
return
}
//分页获取Area
func (area *Area) GetAreasByLimit(limit int, number int) (areas []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("area").
OrderBy("area_id", "desc").
Limit(limit, number))
if err != nil {
return
}
areas = rs.Rows()
return
}
func (area *Area) CountAreas() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From("area"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (area *Area) CountAreasByID(column, id string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("area").
Where(map[string]interface{}{
column: id,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+201
View File
@@ -0,0 +1,201 @@
package models
import (
"anytunnel/at-admin/app/utils"
common "anytunnel/at-common"
"fmt"
"github.com/astaxie/beego"
"github.com/snail007/go-activerecord/mysql"
)
type Client struct {
}
func (p *Client) GetClientByClientId(clientId string) (client map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("client").Where(map[string]interface{}{
"client_id": clientId,
}))
if err != nil {
return
}
client = rs.Row()
return
}
func (p *Client) HasTunnelRef(clientId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
"client_id": clientId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Client) Reset(clientId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("client", map[string]interface{}{
"token": utils.NewMisc().RandString(32),
}, map[string]interface{}{
"client_id": clientId,
}))
if err != nil {
return
}
return
}
func (p *Client) Delete(clientId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("client", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"client_id": clientId,
}))
if err != nil {
return
}
return
}
func (p *Client) Insert(client map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("client", client))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Client) Update(clientId string, client map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("client", client, map[string]interface{}{
"client_id": clientId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//获取所有的Client
func (this *Client) GetAllClients() (clients []map[string]string, err error) {
db := DB
res, err := db.Query(db.AR().From("client").Where(map[string]interface{}{
"is_delete": 0,
}).OrderBy("client_id", "ASC"))
if err != nil {
return
}
clients = res.Rows()
return
}
//根据user_id分页获取Client
func (client *Client) GetClientsByUserIDAndLimit(userID string, limit int, number int) (clients []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("client").Where(map[string]interface{}{
"user_id": userID,
"is_delete": 0,
}).OrderBy("client_id", "desc").Limit(limit, number))
if err != nil {
return
}
clients = rs.Rows()
return
}
//分页获取Client
func (client *Client) GetClientsByLimit(limit int, number int) (clients []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("client").Where(map[string]interface{}{
"is_delete": 0,
"user_id <>": 0,
}).OrderBy("client_id", "desc").Limit(limit, number))
if err != nil {
return
}
clients = rs.Rows()
return
}
func (client *Client) CountClients() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").Where(map[string]interface{}{
"is_delete": 0,
"user_id <>": 0,
}).From("client"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (client *Client) CountClientsByUserID(userID string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("client").
Where(map[string]interface{}{
"user_id": userID,
"is_delete": 0,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (p *Client) Offline(serverId string) (err error) {
db := DB
rs, err := db.Query(db.AR().From("client").Where(map[string]interface{}{
"client_id": serverId,
"is_delete": 0,
}))
if err != nil {
return
}
if rs.Len() == 0 {
return
}
token := rs.Value("token")
rs, err = db.Query(db.AR().From("online").Where(map[string]interface{}{
"token": token,
"type": "client",
}))
if err != nil {
return
}
if rs.Len() == 0 {
return
}
clusterIP := rs.Value("ip")
url := fmt.Sprintf("https://%s:%s/client/offline/%s", clusterIP, beego.AppConfig.String("cluster.api.port"), token)
body, code, err := common.HttpGet(url)
if err != nil {
return
}
if code != 200 {
err = fmt.Errorf("access client offline url %s fail,code:%d ,body:%s", url, code, body)
}
return
}
+119
View File
@@ -0,0 +1,119 @@
package models
import (
"strconv"
humanize "github.com/dustin/go-humanize"
"github.com/snail007/go-activerecord/mysql"
)
type Cluster struct {
}
func (p *Cluster) GetClusterByClusterId(clusterId string) (cluster map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("cluster").Where(map[string]interface{}{
"cluster_id": clusterId,
"is_delete": 0,
}))
if err != nil {
return
}
cluster = rs.Row()
return
}
func (p *Cluster) HasTunnel(clusterId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
"cluster_id": clusterId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Cluster) Delete(clusterId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("cluster", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"cluster_id": clusterId,
}))
if err != nil {
return
}
return
}
func (p *Cluster) Insert(cluster map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("cluster", cluster))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Cluster) Update(clusterId string, cluster map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("cluster", cluster, map[string]interface{}{
"cluster_id": clusterId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//禁用
func (p *Cluster) Forbidden(clusterId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("cluster", map[string]interface{}{
"is_disable": 1,
}, map[string]interface{}{
"cluster_id": clusterId,
}))
if err != nil {
return
}
return
}
//恢复
func (p *Cluster) Review(clusterId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("cluster", map[string]interface{}{
"is_disable": 0,
}, map[string]interface{}{
"cluster_id": clusterId,
}))
if err != nil {
return
}
return
}
//获取所有的
func (this *Cluster) GetAllClusters() (clusters []map[string]string, err error) {
db := DB
res, err := db.Query(db.AR().From("cluster").Where(map[string]interface{}{
"is_delete": 0,
}).OrderBy("name", "ASC"))
if err != nil {
return
}
clusters = res.Rows()
for k, v := range clusters {
_bandwidth, _ := strconv.ParseUint(v["bandwidth"], 10, 64)
clusters[k]["bandwidth_human"] = humanize.Bytes(_bandwidth)
}
return
}
+181
View File
@@ -0,0 +1,181 @@
package models
import (
"anytunnel/at-admin/app/utils"
common "anytunnel/at-common"
"fmt"
"github.com/astaxie/beego"
"github.com/snail007/go-activerecord/mysql"
)
type Conn struct {
}
func (p *Conn) GetConnByConnId(connId string) (conn map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("conn").Where(map[string]interface{}{
"conn_id": connId,
}))
if err != nil {
return
}
conn = rs.Row()
return
}
func (p *Conn) HasTunnelRef(connId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
"conn_id": connId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Conn) Reset(connId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("conn", map[string]interface{}{
"token": utils.NewMisc().RandString(32),
}, map[string]interface{}{
"conn_id": connId,
}))
if err != nil {
return
}
return
}
func (p *Conn) Offline(connId string) (err error) {
db := DB
rs, err := db.Query(db.AR().From("conn").Where(map[string]interface{}{
"conn_id": connId,
"is_delete": 0,
}))
if err != nil {
return
}
if rs.Len() == 0 {
return
}
token := rs.Value("token")
rs, err = db.Query(db.AR().From("online").Where(map[string]interface{}{
"token": token,
"type": "conn",
}))
if err != nil {
return
}
if rs.Len() == 0 {
return
}
clusterIP := rs.Value("ip")
url := fmt.Sprintf("https://%s:%s/conn/offline/%s", clusterIP, beego.AppConfig.String("cluster.api.port"), token)
body, code, err := common.HttpGet(url)
if err != nil {
return
}
if code != 200 {
err = fmt.Errorf("access conn offline url %s fail,code:%d ,body:%s", url, code, body)
}
return
}
func (p *Conn) Delete(connId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("conn", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"conn_id": connId,
}))
if err != nil {
return
}
return
}
func (p *Conn) Insert(conn map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("conn", conn))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Conn) Update(connId string, conn map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("conn", conn, map[string]interface{}{
"conn_id": connId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据user_id分页获取Conn
func (conn *Conn) GetConnsByUserIDAndLimit(col, keyword, orderby string, limit int, number int) (conns []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("conn").Where(map[string]interface{}{
col: keyword,
}).OrderBy(orderby, "desc").Limit(limit, number))
if err != nil {
return
}
conns = rs.Rows()
return
}
//分页获取Conn
func (conn *Conn) GetConnsByLimit(limit int, number int, orderby string) (conns []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("conn").
OrderBy(orderby, "desc").
Limit(limit, number))
if err != nil {
return
}
conns = rs.Rows()
return
}
func (conn *Conn) CountConns() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From("conn"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (conn *Conn) CountConnsByUserID(col, keyword string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("conn").
Where(map[string]interface{}{
col: keyword,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+15
View File
@@ -0,0 +1,15 @@
package models
import (
"anytunnel/at-admin/app/models"
"github.com/snail007/go-activerecord/mysql"
)
var G *mysql.DBGroup
var DB *mysql.DB
func init() {
G = models.G
DB = G.DB("base")
}
+116
View File
@@ -0,0 +1,116 @@
package models
import (
"anytunnel/at-admin/app/utils"
"github.com/snail007/go-activerecord/mysql"
)
type IpList struct {
}
func (p *IpList) GetIpListByIpListId(ip_listId string) (ip_list map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("ip_list").Where(map[string]interface{}{
"ip_list_id": ip_listId,
}))
if err != nil {
return
}
ip_list = rs.Row()
return
}
func (p *IpList) Delete(ip_listId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Delete("ip_list", map[string]interface{}{
"ip_list_id": ip_listId,
}))
if err != nil {
return
}
return
}
func (p *IpList) Insert(ip_list map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("ip_list", ip_list))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *IpList) Update(ip_listId string, ip_list map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("ip_list", ip_list, map[string]interface{}{
"ip_list_id": ip_listId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据搜索分页获取IpList
func (ip_list *IpList) GetIpListsByIDAndLimit(column, id string, limit int, number int) (ip_lists []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("ip_list").Where(map[string]interface{}{
column: id,
}).OrderBy("ip_list_id", "desc").Limit(limit, number))
if err != nil {
return
}
ip_lists = rs.Rows()
return
}
//分页获取IpList
func (ip_list *IpList) GetIpListsByLimit(limit int, number int) (ip_lists []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("ip_list").
OrderBy("ip_list_id", "desc").
Limit(limit, number))
if err != nil {
return
}
ip_lists = rs.Rows()
return
}
func (ip_list *IpList) CountIpLists() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From("ip_list"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (ip_list *IpList) CountIpListsByID(column, id string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("ip_list").
Where(map[string]interface{}{
column: id,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+126
View File
@@ -0,0 +1,126 @@
package models
import (
"anytunnel/at-admin/app/utils"
"github.com/snail007/go-activerecord/mysql"
)
type Online struct {
}
func (p *Online) GetOnlineByOnlineId(onlineId string) (online map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("online").Where(map[string]interface{}{
"online_id": onlineId,
}))
if err != nil {
return
}
online = rs.Row()
return
}
func (p *Online) Delete(onlineId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("online", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"online_id": onlineId,
}))
if err != nil {
return
}
return
}
func (p *Online) Insert(online map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("online", online))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Online) Update(onlineId string, online map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("online", online, map[string]interface{}{
"online_id": onlineId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据搜索分页获取Online
func (online *Online) GetOnlinesByIDAndLimit(cs, column, id string, limit int, number int) (onlines []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("online").Where(map[string]interface{}{
column: id,
"cs_type": cs,
}).OrderBy("online_id", "desc").Limit(limit, number))
if err != nil {
return
}
onlines = rs.Rows()
return
}
//分页获取Online
func (online *Online) GetOnlinesByLimit(cs string, limit int, number int) (onlines []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("online").Where(map[string]interface{}{
"cs_type": cs,
}).
OrderBy("online_id", "desc").
Limit(limit, number))
if err != nil {
return
}
onlines = rs.Rows()
return
}
func (online *Online) CountOnlines(cs string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").Where(map[string]interface{}{
"cs_type": cs,
}).From("online"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (online *Online) CountOnlinesByID(cs, column, id string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("online").
Where(map[string]interface{}{
column: id,
"cs_type": cs,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+159
View File
@@ -0,0 +1,159 @@
package models
import (
"anytunnel/at-admin/app/utils"
"strconv"
"time"
"github.com/dustin/go-humanize"
"github.com/snail007/go-activerecord/mysql"
)
type PackageModel struct {
}
func (p *PackageModel) GetPackageByPackageId(packageId string) (PackageModel map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("package").Where(map[string]interface{}{
"package_id": packageId,
}))
if err != nil {
return
}
PackageModel = rs.Row()
return
}
func (p *PackageModel) Delete(packageId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("package", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"package_id": packageId,
}))
if err != nil {
return
}
return
}
func (p *PackageModel) Insert(_package map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("package", _package))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *PackageModel) Update(packageId string, _package map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("package", _package, map[string]interface{}{
"package_id": packageId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据搜索分页获取Package
func (p *PackageModel) GetPackagesByIDAndLimit(column, id string, limit int, number int) (packages []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("package").Where(map[string]interface{}{
column: id,
}).OrderBy("end_time", "asc").Limit(limit, number))
if err != nil {
return
}
packages = rs.Rows()
for k, v := range packages {
_total, _ := strconv.ParseUint(v["bytes_total"], 10, 64)
_totalLeft, _ := strconv.ParseUint(v["bytes_left"], 10, 64)
_totalUse := _total - _totalLeft
packages[k]["bytes_total_human"] = humanize.Bytes(_total)
packages[k]["bytes_left_human"] = humanize.Bytes(_totalLeft)
packages[k]["bytes_use_human"] = humanize.Bytes(_totalUse)
packages[k]["status"] = `<span class="label label-success">有效</span>`
endtime, _ := strconv.Atoi(v["end_time"])
starttime, _ := strconv.Atoi(v["start_time"])
if int64(endtime) <= time.Now().Unix() {
packages[k]["status"] = `<span class="label label-danger">已过期</span>`
}
if int64(starttime) > time.Now().Unix() {
packages[k]["status"] = `<span class="label label-info">未生效</span>`
}
if _totalLeft == 0 {
packages[k]["status"] = `<span class="label label-warning">已用完</span>`
}
}
return
}
//分页获取Package
func (p *PackageModel) GetPackagesByLimit(limit int, number int) (packages []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("package").OrderBy("package_id", "desc").Limit(limit, number))
if err != nil {
return
}
packages = rs.Rows()
for k, v := range packages {
_total, _ := strconv.ParseUint(v["bytes_total"], 10, 64)
_totalLeft, _ := strconv.ParseUint(v["bytes_left"], 10, 64)
_totalUse := _total - _totalLeft
packages[k]["bytes_total_human"] = humanize.Bytes(_total)
packages[k]["bytes_left_human"] = humanize.Bytes(_totalLeft)
packages[k]["bytes_use_human"] = humanize.Bytes(_totalUse)
packages[k]["status"] = `<span class="label label-success">有效</span>`
endtime, _ := strconv.Atoi(v["end_time"])
starttime, _ := strconv.Atoi(v["start_time"])
if int64(endtime) <= time.Now().Unix() {
packages[k]["status"] = `<span class="label label-danger">已过期</span>`
}
if int64(starttime) > time.Now().Unix() {
packages[k]["status"] = `<span class="label label-info">未生效</span>`
}
if _totalLeft == 0 {
packages[k]["status"] = `<span class="label label-warning">已用完</span>`
}
}
return
}
func (p *PackageModel) CountPackages() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From("package"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (p *PackageModel) CountPackagesByID(column, id string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("package").
Where(map[string]interface{}{
column: id,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+152
View File
@@ -0,0 +1,152 @@
package models
import (
"github.com/snail007/go-activerecord/mysql"
)
type Region struct {
}
func (p *Region) GetRegionByRegionId(regionId string) (region map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("region").Where(map[string]interface{}{
"region_id": regionId,
"is_delete": 0,
}))
if err != nil {
return
}
region = rs.Row()
return
}
func (p *Region) HasRole(regionId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("role_region").Where(map[string]interface{}{
"region_id": regionId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Region) HasSubRegion(regionId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("region").Where(map[string]interface{}{
"parent_id": regionId,
"is_delete": 0,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Region) HasCluster(regionId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("region_cluster").Where(map[string]interface{}{
"region_id": regionId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Region) Delete(regionId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("region", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"region_id": regionId,
}))
if err != nil {
return
}
return
}
func (p *Region) Insert(region map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("region", region))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Region) Update(regionId string, region map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("region", region, map[string]interface{}{
"region_id": regionId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//获取所有的Region
func (this *Region) GetAllRegions() (regions []map[string]string, err error) {
db := DB
res, err := db.Query(db.AR().From("region").Where(map[string]interface{}{
"is_delete": 0,
}).OrderBy("parent_id", "ASC").OrderBy("region_id", "ASC"))
if err != nil {
return
}
regions = res.Rows()
return
}
//获取所有顶级Region
func (this *Region) GetTopRegions() (regions map[string]map[string]string, err error) {
db := DB
res, err := db.Query(db.AR().From("region").Where(map[string]interface{}{
"is_delete": 0,
"parent_id": 0,
}).OrderBy("region_id", "ASC"))
if err != nil {
return
}
regions = res.MapRows("region_id")
return
}
//获取所有二级Region
func (this *Region) GetSubRegions() (regions []map[string]string, err error) {
db := DB
res, err := db.Query(db.AR().From("region").Where(map[string]interface{}{
"is_delete": 0,
}).OrderBy("parent_id", "ASC"))
if err != nil {
return
}
regionsAll := res.Rows()
for _, r := range regionsAll {
if r["parent_id"] != "0" {
r["parent"] = ""
for _, r1 := range regionsAll {
if r["parent_id"] == r1["region_id"] {
r["parent"] = r1["name"]
break
}
}
regions = append(regions, r)
}
}
return
}
+150
View File
@@ -0,0 +1,150 @@
package models
import (
"strconv"
"strings"
"time"
humanize "github.com/dustin/go-humanize"
"github.com/snail007/go-activerecord/mysql"
)
type Role struct {
}
func (p *Role) GetRoleByRoleId(roleId string) (role map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("role").Where(map[string]interface{}{
"role_id": roleId,
"is_delete": 0,
}))
if err != nil {
return
}
role = rs.Row()
return
}
func (p *Role) HasUser(roleId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user_role").Where(map[string]interface{}{
"role_id": roleId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Role) Delete(roleId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("role", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"role_id": roleId,
}))
if err != nil {
return
}
return
}
func (p *Role) Insert(role map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("role", role))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Role) Update(roleId string, role map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("role", role, map[string]interface{}{
"role_id": roleId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//获取所有的角色
func (this *Role) GetAllRoles() (roles []map[string]string, err error) {
db := DB
res, err := db.Query(db.AR().From("role").Where(map[string]interface{}{
"is_delete": 0,
}).OrderBy("role_id", "ASC"))
if err != nil {
return
}
roles = res.Rows()
for k, v := range roles {
c, _ := strconv.ParseUint(v["bandwidth"], 10, 64)
v["bandwidth_human"] = humanize.Bytes(c)
m := strings.Split(v["tunnel_mode"], ",")
mmap := map[string]string{"0": "普通", "1": "高级", "2": "特殊"}
_m := []string{}
for _, val := range m {
_m = append(_m, mmap[val])
}
v["tunnel_mode_human"] = strings.Join(_m, ",")
roles[k] = v
}
return
}
// 根据用户名查找所有的角色
func (this *Role) GetRolesByUserId(userId string) (roles []map[string]string, err error) {
userRoleModel := UserRole{}
userRoles, err := userRoleModel.GetUserRolesByUserId(userId)
if err != nil {
return
}
for _, userRole := range userRoles {
role, _ := this.GetRoleByRoleId(userRole["role_id"])
roles = append(roles, role)
}
return
}
func (this *Role) SetRegions(roleId string, region_ids []string) (err error) {
db := DB
_, err = db.Exec(db.AR().Delete("role_region", map[string]interface{}{
"role_id": roleId,
}))
if err != nil {
return
}
data := []map[string]interface{}{}
for _, v := range region_ids {
data = append(data, map[string]interface{}{
"role_id": roleId,
"region_id": v,
"create_time": time.Now().Unix(),
})
}
if len(data) > 0 {
_, err = db.Exec(db.AR().InsertBatch("role_region", data))
}
return
}
func (this *Role) GetRoleRegionIds(roleId string) (ids []string, err error) {
db := DB
rs, err := db.Query(db.AR().From("role_region").Where(map[string]interface{}{
"role_id": roleId,
}))
if err != nil {
return
}
ids = rs.Values("region_id")
return
}
+189
View File
@@ -0,0 +1,189 @@
package models
import (
"anytunnel/at-admin/app/utils"
common "anytunnel/at-common"
"fmt"
"github.com/astaxie/beego"
"github.com/snail007/go-activerecord/mysql"
)
type Server struct {
}
func (p *Server) GetServerByServerId(serverId string) (server map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("server").Where(map[string]interface{}{
"server_id": serverId,
}))
if err != nil {
return
}
server = rs.Row()
return
}
func (p *Server) HasTunnelRef(serverId string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
"server_id": serverId,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *Server) Reset(serverId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("server", map[string]interface{}{
"token": utils.NewMisc().RandString(32),
}, map[string]interface{}{
"server_id": serverId,
}))
if err != nil {
return
}
return
}
func (p *Server) Offline(serverId string) (err error) {
db := DB
rs, err := db.Query(db.AR().From("server").Where(map[string]interface{}{
"server_id": serverId,
"is_delete": 0,
}))
if err != nil {
return
}
if rs.Len() == 0 {
return
}
token := rs.Value("token")
rs, err = db.Query(db.AR().From("online").Where(map[string]interface{}{
"token": token,
"type": "server",
}))
if err != nil {
return
}
if rs.Len() == 0 {
return
}
clusterIP := rs.Value("ip")
url := fmt.Sprintf("https://%s:%s/server/offline/%s", clusterIP, beego.AppConfig.String("cluster.api.port"), token)
body, code, err := common.HttpGet(url)
if err != nil {
return
}
if code != 200 {
err = fmt.Errorf("access server offline url %s fail,code:%d ,body:%s", url, code, body)
}
return
}
func (p *Server) Delete(serverId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("server", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"server_id": serverId,
}))
if err != nil {
return
}
return
}
func (p *Server) Insert(server map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("server", server))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Server) Update(serverId string, server map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("server", server, map[string]interface{}{
"server_id": serverId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据user_id分页获取Server
func (server *Server) GetServersByUserIDAndLimit(userID string, limit int, number int) (servers []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("server").Where(map[string]interface{}{
"user_id": userID,
"is_delete": 0,
}).OrderBy("server_id", "desc").Limit(limit, number))
if err != nil {
return
}
servers = rs.Rows()
return
}
//分页获取Server
func (server *Server) GetServersByLimit(limit int, number int) (servers []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("server").Where(map[string]interface{}{
"is_delete": 0,
"user_id <>": 0,
}).
OrderBy("server_id", "desc").
Limit(limit, number))
if err != nil {
return
}
servers = rs.Rows()
return
}
func (server *Server) CountServers() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").Where(map[string]interface{}{
"is_delete": 0,
"user_id <>": 0,
}).From("server"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (server *Server) CountServersByUserID(userID string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("server").
Where(map[string]interface{}{
"user_id": userID,
"is_delete": 0,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+124
View File
@@ -0,0 +1,124 @@
package models
import (
"anytunnel/at-admin/app/utils"
"github.com/snail007/go-activerecord/mysql"
)
type Tunnel struct {
}
func (p *Tunnel) GetTunnelByTunnelId(tunnelId string) (tunnel map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
"tunnel_id": tunnelId,
}))
if err != nil {
return
}
tunnel = rs.Row()
return
}
func (p *Tunnel) Delete(tunnelId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("tunnel", map[string]interface{}{
"is_delete": 1,
}, map[string]interface{}{
"tunnel_id": tunnelId,
}))
if err != nil {
return
}
return
}
func (p *Tunnel) Insert(tunnel map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("tunnel", tunnel))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *Tunnel) Update(tunnelId string, tunnel map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("tunnel", tunnel, map[string]interface{}{
"tunnel_id": tunnelId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
//根据搜索分页获取Tunnel
func (tunnel *Tunnel) GetTunnelsByIDAndLimit(column, id string, limit int, number int) (tunnels []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
column: id,
"is_delete": 0,
}).OrderBy("tunnel_id", "desc").Limit(limit, number))
if err != nil {
return
}
tunnels = rs.Rows()
return
}
//分页获取Tunnel
func (tunnel *Tunnel) GetTunnelsByLimit(limit int, number int) (tunnels []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("tunnel").Where(map[string]interface{}{
"is_delete": 0,
}).
OrderBy("tunnel_id", "desc").
Limit(limit, number))
if err != nil {
return
}
tunnels = rs.Rows()
return
}
func (tunnel *Tunnel) CountTunnels() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").Where(map[string]interface{}{
"is_delete": 0,
}).From("tunnel"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (tunnel *Tunnel) CountTunnelsByID(column, id string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("tunnel").
Where(map[string]interface{}{
column: id,
"is_delete": 0,
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
+206
View File
@@ -0,0 +1,206 @@
package models
import (
"anytunnel/at-admin/app/utils"
"crypto/md5"
"encoding/hex"
"errors"
"strings"
"github.com/snail007/go-activerecord/mysql"
)
type User struct {
}
func (p *User) GetUserByUserId(userId string) (user map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
user = rs.Row()
return
}
func (p *User) HasSameUsername(userId, username string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"user_id <>": userId,
"username": username,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *User) HasUsername(username string) (has bool, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"username": username,
}).Limit(0, 1))
if err != nil {
return
}
if rs.Len() > 0 {
has = true
}
return
}
func (p *User) GetUserByName(username string) (user map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"username": username,
}).Limit(0, 1))
if err != nil {
return
}
user = rs.Row()
return
}
//禁用
func (p *User) Forbidden(userId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("user", map[string]interface{}{
"is_forbidden": 1,
}, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
return
}
//恢复
func (p *User) Review(userId string) (err error) {
db := DB
_, err = db.Exec(db.AR().Update("user", map[string]interface{}{
"is_forbidden": 0,
}, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
return
}
func (p *User) Insert(user map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Insert("user", user))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *User) Update(userId string, user map[string]interface{}) (id int64, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Exec(db.AR().Update("user", user, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
id = rs.LastInsertId
return
}
func (p *User) ChangePassword(userId, newpassword, oldpassword string) (err error) {
db := DB
user, err := p.GetUserByUserId(userId)
if user["password"] != p.EncodePassword(oldpassword) {
return errors.New("旧密码错误")
}
if err != nil {
return
}
_, err = db.Exec(db.AR().Update("user", map[string]interface{}{
"password": p.EncodePassword(newpassword),
}, map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
return
}
func (p *User) EncodePassword(password string) (passwordHash string) {
hasher := md5.New()
hasher.Write([]byte(password))
passwordHash = strings.ToLower(hex.EncodeToString(hasher.Sum(nil)))
return
}
//根据关键字分页获取用户
func (user *User) GetUsersByKeywordAndLimit(keyword string, limit int, number int) (users []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Where(map[string]interface{}{
"username LIKE": "%" + keyword + "%",
}).Limit(limit, number))
if err != nil {
return
}
users = rs.Rows()
return
}
//分页获取用户
func (user *User) GetUsersByLimit(limit int, number int) (users []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user").Limit(limit, number))
if err != nil {
return
}
users = rs.Rows()
return
}
func (user *User) CountUsers() (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().Select("count(*) as total").From("user"))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
func (user *User) CountUsersByKeyword(keyword string) (count int, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().
Select("count(*) as total").
From("user").
Where(map[string]interface{}{
"username LIKE": "%" + keyword + "%",
}))
if err != nil {
return
}
count = utils.NewConvert().StringToInt(rs.Value("total"))
return
}
@@ -0,0 +1,62 @@
package models
import (
"time"
"github.com/snail007/go-activerecord/mysql"
)
type UserRole struct {
UserRoleID uint `orm:"pk"` // user_role_id
UserID uint64 // user_id
RoleID uint // role_id
CreateTime uint // create_time
UpdateTime uint // update_time
}
func (this *UserRole) GetUserRolesByUserId(userId string) (userRoles []map[string]string, err error) {
db := DB
var rs *mysql.ResultSet
rs, err = db.Query(db.AR().From("user_role").Where(map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
userRoles = rs.Rows()
return
}
// 插入 user_id 和 role_id 对应关系
func (this *UserRole) Insert(userId string, roleIds []string) (res bool, err error) {
res = false
db := DB
//先删除
_, err = db.Exec(db.AR().Delete("user_role", map[string]interface{}{
"user_id": userId,
}))
if err != nil {
return
}
//添加
userRoles := []map[string]interface{}{}
for _, roleId := range roleIds {
userRole := map[string]interface{}{
"role_id": roleId,
"user_id": userId,
"create_time": time.Now().Unix(),
"update_time": time.Now().Unix(),
}
userRoles = append(userRoles, userRole)
}
_, err = db.Exec(db.AR().InsertBatch("user_role", userRoles))
if err != nil {
return
}
res = true
return
}