| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- package Service
- import (
- "errors"
- "forward-core/Models"
- "forward-core/Utils"
- "math"
- "time"
- "github.com/astaxie/beego/logs"
- )
- type SysDataService struct {
- }
- func (_self *SysDataService) GetSysUserById(userId int) *Models.SysUser {
- entity := new(Models.SysUser)
- qs := OrmerS.QueryTable(entity)
- qs = qs.Filter("Id", userId)
- err := qs.One(entity)
- if err != nil {
- logs.Error("GetSysUserById ", err)
- return nil
- }
- return entity
- }
- func (_self *SysDataService) GetSysUserByName(userName string) *Models.SysUser {
- entity := new(Models.SysUser)
- qs := OrmerS.QueryTable(entity)
- qs = qs.Filter("UserName", userName)
- err := qs.One(entity)
- if err != nil {
- logs.Error("GetSysUserByName ", err)
- return nil
- }
- return entity
- }
- func (_self *SysDataService) ChangeUserPwd(id int, password string) error {
- pwd := Utils.GetMd5(password)
- res, err := OrmerS.Raw("update t_sys_user SET passWord = ? where id = ?",
- pwd, id).Exec()
- if err == nil {
- num, _ := res.RowsAffected()
- logs.Debug("ChangeUserPwd", num)
- } else {
- logs.Error("ChangeUserPwd", err)
- }
- return err
- }
- func (_self *SysDataService) UpdateSysUser(entity *Models.SysUser) error {
- _, err := OrmerS.Update(entity)
- return err
- }
- func (_self *SysDataService) DelSysUsers(ids []int) error {
- //批量删除
- del_num, err := OrmerS.QueryTable(new(Models.SysUser)).Filter("Id__in", ids).Delete()
- if err != nil {
- logs.Error("DelSysUsers err:", err)
- return err
- } else {
- logs.Debug("DelSysUsers rows:", del_num)
- }
- return nil
- }
- func (_self *SysDataService) GetPortForwardById(id int) *Models.PortForward {
- entity := new(Models.PortForward)
- qs := OrmerS.QueryTable(entity)
- qs = qs.Filter("Id", id)
- err := qs.One(entity)
- if err != nil {
- logs.Error("GetPortForwardById ", err)
- return nil
- }
- return entity
- }
- func (_self *SysDataService) ChkPortForwardByApi(sourcePort, protocol, targetPort string) *Models.PortForward {
- sourceArray := Utils.Split(sourcePort, ":")
- targetArray := Utils.Split(targetPort, ":")
- addr := sourceArray[0]
- port := Utils.ToInt(sourceArray[1])
- toAddr := targetArray[0]
- toPort := Utils.ToInt(targetArray[1])
- return _self.GetPortForwardByApi(addr, port, protocol, toAddr, toPort)
- }
- func (_self *SysDataService) GetPortForwardByApi(addr string, port int, protocol string, targetAddr string, targetPort int) *Models.PortForward {
- entity := new(Models.PortForward)
- qs := OrmerS.QueryTable(entity)
- qs = qs.Filter("Addr", addr)
- qs = qs.Filter("Port", port)
- qs = qs.Filter("Protocol", protocol)
- qs = qs.Filter("TargetAddr", targetAddr)
- qs = qs.Filter("TargetPort", targetPort)
- err := qs.One(entity)
- if err != nil {
- logs.Error("GetPortForwardByApi ", err)
- return nil
- }
- return entity
- }
- func (_self *SysDataService) SavePortForwardByApi(sourcePort, protocol, targetPort string) (*Models.PortForward, error) {
- if Utils.IsEmpty(sourcePort) {
- return nil, errors.New("本地监听端口信息不能为空")
- }
- if Utils.IsEmpty(targetPort) {
- return nil, errors.New("目标端口信息不能为空")
- }
- sourceArray := Utils.Split(sourcePort, ":")
- targetArray := Utils.Split(targetPort, ":")
- entity := &Models.PortForward{}
- entity.Name = "API_Forward_" + sourcePort
- entity.Addr = sourceArray[0]
- entity.Port = Utils.ToInt(sourceArray[1])
- entity.Protocol = protocol
- entity.TargetAddr = targetArray[0]
- entity.TargetPort = Utils.ToInt(targetArray[1])
- entity.CreateTime = time.Now()
- _, err := OrmerS.Insert(entity)
- return entity, err
- }
- func (_self *SysDataService) GetAllPortForwardList(status int) []*Models.PortForward {
- var entites []*Models.PortForward
- entity := new(Models.PortForward)
- qs := OrmerS.QueryTable(entity)
- if status > -1 {
- qs = qs.Filter("Status", status)
- }
- num, err := qs.All(&entites)
- if err != nil {
- logs.Error("GetAllPortForwardList ", err)
- } else {
- logs.Debug("GetAllPortForwardList rows ", num)
- }
- return entites
- }
- func (_self *SysDataService) GetPortForwardList(query *Models.PortForward, pageIndex int64, pageSize int64) Models.PageData {
- var entites []*Models.PortForward
- entity := new(Models.PortForward)
- qs := OrmerS.QueryTable(entity)
- if query.Port > 0 {
- qs = qs.Filter("Port", query.Port)
- }
- if query.TargetPort > 0 {
- qs = qs.Filter("TargetPort", query.TargetPort)
- }
- if query.FType > -1 {
- qs = qs.Filter("FType", query.FType)
- }
- totals, _ := qs.Count()
- pages := math.Ceil(float64(totals) / float64(pageSize))
- if pageIndex <= 0 {
- pageIndex = 1
- }
- offset := pageIndex - 1
- num, err := qs.Limit(pageSize, pageSize*offset).OrderBy("-Id").All(&entites)
- if err != nil {
- logs.Error("GetPortForwardList ", err)
- } else {
- logs.Debug("GetPortForwardList rows ", num)
- }
- return Models.PageData{PIndex: pageIndex, PSize: pageSize, TotalRows: totals, Pages: int64(pages), Data: entites}
- }
- func (_self *SysDataService) SavePortForward(entity *Models.PortForward) error {
- if entity.Id > 0 {
- update := &Models.PortForward{}
- qs := OrmerS.QueryTable(new(Models.PortForward))
- qs = qs.Filter("Id", entity.Id)
- err := qs.One(update)
- if err != nil {
- //如果没查到数据,会抛出 no row found
- return err
- }
- update.Name = entity.Name
- update.Addr = entity.Addr
- update.Port = entity.Port
- update.Protocol = entity.Protocol
- update.TargetAddr = entity.TargetAddr
- update.TargetPort = entity.TargetPort
- update.Others = entity.Others
- update.FType = entity.FType
- update.Status = entity.Status
- _, err1 := OrmerS.Update(update)
- return err1
- } else {
- entity.CreateTime = time.Now()
- res, err := OrmerS.Raw("INSERT INTO t_port_forward(name, status, addr, port, protocol, targetAddr, targetPort, createTime, others, fType) values(?,?,?,?,?,?,?,?,?,?)",
- entity.Name, entity.Status, entity.Addr, entity.Port, entity.Protocol, entity.TargetAddr, entity.TargetPort, entity.CreateTime, entity.Others, entity.FType).Exec()
- if err == nil {
- num, _ := res.RowsAffected()
- logs.Debug("AddPortForward", num)
- } else {
- logs.Error("AddPortForward", err)
- }
- return err
- }
- }
- func (_self *SysDataService) DelPortForwards(ids []int) error {
- //sqlite3在debug模式中,每次操作后会卡住,release环境中没有问题
- //批量删除
- del_num, err := OrmerS.QueryTable(new(Models.PortForward)).Filter("Id__in", ids).Delete()
- if err != nil {
- logs.Error("DelPortForwards err:", err)
- return err
- } else {
- logs.Debug("DelPortForwards rows:", del_num)
- }
- return nil
- }
- func (_self *SysDataService) ToForwardConfig(entity *Models.PortForward) *Models.ForwardConfig {
- config := new(Models.ForwardConfig)
- config.RuleId = entity.Id
- config.Name = entity.Name
- config.Protocol = entity.Protocol
- config.SrcAddr = entity.Addr
- config.SrcPort = entity.Port
- config.DestAddr = entity.TargetAddr
- config.DestPort = entity.TargetPort
- config.Status = entity.Status
- return config
- }
- func (_self *SysDataService) GetForwardJob(entity *Models.PortForward) *ForWardJob {
- return ForWardServ.GetForwardJob(_self.ToForwardConfig(entity))
- }
|