(remoteInfo workspace.RemoteInfo)
| 159 | } |
| 160 | |
| 161 | func InsertOrUpdateRemote(remoteInfo workspace.RemoteInfo) (id int, err error) { |
| 162 | |
| 163 | var single *workspace.RemoteInfo |
| 164 | |
| 165 | if remoteInfo.ID > 0 { |
| 166 | single, err = GetRemoteById(remoteInfo.ID) |
| 167 | if err != nil { |
| 168 | return id, err |
| 169 | } |
| 170 | } else { |
| 171 | single, err = GetRemoteByHost(remoteInfo.Addr, remoteInfo.UserName) |
| 172 | if err != nil { |
| 173 | return id, err |
| 174 | } |
| 175 | } |
| 176 | |
| 177 | //1. init |
| 178 | db := getDb() |
| 179 | defer db.Close() |
| 180 | |
| 181 | passwordEncrypt := "" |
| 182 | if len(remoteInfo.Password) > 0 { |
| 183 | passwordEncrypt = aes4go.Encrypt(remoteInfo.Password, aesDecryptKey) |
| 184 | } |
| 185 | |
| 186 | //2. insert or update |
| 187 | if single != nil { //2.1. update |
| 188 | stmt, err := db.Prepare(`update remote |
| 189 | set r_addr=?, r_port=?, r_username=?, r_auth_type=?, r_password=? |
| 190 | where r_id=? or r_addr=?`) |
| 191 | if err != nil { |
| 192 | return id, err |
| 193 | } |
| 194 | _, err = stmt.Exec(remoteInfo.Addr, remoteInfo.SSHPort, remoteInfo.UserName, remoteInfo.AuthType, passwordEncrypt, |
| 195 | remoteInfo.ID, remoteInfo.Addr) |
| 196 | if err != nil { |
| 197 | return -1, err |
| 198 | } |
| 199 | |
| 200 | id = single.ID |
| 201 | |
| 202 | } else { //2.2. insert |
| 203 | stmt, err := db.Prepare(`INSERT INTO remote(r_addr, r_port, r_username, r_auth_type, r_password) |
| 204 | values(?, ?, ?, ?, ?)`) |
| 205 | if err != nil { |
| 206 | return id, err |
| 207 | } |
| 208 | res, err := stmt.Exec(remoteInfo.Addr, remoteInfo.SSHPort, remoteInfo.UserName, remoteInfo.AuthType, passwordEncrypt) |
| 209 | if err != nil { |
| 210 | return id, err |
| 211 | } |
| 212 | id64, err := res.LastInsertId() |
| 213 | id = int(id64) |
| 214 | return id, err |
| 215 | } |
| 216 | |
| 217 | return id, err |
| 218 | } |
no test coverage detected