From 6a3d23ee8d5f477a15439bcb25dc70d6698934cf Mon Sep 17 00:00:00 2001 From: lxy <237809796@qq.com> Date: Thu, 23 Jun 2022 15:31:10 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E8=BF=9E=E6=8E=A5?= =?UTF-8?q?=E9=AA=8C=E6=9D=83=20auth=20=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://47.119.165.148/zhub@156 e63fbceb-bcc3-4977-ac22-735b83d8d0f4 --- cmd/client.go | 6 +++++- go.mod | 2 +- main.go | 2 +- pkg.bat | 8 ++------ zsub/msg-consumer.go | 19 +++++++++++++++++++ zsub/zsub.go | 2 ++ 6 files changed, 30 insertions(+), 9 deletions(-) diff --git a/cmd/client.go b/cmd/client.go index c9ff822..2cad867 100644 --- a/cmd/client.go +++ b/cmd/client.go @@ -34,6 +34,7 @@ type Client struct { chReceive chan []string // chan of receive message timerReceive chan []string // chan of timer lockFlag map[string]*Lock // chan of lock + auth string } type Lock struct { @@ -44,7 +45,7 @@ type Lock struct { // duration int // lock duration } -func Create(appname string, addr string, groupid string) (*Client, error) { +func Create(appname, addr, groupid, auth string) (*Client, error) { conn, err := net.Dial("tcp", addr) if err != nil { return &Client{}, err @@ -65,8 +66,10 @@ func Create(appname string, addr string, groupid string) (*Client, error) { chReceive: make(chan []string, 100), timerReceive: make(chan []string, 100), lockFlag: make(map[string]*Lock), + auth: auth, } + client.send("auth", auth) client.send("groupid " + groupid) client.init() return &client, err @@ -81,6 +84,7 @@ func (c *Client) reconn() (err error) { continue } else if err == nil { c.conn = conn + c.send("auth", c.auth) c.send("groupid " + c.groupid) go c.receive() diff --git a/go.mod b/go.mod index a7d7b8e..96c742f 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module zhub -go 1.16 +go 1.18 require ( github.com/go-basic/uuid v1.0.0 // indirect diff --git a/main.go b/main.go index c55ff5c..c916bea 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ func main() { } if len(os.Args) == 3 && strings.EqualFold(os.Args[1], "-r") { - if cli, err := cmd.Create("zhub-local", addr, "group-admin"); err != nil { + if cli, err := cmd.Create("zhub-local", addr, "group-admin", "zchd@123456"); err != nil { log.Println(err) } else { switch os.Args[2] { diff --git a/pkg.bat b/pkg.bat index f23800d..c1d7da7 100644 --- a/pkg.bat +++ b/pkg.bat @@ -1,10 +1,6 @@ SET GOOS=linux SET GOARCH=amd64 -go build -o zhub.sh -ldflags "-s -w" ./app.go +go build -o zhub.sh -ldflags "-s -w" ./main.go upx -9 zhub.sh -scp zhub.sh pro:/opt/zhub -scp zhub.sh dev:/opt/zhub -scp zhub.sh qc:/opt/zhub -scp zhub.sh my:/opt/zhub -del zhub.sh +rem scp zhub.sh dev:/opt/zhub diff --git a/zsub/msg-consumer.go b/zsub/msg-consumer.go index 7312f6a..1c69471 100644 --- a/zsub/msg-consumer.go +++ b/zsub/msg-consumer.go @@ -32,6 +32,10 @@ func msgAccept(v Message) { if LogDebug { log.Println("[", v.Conn.sn, "] rcmd: "+strings.Join(rcmd, " ")) } + if !c.auth && !strings.EqualFold("auth", rcmd[0]) && strings.EqualFold(GetStr("service.auth", "0"), "1") { + c.send("-Auth: NOAUTH Authentication required:" + rcmd[0]) + return + } if len(rcmd) == 1 { switch strings.ToLower(rcmd[0]) { @@ -149,6 +153,21 @@ func msgAccept(v Message) { return } zsub._unlock(Lock{key: rcmd[1], uuid: rcmd[2]}) + case "auth": + if len(rcmd) != 2 || strings.IndexAny(rcmd[1], "@") == -1 { + c.send("-Error: invalid password!") + return + } + + inx := strings.IndexAny(rcmd[1], "@") //user@pwd + + if strings.EqualFold(GetStr("auth."+rcmd[1][:inx], ""), rcmd[1][inx+1:]) { + c.auth = true + c.send("+Auth: ok!") + } else { + c.send("-Auth: invalid password!") + } + return default: c.send("-Error: default not supported:[" + strings.Join(rcmd, " ") + "]") return diff --git a/zsub/zsub.go b/zsub/zsub.go index 57e0541..dc7a052 100644 --- a/zsub/zsub.go +++ b/zsub/zsub.go @@ -87,6 +87,7 @@ type ZConn struct { //ZConn substoped map[string]chan int // 关闭信号量 ping int64 // 最后心跳时间 pong int64 // 最后心跳回复时间 + auth bool // 是否已验证授权 } type Lock struct { @@ -483,6 +484,7 @@ func Info() map[string]interface{} { m["groupid"] = c.groupid m["topics"] = c.topics m["timers"] = c.timers + m["auth"] = c.auth conns = append(conns, m) }