From e24121bdf71464187bcbf05b83db4fd03dfd8bd2 Mon Sep 17 00:00:00 2001 From: naiba Date: Sun, 25 Jul 2021 23:50:08 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E6=9C=8D=E5=8A=A1=E5=99=A8=E5=AF=BC=E8=87=B4=20Agent?= =?UTF-8?q?=20=E7=A6=BB=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- cmd/dashboard/controller/member_api.go | 18 +++++++++++------- cmd/dashboard/controller/oauth2.go | 3 +-- model/server.go | 10 ++++++++++ service/dao/dao.go | 2 +- service/rpc/auth.go | 5 ++++- 6 files changed, 28 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index cad45e0..69bca82 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@


-    +   

:trollface: 哪吒监控 一站式轻监控轻运维系统。支持系统状态、HTTP(SSL 证书变更、即将到期、到期)、TCP、Ping 监控报警,命令批量执行和计划任务。

diff --git a/cmd/dashboard/controller/member_api.go b/cmd/dashboard/controller/member_api.go index a5fe359..86f6470 100644 --- a/cmd/dashboard/controller/member_api.go +++ b/cmd/dashboard/controller/member_api.go @@ -154,7 +154,7 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) { s.ID = sf.ID s.Tag = sf.Tag s.Note = sf.Note - if sf.ID == 0 { + if s.ID == 0 { s.Secret = utils.MD5(fmt.Sprintf("%s%s%d", time.Now(), sf.Name, admin.ID)) s.Secret = s.Secret[:18] err = dao.DB.Create(&s).Error @@ -171,13 +171,17 @@ func (ma *memberAPI) addOrEditServer(c *gin.Context) { return } if isEdit { - dao.ServerLock.RLock() - s.Host = dao.ServerList[s.ID].Host - s.State = dao.ServerList[s.ID].State - dao.SecretToID[s.Secret] = s.ID - delete(dao.SecretToID, dao.ServerList[s.ID].Secret) + dao.ServerLock.Lock() + s.CopyFromRunningServer(dao.ServerList[s.ID]) + // 如果修改了 Secret + if s.Secret != dao.ServerList[s.ID].Secret { + // 删除旧 Secret-ID 绑定关系 + dao.SecretToID[s.Secret] = s.ID + // 设置新的 Secret-ID 绑定关系 + delete(dao.SecretToID, dao.ServerList[s.ID].Secret) + } dao.ServerList[s.ID] = &s - dao.ServerLock.RUnlock() + dao.ServerLock.Unlock() } else { s.Host = &model.Host{} s.State = &model.HostState{} diff --git a/cmd/dashboard/controller/oauth2.go b/cmd/dashboard/controller/oauth2.go index a318415..f9d25b4 100644 --- a/cmd/dashboard/controller/oauth2.go +++ b/cmd/dashboard/controller/oauth2.go @@ -8,7 +8,6 @@ import ( "strings" "github.com/gin-gonic/gin" - "github.com/google/go-github/github" GitHubAPI "github.com/google/go-github/github" "golang.org/x/oauth2" GitHubOauth2 "golang.org/x/oauth2/github" @@ -87,7 +86,7 @@ func (oa *oauth2controller) callback(c *gin.Context) { client = GitHubAPI.NewClient(oc) } } - var gu *github.User + var gu *GitHubAPI.User if err == nil { gu, _, err = client.Users.Get(ctx, "") } diff --git a/model/server.go b/model/server.go index ac2a2ab..874ae01 100644 --- a/model/server.go +++ b/model/server.go @@ -28,6 +28,16 @@ type Server struct { PrevHourlyTransferOut int64 `gorm:"-" json:"-"` // 上次数据点时的出站使用量 } +func (s *Server) CopyFromRunningServer(old *Server) { + s.Host = old.Host + s.State = old.State + s.LastActive = old.LastActive + s.TaskClose = old.TaskClose + s.TaskStream = old.TaskStream + s.PrevHourlyTransferIn = old.PrevHourlyTransferIn + s.PrevHourlyTransferOut = old.PrevHourlyTransferOut +} + func (s Server) Marshal() template.JS { name, _ := json.Marshal(s.Name) tag, _ := json.Marshal(s.Tag) diff --git a/service/dao/dao.go b/service/dao/dao.go index a0165f8..b0a17ce 100644 --- a/service/dao/dao.go +++ b/service/dao/dao.go @@ -13,7 +13,7 @@ import ( pb "github.com/naiba/nezha/proto" ) -var Version = "v0.9.10" // !!记得修改 README 中的 badge 版本!! +var Version = "v0.9.11" // !!记得修改 README 中的 badge 版本!! var ( Conf *model.Config diff --git a/service/rpc/auth.go b/service/rpc/auth.go index 5648df9..155ce3f 100644 --- a/service/rpc/auth.go +++ b/service/rpc/auth.go @@ -35,8 +35,11 @@ func (a *AuthHandler) Check(ctx context.Context) (uint64, error) { dao.ServerLock.RLock() defer dao.ServerLock.RUnlock() clientID, hasID := dao.SecretToID[clientSecret] + if !hasID { + return 0, status.Errorf(codes.Unauthenticated, "客户端认证失败") + } _, hasServer := dao.ServerList[clientID] - if !hasID || !hasServer { + if !hasServer { return 0, status.Errorf(codes.Unauthenticated, "客户端认证失败") } return clientID, nil