提交 bf868b0e 编写于 作者: J Jason

改成XORM 大修改,storm Update不能更新全部字段,false 空字串 0 无法写入,Bug,作者无修改意向

上级 29003d82
......@@ -3,7 +3,7 @@ package dtu
import (
"errors"
"fmt"
"github.com/zgwit/dtu-admin/storage"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/model"
"log"
"net"
......@@ -33,7 +33,7 @@ func NewChannel(channel *model.Channel) *Channel {
}
func (c *Channel) Open() error {
if c.Net.IsServer {
if c.IsServer {
return c.Listen()
} else {
return c.Dial()
......@@ -41,7 +41,7 @@ func (c *Channel) Open() error {
}
func (c *Channel) Dial() error {
conn, err := net.Dial(c.Net.Type, c.Net.Addr)
conn, err := net.Dial(c.Type, c.Addr)
if err != nil {
return err
}
......@@ -55,16 +55,16 @@ func (c *Channel) Dial() error {
func (c *Channel) Listen() error {
var err error
switch c.Net.Type {
switch c.Type {
case "tcp", "tcp4", "tcp6", "unix":
c.listener, err = net.Listen(c.Net.Type, c.Net.Addr)
c.listener, err = net.Listen(c.Type, c.Addr)
if err != nil {
return err
}
go c.accept()
case "udp", "udp4", "udp6", "unixgram":
c.packetConn, err = net.ListenPacket(c.Net.Type, c.Net.Addr)
c.packetConn, err = net.ListenPacket(c.Type, c.Addr)
if err != nil {
return err
......@@ -113,7 +113,7 @@ func (c *Channel) receive(conn net.Conn) {
client.channel = c
//TODO 未开启注册,则直接保存
if !c.Register.Enable {
if !c.RegisterEnable {
c.storeLink(client)
}
......@@ -135,14 +135,19 @@ func (c *Channel) storeLink(conn *Link) {
lnk := model.Link{
Addr: conn.RemoteAddr.String(),
Channel: c.ID,
ChannelId: c.Id,
Created: time.Now(),
}
storage.DB("link").Save(&lnk)
//storage.DB("link").Save(&lnk)
//TODO 保存链接
_, err := db.Engine.Insert(&lnk)
if err != nil {
log.Println(err)
}
//根据ID保存
c.links.Store(c.ID, conn)
c.links.Store(c.Id, conn)
}
func (c *Channel) receivePacket() {
......@@ -166,7 +171,7 @@ func (c *Channel) receivePacket() {
client.channel = c
//根据ID保存
if !c.Register.Enable {
if !c.RegisterEnable {
c.storeLink(client)
}
......
......@@ -5,8 +5,7 @@ import (
"encoding/hex"
"errors"
"fmt"
"github.com/asdine/storm/v3/q"
"github.com/zgwit/dtu-admin/storage"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/model"
"log"
"net"
......@@ -15,7 +14,7 @@ import (
)
type Link struct {
ID int
Id int64
Error string
Serial string
......@@ -33,14 +32,17 @@ type Link struct {
func (l *Link) checkRegister(buf []byte) error {
n := len(buf)
if n < l.channel.Register.Length {
if n < l.channel.RegisterMin {
return fmt.Errorf("register package is too short %d %s", n, string(buf[:n]))
}
serial := string(buf[:n])
if n > l.channel.RegisterMax {
serial = string(buf[:l.channel.RegisterMax])
}
// 正则表达式判断合法性
if l.channel.Register.Regex != "" {
reg := regexp.MustCompile(`^` + l.channel.Register.Regex + `$`)
if l.channel.RegisterRegex != "" {
reg := regexp.MustCompile(`^` + l.channel.RegisterRegex + `$`)
match := reg.MatchString(serial)
if !match {
return fmt.Errorf("register package format error %s", serial)
......@@ -50,35 +52,40 @@ func (l *Link) checkRegister(buf []byte) error {
//配置序列号
l.Serial = serial
//查找数据库同通道,同序列号链接,更新数据库中 serial online
db := storage.DB("link")
//查找数据库同通道,同序列号链接,更新数据库中 addr online
var link model.Link
err := db.Select(q.Eq("Channel", l.channel.ID), q.Eq("Serial", serial)).First(&link)
if err == nil {
//检查工作状态,如果同序号连接还在正常通讯,则关闭当前连接,回复:Duplicate register
has, err := db.Engine.Where("channel_id=?", l.channel.Id).And("serial=?", serial).Get(&link)
if err != nil {
return err
}
if has {
//TODO 检查工作状态,如果同序号连接还在正常通讯,则关闭当前连接,回复:Duplicate register
//更新客户端地址,
err = storage.DB("link").Update(&model.Link{
ID: link.ID,
Addr: l.RemoteAddr.String(),
Online: time.Now(),
})
link.Addr = l.RemoteAddr.String()
link.Online = time.Now()
_, err := db.Engine.ID(link.Id).Cols("addr", "online").Update(link)
if err != nil {
log.Println(err)
return err
}
} else {
link = model.Link{
Serial: serial,
Addr: l.RemoteAddr.String(),
Channel: l.channel.ID,
Online: time.Now(),
Created: time.Now(),
Serial: serial,
Addr: l.RemoteAddr.String(),
ChannelId: l.channel.Id,
Online: time.Now(),
Created: time.Now(),
}
err = storage.DB("link").Save(&link)
_, err := db.Engine.Insert(&link)
if err != nil {
log.Println(err)
return err
}
l.ID = link.ID
l.Id = link.Id
}
//处理剩余内容
if n > l.channel.RegisterMax {
l.onData(buf[l.channel.RegisterMax:])
}
return nil
......@@ -89,31 +96,28 @@ func (l *Link) onData(buf []byte) {
l.lastTime = time.Now()
//检查注册包
if l.channel.Register.Enable && l.Serial == "" {
if l.channel.RegisterEnable && l.Serial == "" {
err := l.checkRegister(buf)
if err != nil {
log.Println(err)
_, _ = l.Send([]byte(err.Error()))
_ = l.Close()
return
}
//TODO 转发剩余内容
return
}
hb := l.channel.HeartBeat
//检查心跳包, 判断上次收发时间,是否已经过去心跳间隔
if hb.Enable && time.Now().Sub(l.lastTime) > time.Second*time.Duration(hb.Interval) {
if l.channel.HeartBeatEnable && time.Now().Sub(l.lastTime) > time.Second*time.Duration(l.channel.HeartBeatInterval) {
var b []byte
if hb.IsHex {
if l.channel.HeartBeatIsHex {
var e error
b, e = hex.DecodeString(hb.Content)
b, e = hex.DecodeString(l.channel.HeartBeatContent)
if e != nil {
log.Println(e)
}
} else {
b = []byte(hb.Content)
b = []byte(l.channel.HeartBeatContent)
}
if bytes.Compare(b, buf) == 0 {
return
......@@ -122,7 +126,6 @@ func (l *Link) onData(buf []byte) {
//TODO 内容转发,暂时直接回复
_, _ = l.Send(buf)
}
func (l *Link) Send(buf []byte) (int, error) {
......
......@@ -2,7 +2,7 @@ package dtu
import (
"errors"
"github.com/zgwit/dtu-admin/storage"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/model"
"log"
"sync"
......@@ -23,13 +23,13 @@ func Channels() []*Channel {
func Recovery() error {
var cs []model.Channel
err := storage.DB("channel").All(&cs)
err := db.Engine.Find(&cs)
if err != nil {
return err
}
for _, c := range cs {
if !c.Net.Disabled {
if !c.Disabled {
_, err = StartChannel(&c)
if err != nil {
log.Println(err)
......@@ -48,7 +48,7 @@ func StartChannel(c *model.Channel) (*Channel, error) {
if err != nil && channel != nil {
channel.Error = err.Error()
}
channels.Store(c.ID, channel)
channels.Store(c.Id, channel)
return channel, err
}
......
......@@ -4,13 +4,13 @@ go 1.13
require (
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/asdine/storm/v3 v3.2.1
github.com/gin-contrib/cors v1.3.1
github.com/gin-contrib/sessions v0.0.3
github.com/gin-gonic/gin v1.6.3
github.com/go-openapi/spec v0.19.9 // indirect
github.com/go-openapi/swag v0.19.9 // indirect
github.com/go-sql-driver/mysql v1.5.0
github.com/golang/snappy v0.0.1 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14
github.com/swaggo/gin-swagger v1.2.0
......@@ -19,6 +19,7 @@ require (
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a // indirect
golang.org/x/tools v0.0.0-20200828161849-5deb26317202 // indirect
google.golang.org/protobuf v1.25.0 // indirect
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
gopkg.in/yaml.v2 v2.3.0
xorm.io/xorm v1.0.4
)
......@@ -3,8 +3,6 @@ gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a h1:lSA0F4e9A2NcQSqGq
gitea.com/xorm/sqlfiddle v0.0.0-20180821085327-62ce714f951a/go.mod h1:EXuID2Zs0pAQhH8yz+DNjUbjppKQzKFAn28TMYPB6IU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/DataDog/zstd v1.4.1 h1:3oxKN3wbHibqx897utPC2LTQU4J+IHWWJO+glkAkpFM=
github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo=
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE=
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc=
......@@ -14,13 +12,9 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863 h1:BRrxwOZBolJN4gIwvZMJY1tzqBvQgpaZiQRuIDD40jM=
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
github.com/asdine/storm/v3 v3.2.1 h1:I5AqhkPK6nBZ/qJXySdI7ot5BlXSZ7qvDY1zAn5ZJac=
github.com/asdine/storm/v3 v3.2.1/go.mod h1:LEpXwGt4pIqrE/XcTvCnZHT5MgZCV6Ub9q7yQzOFWr0=
github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff/go.mod h1:+RTT1BOk5P97fT2CiHkbFQwkK3mjsFAP6zCYV2aXtjw=
github.com/bradfitz/gomemcache v0.0.0-20190329173943-551aad21a668/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
github.com/bradleypeabody/gorilla-sessions-memcache v0.0.0-20181103040241-659414f458e1/go.mod h1:dkChI7Tbtx7H1Tj7TqGSZMOeGpMP5gLHtjroHd4agiI=
......@@ -210,12 +204,8 @@ github.com/urfave/cli v1.20.0 h1:fDqGv3UG/4jbVl/QkFwEdddtEDjh/5Ov6X+0B/3bPaw=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli/v2 v2.1.1 h1:Qt8FeAtxE/vfdrLmR3rxR6JRE0RoVmbXu8+6kZtYU4k=
github.com/urfave/cli/v2 v2.1.1/go.mod h1:SE9GqnLQmjVa0iPEY0f1w3ygNIYcIJ0OKPMoW2caLfQ=
github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI=
github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0=
go.etcd.io/bbolt v1.3.4 h1:hi1bXHMVrlQh6WwxAy+qZCV/SYIlqo+Ushwdpa4tAKg=
go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
......@@ -238,12 +228,10 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191105084925-a882066a44e0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
......@@ -265,7 +253,6 @@ golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y=
......@@ -293,8 +280,6 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IV
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
......
......@@ -2,6 +2,7 @@ package main
import (
"github.com/zgwit/dtu-admin/conf"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/dtu"
"github.com/zgwit/dtu-admin/flag"
"github.com/zgwit/dtu-admin/web"
......@@ -30,8 +31,14 @@ func main() {
//加载配置
conf.Load()
err := db.Open()
if err != nil {
log.Println("数据库错误:", err)
return
}
//恢复之前的链接
err := dtu.Recovery()
err = dtu.Recovery()
if err != nil {
log.Println("恢复链接:", err)
return
......
......@@ -15,6 +15,8 @@ type Channel struct {
RegisterEnable bool `json:"register_enable" xorm:"default 0"`
RegisterRegex string `json:"register_regex" xorm:"varchar(128)"`
RegisterMin int `json:"register_min"`
RegisterMax int `json:"register_max"`
HeartBeatEnable bool `json:"heart_beat_enable" xorm:"default 0"`
HeartBeatInterval int `json:"heart_beat_interval"` //TODO 改为秒
......
......@@ -5,12 +5,12 @@ import (
)
type Link struct {
Id int64 `json:"id"`
Name string `json:"name" xorm:"varchar(64)"`
Serial string `json:"serial" xorm:"varchar(128)"`
Addr string `json:"addr" xorm:"varchar(128) notnull"`
Id int64 `json:"id"`
Name string `json:"name" xorm:"varchar(64)"`
Serial string `json:"serial" xorm:"varchar(128)"`
Addr string `json:"addr" xorm:"varchar(128) notnull"`
ChannelId int64 `json:"channel_id"`
PluginId int64 `json:"plugin_id"` //插件ID
Online time.Time `json:"online"`
Created time.Time `json:"created" xorm:"created"`
Online time.Time `json:"online"`
Created time.Time `json:"created" xorm:"created"`
}
......@@ -3,7 +3,7 @@ package model
import "time"
type User struct {
//ID,自增
//Id,自增
Id int64 `json:"id"`
//用户名
......
......@@ -13,15 +13,15 @@
</div>
<div nz-col nzSpan="20">
<nz-input-group style="display: flex">
<nz-select [(ngModel)]="channel.net.is_server">
<nz-select [(ngModel)]="channel.is_server">
<nz-option nzLabel="服务端" [nzValue]="true"></nz-option>
<nz-option nzLabel="客户端" [nzValue]="false"></nz-option>
</nz-select>
<nz-select [(ngModel)]="channel.net.type" style="width:80px;">
<nz-select [(ngModel)]="channel.type" style="width:80px;">
<nz-option nzLabel="TCP" nzValue="tcp"></nz-option>
<nz-option nzLabel="UDP" nzValue="udp"></nz-option>
</nz-select>
<input nz-input [(ngModel)]="channel.net.addr" placeholder=":1843" style="flex: 1;">
<input nz-input [(ngModel)]="channel.addr" placeholder=":1843" style="flex: 1;">
</nz-input-group>
</div>
</div>
......@@ -31,7 +31,7 @@
禁用
</div>
<div nz-col nzSpan="20">
<nz-switch [(ngModel)]="channel.net.disabled"></nz-switch>
<nz-switch [(ngModel)]="channel.disabled"></nz-switch>
</div>
</div>
......@@ -40,17 +40,38 @@
注册包
</div>
<div nz-col nzSpan="20">
<nz-switch [(ngModel)]="channel.register.enable"></nz-switch>
<nz-switch [(ngModel)]="channel.register_enable"></nz-switch>
</div>
</div>
<div *ngIf="channel.register.enable">
<div *ngIf="channel.register_enable">
<div class="item" nz-row nzAlign="middle">
<div nz-col nzSpan="6" nzOffset="2">
正则表达式
</div>
<div nz-col nzSpan="16">
<input nz-input [(ngModel)]="channel.register.regex"/>
<input nz-input [(ngModel)]="channel.register_regex"/>
</div>
</div>
<div class="item" nz-row nzAlign="middle">
<div nz-col nzSpan="6" nzOffset="2">
最短
</div>
<div nz-col nzSpan="16">
<nz-input-number [(ngModel)]="channel.register_min" [nzMin]="0" [nzMax]="60"
[nzStep]="1"></nz-input-number>
</div>
</div>
<div class="item" nz-row nzAlign="middle">
<div nz-col nzSpan="6" nzOffset="2">
最长
</div>
<div nz-col nzSpan="16">
<nz-input-number [(ngModel)]="channel.register_max" [nzMin]="0" [nzMax]="60"
[nzStep]="1"></nz-input-number>
</div>
</div>
......@@ -62,17 +83,17 @@
心跳包
</div>
<div nz-col nzSpan="20">
<nz-switch [(ngModel)]="channel.heart_beat.enable"></nz-switch>
<nz-switch [(ngModel)]="channel.heart_beat_enable"></nz-switch>
</div>
</div>
<div *ngIf="channel.heart_beat.enable">
<div *ngIf="channel.heart_beat_enable">
<div class="item" nz-row nzAlign="middle">
<div nz-col nzSpan="6" nzOffset="2">
间隔(秒)
</div>
<div nz-col nzSpan="16">
<nz-input-number [(ngModel)]="channel.heart_beat.interval" [nzMin]="5" [nzMax]="60"
<nz-input-number [(ngModel)]="channel.heart_beat_interval" [nzMin]="5" [nzMax]="60"
[nzStep]="1"></nz-input-number>
</div>
</div>
......@@ -82,7 +103,7 @@
内容
</div>
<div nz-col nzSpan="16">
<input nz-input [(ngModel)]="channel.heart_beat.content"/>
<input nz-input [(ngModel)]="channel.heart_beat_content"/>
</div>
</div>
......@@ -92,7 +113,7 @@
十六进制
</div>
<div nz-col nzSpan="16">
<nz-switch [(ngModel)]="channel.heart_beat.is_hex"></nz-switch>
<nz-switch [(ngModel)]="channel.heart_beat_is_hex"></nz-switch>
</div>
</div>
......
......@@ -10,17 +10,15 @@ import {NzDrawerRef} from 'ng-zorro-antd';
})
export class ChannelEditComponent implements OnInit {
@Input() channel: any = {};
@Input() channel: any = {is_server: true, type: 'tcp', addr: ':1843'};
constructor(private as: ApiService, private drawerRef: NzDrawerRef<string>) {
}
ngOnInit(): void {
this.initChannel();
if (this.channel.id) {
this.as.get('channel/' + this.channel.id).subscribe(res => {
this.channel = res.data;
this.initChannel();
});
}
}
......@@ -40,10 +38,4 @@ export class ChannelEditComponent implements OnInit {
});
}
}
initChannel(): void {
this.channel.net = this.channel.net || { is_server: true, type: 'tcp', addr: ':1843'};
this.channel.register = this.channel.register || {};
this.channel.heart_beat = this.channel.heart_beat || {};
}
}
......@@ -18,7 +18,6 @@
<tr>
<th>ID</th>
<th>名称</th>
<th>标签</th>
<th>网络</th>
<th>状态</th>
<th>创建时间</th>
......@@ -29,10 +28,9 @@
<tr *ngFor="let data of basicTable.data">
<td>{{ data.id }}</td>
<td>{{ data.name }}</td>
<td>{{ data.tags }}</td>
<td>{{ data.net.is_server ? '服务端':'客户端' }} {{data.net.type}} {{data.net.addr}}</td>
<td>{{ data.is_server ? '服务端':'客户端' }} {{data.type}} {{data.addr}}</td>
<td>
{{data.net.disabled ? '禁用' : ''}}
{{data.disabled ? '禁用' : ''}}
<a>启动/停止</a>
</td>
<td>{{ data.created | amDateFormat:'YYYY-MM-DD HH:mm:ss' }}</td>
......
......@@ -3,9 +3,8 @@ package api
import (
"github.com/gin-contrib/sessions"
"github.com/gin-gonic/gin"
"github.com/zgwit/dtu-admin/storage"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/model"
"time"
)
type loginObj struct {
......@@ -24,22 +23,17 @@ func authLogin(ctx *gin.Context) {
return
}
userDB := storage.DB("user")
var user model.User
err = userDB.One("username", obj.Username, &user)
has, err := db.Engine.Where("username=?", obj.Username).Get(&user)
if err != nil {
//初始化root 账户
if obj.Username == "admin" {
user.Username = "admin"
user.Password = "123456"
user.Created = time.Now()
userDB.Save(&user)
} else {
replyFail(ctx, "无此用户")
return
}
replyError(ctx, err)
return
}
if !has {
replyFail(ctx, "无此用户")
return
}
if obj.Password != user.Password {
replyFail(ctx, "密码错误")
return
......
......@@ -4,7 +4,6 @@ import (
"github.com/gin-gonic/gin"
"github.com/zgwit/dtu-admin/db"
"github.com/zgwit/dtu-admin/model"
"log"
"net/http"
)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册