From f5c0b4600f573c427042badf9d09df860a08a369 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Sun, 19 Mar 2023 21:24:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0edge-api=20token=20--role=3D[?= =?UTF-8?q?admin|user|api]=E5=91=BD=E4=BB=A4=E7=94=A8=E6=9D=A5=E5=BF=AB?= =?UTF-8?q?=E9=80=9F=E6=9F=A5=E8=AF=A2=E8=8A=82=E7=82=B9Token?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/edge-api/main.go | 33 +++++++++++++++++++++++++++++++++ internal/nodes/api_node.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/cmd/edge-api/main.go b/cmd/edge-api/main.go index b6895a25..92db6b57 100644 --- a/cmd/edge-api/main.go +++ b/cmd/edge-api/main.go @@ -17,6 +17,7 @@ import ( "github.com/iwind/gosock/pkg/gosock" "log" "os" + "strings" ) func main() { @@ -188,6 +189,38 @@ func main() { } } }) + app.On("token", func() { + var role = "" + if len(os.Args) <= 2 { + fmt.Println("require --role parameter") + return + } + + var set = flag.NewFlagSet("", flag.ExitOnError) + set.StringVar(&role, "role", "", "edge-api token --role=[admin|user|api]") + _ = set.Parse(os.Args[2:]) + + var sock = gosock.NewTmpSock(teaconst.ProcessName) + reply, err := sock.Send(&gosock.Command{Code: "lookupToken", Params: map[string]any{ + "role": role, + }}) + if err != nil { + fmt.Println("[ERROR]" + err.Error()) + } else { + var resultMap = maps.NewMap(reply.Params) + if resultMap.GetBool("isOk") { + var tokens = resultMap.GetSlice("tokens") + fmt.Printf("%-35s | %-35s\n", "nodeId", "secret") + fmt.Println(strings.Repeat("-", 70)) + for _, tokenMap := range tokens { + var m = maps.NewMap(tokenMap) + fmt.Printf("%-35s | %-35s\n", m.GetString("nodeId"), m.GetString("secret")) + } + } else { + fmt.Println("[ERROR]" + resultMap.GetString("err")) + } + } + }) app.Run(func() { nodes.NewAPINode().Start() diff --git a/internal/nodes/api_node.go b/internal/nodes/api_node.go index 861feeb4..16af1582 100644 --- a/internal/nodes/api_node.go +++ b/internal/nodes/api_node.go @@ -755,6 +755,41 @@ func (this *APINode) listenSock() error { "code": teaconst.InstanceCode, }, }) + case "lookupToken": + var role = maps.NewMap(cmd.Params).GetString("role") + switch role { + case "admin", "user", "api": + tokens, err := models.SharedApiTokenDAO.FindAllEnabledAPITokens(nil, role) + if err != nil { + _ = cmd.Reply(&gosock.Command{ + Params: map[string]any{ + "isOk": false, + "err": err.Error(), + }, + }) + } else { + var tokenMaps = []maps.Map{} + for _, token := range tokens { + tokenMaps = append(tokenMaps, maps.Map{ + "nodeId": token.NodeId, + "secret": token.Secret, + }) + } + _ = cmd.Reply(&gosock.Command{ + Params: map[string]any{ + "isOk": true, + "tokens": tokenMaps, + }, + }) + } + default: + _ = cmd.Reply(&gosock.Command{ + Params: map[string]any{ + "isOk": false, + "err": "unsupported role '" + role + "'", + }, + }) + } } })