mirror of
https://github.com/TeaOSLab/EdgeAdmin.git
synced 2025-11-23 18:00:27 +08:00
增加SSH认证连接测试功能
This commit is contained in:
@@ -114,17 +114,17 @@ func (this *NodeAction) RunGet(params struct {
|
|||||||
grantMap := maps.Map{}
|
grantMap := maps.Map{}
|
||||||
grantId := loginParams.GetInt64("grantId")
|
grantId := loginParams.GetInt64("grantId")
|
||||||
if grantId > 0 {
|
if grantId > 0 {
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: grantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: grantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if grantResp.Grant != nil {
|
if grantResp.NodeGrant != nil {
|
||||||
grantMap = maps.Map{
|
grantMap = maps.Map{
|
||||||
"id": grantResp.Grant.Id,
|
"id": grantResp.NodeGrant.Id,
|
||||||
"name": grantResp.Grant.Name,
|
"name": grantResp.NodeGrant.Name,
|
||||||
"method": grantResp.Grant.Method,
|
"method": grantResp.NodeGrant.Method,
|
||||||
"methodName": grantutils.FindGrantMethodName(grantResp.Grant.Method),
|
"methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,17 +114,17 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
grantMap := maps.Map{}
|
grantMap := maps.Map{}
|
||||||
grantId := loginParams.GetInt64("grantId")
|
grantId := loginParams.GetInt64("grantId")
|
||||||
if grantId > 0 {
|
if grantId > 0 {
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: grantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: grantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if grantResp.Grant != nil {
|
if grantResp.NodeGrant != nil {
|
||||||
grantMap = maps.Map{
|
grantMap = maps.Map{
|
||||||
"id": grantResp.Grant.Id,
|
"id": grantResp.NodeGrant.Id,
|
||||||
"name": grantResp.Grant.Name,
|
"name": grantResp.NodeGrant.Name,
|
||||||
"method": grantResp.Grant.Method,
|
"method": grantResp.NodeGrant.Method,
|
||||||
"methodName": grantutils.FindGrantMethodName(grantResp.Grant.Method),
|
"methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -36,12 +36,12 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
var grantMap interface{} = nil
|
var grantMap interface{} = nil
|
||||||
|
|
||||||
if cluster.GrantId > 0 {
|
if cluster.GrantId > 0 {
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: cluster.GrantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: cluster.GrantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
grant := grantResp.Grant
|
grant := grantResp.NodeGrant
|
||||||
if grant != nil {
|
if grant != nil {
|
||||||
grantMap = maps.Map{
|
grantMap = maps.Map{
|
||||||
"id": grant.Id,
|
"id": grant.Id,
|
||||||
@@ -62,7 +62,7 @@ func (this *IndexAction) RunGet(params struct {
|
|||||||
this.Show()
|
this.Show()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存设置
|
// RunPost 保存设置
|
||||||
func (this *IndexAction) RunPost(params struct {
|
func (this *IndexAction) RunPost(params struct {
|
||||||
ClusterId int64
|
ClusterId int64
|
||||||
Name string
|
Name string
|
||||||
|
|||||||
@@ -58,17 +58,17 @@ func (this *UpdateNodeSSHAction) RunGet(params struct {
|
|||||||
|
|
||||||
// 认证信息
|
// 认证信息
|
||||||
grantId := loginParams.GetInt64("grantId")
|
grantId := loginParams.GetInt64("grantId")
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: grantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: grantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
}
|
}
|
||||||
var grantMap maps.Map = nil
|
var grantMap maps.Map = nil
|
||||||
if grantResp.Grant != nil {
|
if grantResp.NodeGrant != nil {
|
||||||
grantMap = maps.Map{
|
grantMap = maps.Map{
|
||||||
"id": grantResp.Grant.Id,
|
"id": grantResp.NodeGrant.Id,
|
||||||
"name": grantResp.Grant.Name,
|
"name": grantResp.NodeGrant.Name,
|
||||||
"method": grantResp.Grant.Method,
|
"method": grantResp.NodeGrant.Method,
|
||||||
"methodName": grantutils.FindGrantMethodName(grantResp.Grant.Method),
|
"methodName": grantutils.FindGrantMethodName(grantResp.NodeGrant.Method),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.Data["grant"] = grantMap
|
this.Data["grant"] = grantMap
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ func (this *CreateAction) RunPost(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 创建日志
|
// 创建日志
|
||||||
defer this.CreateLog(oplogs.LevelInfo, "创建SSH认证 %d", createResp.GrantId)
|
defer this.CreateLog(oplogs.LevelInfo, "创建SSH认证 %d", createResp.NodeGrantId)
|
||||||
|
|
||||||
this.Success()
|
this.Success()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,14 +65,14 @@ func (this *CreatePopupAction) RunPost(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.Data["grant"] = maps.Map{
|
this.Data["grant"] = maps.Map{
|
||||||
"id": createResp.GrantId,
|
"id": createResp.NodeGrantId,
|
||||||
"name": params.Name,
|
"name": params.Name,
|
||||||
"method": params.Method,
|
"method": params.Method,
|
||||||
"methodName": grantutils.FindGrantMethodName(params.Method),
|
"methodName": grantutils.FindGrantMethodName(params.Method),
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建日志
|
// 创建日志
|
||||||
defer this.CreateLog(oplogs.LevelInfo, "创建SSH认证 %d", createResp.GrantId)
|
defer this.CreateLog(oplogs.LevelInfo, "创建SSH认证 %d", createResp.NodeGrantId)
|
||||||
|
|
||||||
this.Success()
|
this.Success()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ func (this *DeleteAction) RunPost(params struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 删除
|
// 删除
|
||||||
_, err = this.RPC().NodeGrantRPC().DisableNodeGrant(this.AdminContext(), &pb.DisableNodeGrantRequest{GrantId: params.GrantId})
|
_, err = this.RPC().NodeGrantRPC().DisableNodeGrant(this.AdminContext(), &pb.DisableNodeGrantRequest{NodeGrantId: params.GrantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -19,19 +19,19 @@ func (this *GrantAction) Init() {
|
|||||||
func (this *GrantAction) RunGet(params struct {
|
func (this *GrantAction) RunGet(params struct {
|
||||||
GrantId int64
|
GrantId int64
|
||||||
}) {
|
}) {
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: params.GrantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if grantResp.Grant == nil {
|
if grantResp.NodeGrant == nil {
|
||||||
this.WriteString("can not find the grant")
|
this.WriteString("can not find the grant")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 处理节点专用的认证
|
// TODO 处理节点专用的认证
|
||||||
|
|
||||||
grant := grantResp.Grant
|
grant := grantResp.NodeGrant
|
||||||
this.Data["grant"] = maps.Map{
|
this.Data["grant"] = maps.Map{
|
||||||
"id": grant.Id,
|
"id": grant.Id,
|
||||||
"name": grant.Name,
|
"name": grant.Name,
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ func (this *IndexAction) RunGet(params struct{}) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
grantMaps := []maps.Map{}
|
grantMaps := []maps.Map{}
|
||||||
for _, grant := range grantsResp.Grants {
|
for _, grant := range grantsResp.NodeGrants {
|
||||||
// 集群数
|
// 集群数
|
||||||
countClustersResp, err := this.RPC().NodeClusterRPC().CountAllEnabledNodeClustersWithGrantId(this.AdminContext(), &pb.CountAllEnabledNodeClustersWithGrantIdRequest{GrantId: grant.Id})
|
countClustersResp, err := this.RPC().NodeClusterRPC().CountAllEnabledNodeClustersWithGrantId(this.AdminContext(), &pb.CountAllEnabledNodeClustersWithGrantIdRequest{GrantId: grant.Id})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ func init() {
|
|||||||
GetPost("/selectPopup", new(SelectPopupAction)).
|
GetPost("/selectPopup", new(SelectPopupAction)).
|
||||||
GetPost("/createPopup", new(CreatePopupAction)).
|
GetPost("/createPopup", new(CreatePopupAction)).
|
||||||
GetPost("/updatePopup", new(UpdatePopupAction)).
|
GetPost("/updatePopup", new(UpdatePopupAction)).
|
||||||
|
GetPost("/test", new(TestAction)).
|
||||||
EndAll()
|
EndAll()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ func (this *SelectPopupAction) RunGet(params struct{}) {
|
|||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
grants := grantsResp.Grants
|
grants := grantsResp.NodeGrants
|
||||||
grantMaps := []maps.Map{}
|
grantMaps := []maps.Map{}
|
||||||
for _, grant := range grants {
|
for _, grant := range grants {
|
||||||
grantMaps = append(grantMaps, maps.Map{
|
grantMaps = append(grantMaps, maps.Map{
|
||||||
@@ -52,12 +52,12 @@ func (this *SelectPopupAction) RunPost(params struct {
|
|||||||
this.Success()
|
this.Success()
|
||||||
}
|
}
|
||||||
|
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: params.GrantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
grant := grantResp.Grant
|
grant := grantResp.NodeGrant
|
||||||
if grant == nil {
|
if grant == nil {
|
||||||
this.Fail("找不到要使用的认证")
|
this.Fail("找不到要使用的认证")
|
||||||
}
|
}
|
||||||
|
|||||||
78
internal/web/actions/default/clusters/grants/test.go
Normal file
78
internal/web/actions/default/clusters/grants/test.go
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||||
|
|
||||||
|
package grants
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
||||||
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/clusters/grants/grantutils"
|
||||||
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||||
|
"github.com/iwind/TeaGo/actions"
|
||||||
|
"github.com/iwind/TeaGo/maps"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type TestAction struct {
|
||||||
|
actionutils.ParentAction
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *TestAction) Init() {
|
||||||
|
this.Nav("", "", "test")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *TestAction) RunGet(params struct {
|
||||||
|
GrantId int64
|
||||||
|
}) {
|
||||||
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if grantResp.NodeGrant == nil {
|
||||||
|
this.WriteString("can not find the grant")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
grant := grantResp.NodeGrant
|
||||||
|
this.Data["grant"] = maps.Map{
|
||||||
|
"id": grant.Id,
|
||||||
|
"name": grant.Name,
|
||||||
|
"method": grant.Method,
|
||||||
|
"methodName": grantutils.FindGrantMethodName(grant.Method),
|
||||||
|
"username": grant.Username,
|
||||||
|
"password": strings.Repeat("*", len(grant.Password)),
|
||||||
|
"privateKey": grant.PrivateKey,
|
||||||
|
"description": grant.Description,
|
||||||
|
"su": grant.Su,
|
||||||
|
}
|
||||||
|
|
||||||
|
this.Show()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *TestAction) RunPost(params struct {
|
||||||
|
GrantId int64
|
||||||
|
Host string
|
||||||
|
Port int32
|
||||||
|
|
||||||
|
Must *actions.Must
|
||||||
|
CSRF *actionutils.CSRF
|
||||||
|
}) {
|
||||||
|
params.Must.
|
||||||
|
Field("host", params.Host).
|
||||||
|
Require("请输入节点主机地址").
|
||||||
|
Field("port", params.Port).
|
||||||
|
Gt(0, "请输入正确的端口号").
|
||||||
|
Lt(65535, "请输入正确的端口号")
|
||||||
|
|
||||||
|
resp, err := this.RPC().NodeGrantRPC().TestNodeGrant(this.AdminContext(), &pb.TestNodeGrantRequest{
|
||||||
|
NodeGrantId: params.GrantId,
|
||||||
|
Host: params.Host,
|
||||||
|
Port: params.Port,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
this.ErrorPage(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.Data["isOk"] = resp.IsOk
|
||||||
|
this.Data["error"] = resp.Error
|
||||||
|
this.Success()
|
||||||
|
}
|
||||||
@@ -22,19 +22,19 @@ func (this *UpdateAction) RunGet(params struct {
|
|||||||
}) {
|
}) {
|
||||||
this.Data["methods"] = grantutils.AllGrantMethods()
|
this.Data["methods"] = grantutils.AllGrantMethods()
|
||||||
|
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: params.GrantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if grantResp.Grant == nil {
|
if grantResp.NodeGrant == nil {
|
||||||
this.WriteString("can not find the grant")
|
this.WriteString("can not find the grant")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 处理节点专用的认证
|
// TODO 处理节点专用的认证
|
||||||
|
|
||||||
grant := grantResp.Grant
|
grant := grantResp.NodeGrant
|
||||||
this.Data["grant"] = maps.Map{
|
this.Data["grant"] = maps.Map{
|
||||||
"id": grant.Id,
|
"id": grant.Id,
|
||||||
"name": grant.Name,
|
"name": grant.Name,
|
||||||
@@ -84,7 +84,7 @@ func (this *UpdateAction) RunPost(params struct {
|
|||||||
// TODO 检查grantId是否存在
|
// TODO 检查grantId是否存在
|
||||||
|
|
||||||
_, err := this.RPC().NodeGrantRPC().UpdateNodeGrant(this.AdminContext(), &pb.UpdateNodeGrantRequest{
|
_, err := this.RPC().NodeGrantRPC().UpdateNodeGrant(this.AdminContext(), &pb.UpdateNodeGrantRequest{
|
||||||
GrantId: params.GrantId,
|
NodeGrantId: params.GrantId,
|
||||||
Name: params.Name,
|
Name: params.Name,
|
||||||
Method: params.Method,
|
Method: params.Method,
|
||||||
Username: params.Username,
|
Username: params.Username,
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ func (this *UpdatePopupAction) RunGet(params struct {
|
|||||||
}) {
|
}) {
|
||||||
this.Data["methods"] = grantutils.AllGrantMethods()
|
this.Data["methods"] = grantutils.AllGrantMethods()
|
||||||
|
|
||||||
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledGrant(this.AdminContext(), &pb.FindEnabledGrantRequest{GrantId: params.GrantId})
|
grantResp, err := this.RPC().NodeGrantRPC().FindEnabledNodeGrant(this.AdminContext(), &pb.FindEnabledNodeGrantRequest{NodeGrantId: params.GrantId})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
this.ErrorPage(err)
|
this.ErrorPage(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if grantResp.Grant == nil {
|
if grantResp.NodeGrant == nil {
|
||||||
this.WriteString("找不到要操作的对象")
|
this.WriteString("找不到要操作的对象")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
grant := grantResp.Grant
|
grant := grantResp.NodeGrant
|
||||||
this.Data["grant"] = maps.Map{
|
this.Data["grant"] = maps.Map{
|
||||||
"id": grant.Id,
|
"id": grant.Id,
|
||||||
"nodeId": grant.NodeId,
|
"nodeId": grant.NodeId,
|
||||||
@@ -82,7 +82,7 @@ func (this *UpdatePopupAction) RunPost(params struct {
|
|||||||
|
|
||||||
// 执行修改
|
// 执行修改
|
||||||
_, err := this.RPC().NodeGrantRPC().UpdateNodeGrant(this.AdminContext(), &pb.UpdateNodeGrantRequest{
|
_, err := this.RPC().NodeGrantRPC().UpdateNodeGrant(this.AdminContext(), &pb.UpdateNodeGrantRequest{
|
||||||
GrantId: params.GrantId,
|
NodeGrantId: params.GrantId,
|
||||||
Name: params.Name,
|
Name: params.Name,
|
||||||
Method: params.Method,
|
Method: params.Method,
|
||||||
Username: params.Username,
|
Username: params.Username,
|
||||||
|
|||||||
@@ -2,5 +2,6 @@
|
|||||||
<menu-item href="/clusters/grants">认证列表</menu-item>
|
<menu-item href="/clusters/grants">认证列表</menu-item>
|
||||||
<span class="item">|</span>
|
<span class="item">|</span>
|
||||||
<menu-item :href="'/clusters/grants/grant?grantId=' + grant.id" code="index">{{grant.name}}详情</menu-item>
|
<menu-item :href="'/clusters/grants/grant?grantId=' + grant.id" code="index">{{grant.name}}详情</menu-item>
|
||||||
|
<menu-item :href="'/clusters/grants/test?grantId=' + grant.id" code="test">测试</menu-item>
|
||||||
<menu-item :href="'/clusters/grants/update?grantId=' + grant.id" code="update">修改</menu-item>
|
<menu-item :href="'/clusters/grants/update?grantId=' + grant.id" code="update">修改</menu-item>
|
||||||
</first-menu>
|
</first-menu>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
<td>名称 *</td>
|
<td>名称 *</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="name" maxlength="100" ref="focus"/>
|
<input type="text" name="name" maxlength="100" ref="focus"/>
|
||||||
|
<p class="comment">起一个容易识别的名称。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -52,7 +53,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tbody v-show="moreOptionsVisible">
|
<tbody v-show="moreOptionsVisible">
|
||||||
<tr>
|
<tr>
|
||||||
<td>描述</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
<textarea name="description" rows="3"></textarea>
|
<textarea name="description" rows="3"></textarea>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -50,9 +50,9 @@
|
|||||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tbody v-if="moreOptionsVisible">
|
<tbody v-show="moreOptionsVisible">
|
||||||
<tr>
|
<tr>
|
||||||
<td>描述</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
<textarea name="description" rows="3"></textarea>
|
<textarea name="description" rows="3"></textarea>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -18,13 +18,13 @@
|
|||||||
|
|
||||||
<!-- 用户名/密码 -->
|
<!-- 用户名/密码 -->
|
||||||
<tbody v-if="grant.method == 'user'">
|
<tbody v-if="grant.method == 'user'">
|
||||||
<tr>
|
<tr>
|
||||||
<td>SSH用户名</td>
|
<td>SSH用户名</td>
|
||||||
<td>
|
<td>
|
||||||
{{grant.username}}
|
{{grant.username}}
|
||||||
<p class="comment">SSH登录用户名。</p>
|
<p class="comment">SSH登录用户名。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>SSH密码</td>
|
<td>SSH密码</td>
|
||||||
<td>{{grant.password}}
|
<td>{{grant.password}}
|
||||||
@@ -34,17 +34,17 @@
|
|||||||
|
|
||||||
<!-- 私钥 -->
|
<!-- 私钥 -->
|
||||||
<tbody v-if="grant.method == 'privateKey'">
|
<tbody v-if="grant.method == 'privateKey'">
|
||||||
<tr>
|
<tr>
|
||||||
<td>RSA私钥</td>
|
<td>RSA私钥</td>
|
||||||
<td>
|
<td>
|
||||||
{{grant.privateKey}}
|
{{grant.privateKey}}
|
||||||
<p class="comment">用来生成登录SSH公钥的私钥</p>
|
<p class="comment">用来生成登录SSH公钥的私钥</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>描述</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
<span v-if="grant.description.length > 0">{{grant.description}}</span>
|
<span v-if="grant.description.length > 0">{{grant.description}}</span>
|
||||||
<span v-if="grant.description.length == 0">-</span>
|
<span v-if="grant.description.length == 0">-</span>
|
||||||
@@ -56,12 +56,12 @@
|
|||||||
<h3>使用此认证的集群</h3>
|
<h3>使用此认证的集群</h3>
|
||||||
<div>
|
<div>
|
||||||
<p v-if="clusters.length == 0" class="comment">暂时还没有集群使用此认证。</p>
|
<p v-if="clusters.length == 0" class="comment">暂时还没有集群使用此认证。</p>
|
||||||
<a :href="'/clusters/cluster?clusterId=' + cluster.id" class="ui label small" v-for="cluster in clusters">{{cluster.name}}</a>
|
<a :href="'/clusters/cluster?clusterId=' + cluster.id" class="ui label small basic" v-for="cluster in clusters">{{cluster.name}}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ui divider"></div>
|
<div class="ui divider"></div>
|
||||||
<h3>使用此认证的节点</h3>
|
<h3>使用此认证的节点</h3>
|
||||||
<div>
|
<div>
|
||||||
<p v-if="nodes.length == 0" class="comment">暂时还没有节点使用此认证。</p>
|
<p v-if="nodes.length == 0" class="comment">暂时还没有节点使用此认证。</p>
|
||||||
<a :href="'/clusters/cluster/node?clusterId=' + node.cluster.id + '&nodeId=' + node.id" class="ui label small" :class="{red:!node.isOn}" v-for="node in nodes">{{node.name}}<span class="small">({{node.cluster.name}})</span></a>
|
<a :href="'/clusters/cluster/node?clusterId=' + node.cluster.id + '&nodeId=' + node.id" class="ui label small basic" :class="{red:!node.isOn}" v-for="node in nodes">{{node.name}}<span class="small">({{node.cluster.name}})</span></a>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
59
web/views/@default/clusters/grants/test.html
Normal file
59
web/views/@default/clusters/grants/test.html
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
{$layout}
|
||||||
|
{$template "grant_menu"}
|
||||||
|
|
||||||
|
<div class="ui message">可以在这里测试SSH主机连接是否正常。</div>
|
||||||
|
|
||||||
|
<form class="ui form" data-tea-action="$" data-tea-success="success" data-tea-before="requestBefore" data-tea-done="requestDone">
|
||||||
|
<csrf-token></csrf-token>
|
||||||
|
<input type="hidden" name="grantId" :value="grant.id"/>
|
||||||
|
<table class="ui table selectable definition">
|
||||||
|
<tr>
|
||||||
|
<td class="title">节点主机地址 *</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="host" placeholder="x.x.x.x" style="width: 10em" ref="focus"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>节点主机端口 *</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="port" style="width: 5em" size="5" maxlength="5"/>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="title">认证方式</td>
|
||||||
|
<td>
|
||||||
|
{{grant.methodName}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<!-- 用户名/密码 -->
|
||||||
|
<tbody v-if="grant.method == 'user'">
|
||||||
|
<tr>
|
||||||
|
<td>SSH用户名</td>
|
||||||
|
<td>
|
||||||
|
{{grant.username}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>SSH密码</td>
|
||||||
|
<td>{{grant.password}}
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
|
||||||
|
<!-- 私钥 -->
|
||||||
|
<tbody v-if="grant.method == 'privateKey'">
|
||||||
|
<tr>
|
||||||
|
<td>RSA私钥</td>
|
||||||
|
<td>
|
||||||
|
{{grant.privateKey}}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="ui message green" v-if="resp != null && resp.isOk">连接成功!</div>
|
||||||
|
<div class="ui message red" v-if="resp != null && !resp.isOk">连接失败:{{resp.error}}</div>
|
||||||
|
|
||||||
|
<submit-btn v-if="!isRequesting">提交测试</submit-btn>
|
||||||
|
<button class="ui button disabled" v-if="isRequesting">连接中...</button>
|
||||||
|
</form>
|
||||||
17
web/views/@default/clusters/grants/test.js
Normal file
17
web/views/@default/clusters/grants/test.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
Tea.context(function () {
|
||||||
|
this.isRequesting = false
|
||||||
|
this.resp = null
|
||||||
|
|
||||||
|
this.success = function (resp) {
|
||||||
|
this.resp = resp.data
|
||||||
|
}
|
||||||
|
|
||||||
|
this.requestBefore = function () {
|
||||||
|
this.isRequesting = true
|
||||||
|
this.resp = null
|
||||||
|
}
|
||||||
|
|
||||||
|
this.requestDone = function () {
|
||||||
|
this.isRequesting = false
|
||||||
|
}
|
||||||
|
})
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
<td>名称 *</td>
|
<td>名称 *</td>
|
||||||
<td>
|
<td>
|
||||||
<input type="text" name="name" maxlength="100" ref="focus" v-model="grant.name"/>
|
<input type="text" name="name" maxlength="100" ref="focus" v-model="grant.name"/>
|
||||||
|
<p class="comment">起一个容易识别的名称。</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@@ -49,7 +50,7 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td>描述</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
<textarea name="description" rows="3" v-model="grant.description"></textarea>
|
<textarea name="description" rows="3" v-model="grant.description"></textarea>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
@@ -52,9 +52,9 @@
|
|||||||
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
<td colspan="2"><more-options-indicator></more-options-indicator></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tbody v-if="moreOptionsVisible">
|
<tbody v-show="moreOptionsVisible">
|
||||||
<tr>
|
<tr>
|
||||||
<td>描述</td>
|
<td>备注</td>
|
||||||
<td>
|
<td>
|
||||||
<textarea name="description" rows="3" v-model="grant.description"></textarea>
|
<textarea name="description" rows="3" v-model="grant.description"></textarea>
|
||||||
</td>
|
</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user