1
1
package v2
2
2
3
3
import (
4
+ "encoding/base64"
4
5
"encoding/json"
5
- "os"
6
- "os/user"
7
- "path"
8
6
9
7
"github.com/1Panel-dev/1Panel/agent/app/api/v2/helper"
10
8
"github.com/1Panel-dev/1Panel/agent/app/dto"
9
+ "github.com/1Panel-dev/1Panel/agent/app/model"
11
10
"github.com/1Panel-dev/1Panel/agent/global"
12
11
"github.com/1Panel-dev/1Panel/agent/utils/ssh"
13
12
"github.com/gin-gonic/gin"
@@ -71,6 +70,35 @@ func (b *BaseApi) LoadBaseDir(c *gin.Context) {
71
70
helper .SuccessWithData (c , global .Dir .DataDir )
72
71
}
73
72
73
+ // @Tags System Setting
74
+ // @Summary Load local conn
75
+ // @Success 200 {object} dto.SSHConnData
76
+ // @Security ApiKeyAuth
77
+ // @Security Timestamp
78
+ // @Router /settings/ssh [get]
79
+ func (b * BaseApi ) LoadLocalConn (c * gin.Context ) {
80
+ connInfoInDB , err := settingService .GetSSHInfo ()
81
+ if err != nil {
82
+ helper .InternalServer (c , err )
83
+ return
84
+ }
85
+ var data dto.SSHConnData
86
+ if err := json .Unmarshal ([]byte (connInfoInDB ), & data ); err != nil {
87
+ helper .InternalServer (c , err )
88
+ return
89
+ }
90
+ if len (data .Password ) != 0 {
91
+ data .Password = base64 .StdEncoding .EncodeToString ([]byte (data .Password ))
92
+ }
93
+ if len (data .PrivateKey ) != 0 {
94
+ data .PrivateKey = base64 .StdEncoding .EncodeToString ([]byte (data .PrivateKey ))
95
+ }
96
+ if len (data .PassPhrase ) != 0 {
97
+ data .PassPhrase = base64 .StdEncoding .EncodeToString ([]byte (data .PassPhrase ))
98
+ }
99
+ helper .SuccessWithData (c , data )
100
+ }
101
+
74
102
func (b * BaseApi ) CheckLocalConn (c * gin.Context ) {
75
103
_ , err := loadLocalConn ()
76
104
helper .SuccessWithData (c , err == nil )
@@ -87,6 +115,7 @@ func (b *BaseApi) CheckLocalConnByInfo(c *gin.Context) {
87
115
if err := helper .CheckBindAndValidate (& req , c ); err != nil {
88
116
return
89
117
}
118
+
90
119
helper .SuccessWithData (c , settingService .TestConnByInfo (req ))
91
120
}
92
121
@@ -96,51 +125,41 @@ func (b *BaseApi) CheckLocalConnByInfo(c *gin.Context) {
96
125
// @Security ApiKeyAuth
97
126
// @Security Timestamp
98
127
// @Router /settings/ssh [post]
99
- func (b * BaseApi ) SaveLocalConnInfo (c * gin.Context ) {
128
+ func (b * BaseApi ) SaveLocalConn (c * gin.Context ) {
100
129
var req dto.SSHConnData
101
130
if err := helper .CheckBindAndValidate (& req , c ); err != nil {
102
131
return
103
132
}
104
- helper .SuccessWithData (c , settingService .SaveConnInfo (req ))
105
- }
106
-
107
- func loadLocalConn () (* ssh.SSHClient , error ) {
108
- itemPath := ""
109
- currentInfo , _ := user .Current ()
110
- if len (currentInfo .HomeDir ) == 0 {
111
- itemPath = "/root/.ssh/id_ed25519_1panel"
112
- } else {
113
- itemPath = path .Join (currentInfo .HomeDir , ".ssh/id_ed25519_1panel" )
114
- }
115
- if _ , err := os .Stat (itemPath ); err != nil {
116
- _ = sshService .CreateRootCert (dto.CreateRootCert {EncryptionMode : "ed25519" , Name : "id_ed25519_1panel" , Description : "1Panel Terminal" })
117
- }
118
133
119
- privateKey , _ := os .ReadFile (itemPath )
120
- connWithKey := ssh.ConnInfo {
121
- Addr : "127.0.0.1" ,
122
- User : "root" ,
123
- Port : 22 ,
124
- AuthMode : "key" ,
125
- PrivateKey : privateKey ,
126
- }
127
- client , err := ssh .NewClient (connWithKey )
128
- if err == nil {
129
- return client , nil
134
+ if err := settingService .SaveConnInfo (req ); err != nil {
135
+ helper .InternalServer (c , err )
136
+ return
130
137
}
138
+ helper .Success (c )
139
+ }
131
140
141
+ func loadLocalConn () (* ssh.SSHClient , error ) {
132
142
connInfoInDB , err := settingService .GetSSHInfo ()
133
143
if err != nil {
134
144
return nil , err
135
145
}
136
146
if len (connInfoInDB ) == 0 {
137
147
return nil , errors .New ("no such ssh conn info in db!" )
138
148
}
139
- var connInDB ssh. ConnInfo
149
+ var connInDB model. LocalConnInfo
140
150
if err := json .Unmarshal ([]byte (connInfoInDB ), & connInDB ); err != nil {
141
151
return nil , err
142
152
}
143
- return ssh .NewClient (connInDB )
153
+ sshInfo := ssh.ConnInfo {
154
+ Addr : connInDB .Addr ,
155
+ Port : int (connInDB .Port ),
156
+ User : connInDB .User ,
157
+ AuthMode : connInDB .AuthMode ,
158
+ Password : connInDB .Password ,
159
+ PrivateKey : []byte (connInDB .PrivateKey ),
160
+ PassPhrase : []byte (connInDB .PassPhrase ),
161
+ }
162
+ return ssh .NewClient (sshInfo )
144
163
}
145
164
146
165
// @Tags System Setting
0 commit comments