software
This commit is contained in:
@@ -576,7 +576,6 @@ func ImportCmToNF(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DownloadNeBackupFile(w http.ResponseWriter, r *http.Request) {
|
||||
|
||||
@@ -3,6 +3,7 @@ package cm
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
@@ -185,7 +186,181 @@ func UploadSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func UploadSoftwareMultiFile(w http.ResponseWriter, r *http.Request) {
|
||||
log.Debug("UploadSoftwareFile processing... ")
|
||||
|
||||
_, err := services.CheckFrontValidRequest(w, r)
|
||||
if err != nil {
|
||||
log.Error("Http request error:", err)
|
||||
return
|
||||
}
|
||||
|
||||
vars := mux.Vars(r)
|
||||
neType := vars["neType"]
|
||||
if neType == "" {
|
||||
log.Error("neType is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
neTypeUpper := strings.ToUpper(neType)
|
||||
neTypeLower := strings.ToLower(neType)
|
||||
|
||||
version := vars["version"]
|
||||
if version == "" {
|
||||
log.Error("version is empty")
|
||||
services.ResponseNotFound404UriNotExist(w, r)
|
||||
return
|
||||
}
|
||||
md5Param := services.GetUriParamString(r, "md5Sum", ",", false, false)
|
||||
|
||||
softwarePath := fmt.Sprintf("%s/%s", config.GetYamlConfig().OMC.Software, neTypeLower)
|
||||
//fileName, err := services.HandleUploadFile(r, softwarePath, "")
|
||||
|
||||
// 解析multipart/form-data请求
|
||||
err = r.ParseMultipartForm(100 << 20) // 100MB
|
||||
if err != nil {
|
||||
log.Error("Faile to ParseMultipartForm:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取文件和数据
|
||||
swFile := r.MultipartForm.File["file"]
|
||||
cmsFile := r.MultipartForm.File["cms"]
|
||||
data := r.MultipartForm.Value["comment"]
|
||||
|
||||
var softwareFileName, cmsFileName, comment string
|
||||
|
||||
// 处理软件rpm/deb文件
|
||||
if len(swFile) > 0 {
|
||||
file := swFile[0]
|
||||
// 打开文件
|
||||
f, err := file.Open()
|
||||
if err != nil {
|
||||
log.Error("Faile to Open:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
// 创建本地文件
|
||||
dst, err := os.Create(softwarePath + "/" + file.Filename)
|
||||
if err != nil {
|
||||
log.Error("Faile to Create:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
defer dst.Close()
|
||||
|
||||
softwareFileName = file.Filename
|
||||
// 将文件内容拷贝到本地文件
|
||||
_, err = io.Copy(dst, f)
|
||||
if err != nil {
|
||||
log.Error("Faile to Copy:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 处理cms文件
|
||||
if len(cmsFile) > 0 {
|
||||
file := cmsFile[0]
|
||||
// 打开文件
|
||||
f, err := file.Open()
|
||||
if err != nil {
|
||||
log.Error("Faile to Open:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
// 创建本地文件
|
||||
dst, err := os.Create(softwarePath + "/" + file.Filename)
|
||||
if err != nil {
|
||||
log.Error("Faile to Create:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
defer dst.Close()
|
||||
|
||||
cmsFileName = file.Filename
|
||||
// 将文件内容拷贝到本地文件
|
||||
_, err = io.Copy(dst, f)
|
||||
if err != nil {
|
||||
log.Error("Faile to Copy:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 处理数据
|
||||
if len(data) > 0 {
|
||||
comment = data[0]
|
||||
}
|
||||
|
||||
if config.GetYamlConfig().OMC.CheckSign && cmsFileName != "" {
|
||||
rpmFilePath := softwarePath + "/" + softwareFileName
|
||||
cmsFileName := cmsFileName
|
||||
cmsFilePath := softwarePath + "/" + cmsFileName
|
||||
log.Debugf("cmsFilePath:%s rpmFilePath:%s publicKey:%s", rpmFilePath, cmsFilePath, config.GetYamlConfig().Auth.PublicKey)
|
||||
result := verify_signature(config.GetYamlConfig().Auth.PublicKey, cmsFilePath, rpmFilePath)
|
||||
log.Debug("result:", result.String())
|
||||
if !strings.Contains(result.String(), SoftwareVerifiedOk) {
|
||||
err = global.ErrCMNotMatchSignFile
|
||||
log.Error(err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
// cmd := exec.Command("rpm", "-K", filePath)
|
||||
// out, err := cmd.CombinedOutput()
|
||||
// log.Debugf("Exec outpout:%s", string(out))
|
||||
// if err != nil {
|
||||
// log.Error("Failed to execute rpm:", err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
// if !strings.Contains(string(out), DigestsSignOkString) {
|
||||
// err = global.ErrCMNotMatchSignFile
|
||||
// log.Error(err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
}
|
||||
|
||||
// //neBackup := dborm.NeBackup{NeType: neType, NeId: neId, Md5Sum: md5Sum}
|
||||
// //log.Debug("neBackup:", neBackup)
|
||||
// where := fmt.Sprintf("ne_type='%s' and version='%s'", neTypeUpper, version)
|
||||
// has, err := dborm.XormExistTableOne("ne_software", where)
|
||||
// if err != nil {
|
||||
// log.Error("Faile to XormInsertTableOne:", err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// } else if has == true {
|
||||
// err = global.ErrCMExistSoftwareFile
|
||||
// log.Error(err)
|
||||
// services.ResponseInternalServerError500ProcessError(w, err)
|
||||
// return
|
||||
// }
|
||||
|
||||
neSoftware := dborm.NeSoftware{
|
||||
NeType: neTypeUpper,
|
||||
FileName: softwareFileName,
|
||||
Path: softwarePath,
|
||||
Version: version,
|
||||
Md5Sum: md5Param,
|
||||
Comment: comment,
|
||||
}
|
||||
|
||||
_, err = dborm.XormInsertTableOne("ne_software", neSoftware)
|
||||
if err != nil {
|
||||
log.Error("Faile to XormInsertTableOne:", err)
|
||||
services.ResponseInternalServerError500ProcessError(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
}
|
||||
|
||||
func DownloadSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -232,7 +407,6 @@ func DownloadSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
md5Sum := (*neSoftware)[0]["md5_sum"]
|
||||
|
||||
services.ResponseFileWithNameAndMD5(w, http.StatusOK, fileName, path, md5Sum)
|
||||
return
|
||||
}
|
||||
|
||||
func DeleteSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -293,7 +467,6 @@ func DeleteSoftwareFile(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
services.ResponseStatusOK204NoContent(w)
|
||||
return
|
||||
}
|
||||
|
||||
func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) {
|
||||
@@ -402,7 +575,7 @@ func DistributeSoftwareToNF(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
idNeVersion, err := strconv.Atoi((*neVersion)[0]["id"])
|
||||
idNeVersion, _ := strconv.Atoi((*neVersion)[0]["id"])
|
||||
neVersionData := dborm.NeVersion{
|
||||
NeType: neTypeUpper,
|
||||
NeId: neInfo.NeId,
|
||||
@@ -496,7 +669,7 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) {
|
||||
if config.GetYamlConfig().OMC.TestMode == false {
|
||||
filePath := (*neVersion)[0]["file_path"]
|
||||
sshHost := fmt.Sprintf("%s@%s", config.GetYamlConfig().NE.User, neInfo.Ip)
|
||||
rpmCmd := fmt.Sprintf("rpm -Uvh '%s'", filePath)
|
||||
rpmCmd := fmt.Sprintf("sudo rpm -Uvh '%s'", filePath)
|
||||
cmd := exec.Command("ssh", sshHost, rpmCmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
log.Tracef("Exec output: %v", string(out))
|
||||
|
||||
Reference in New Issue
Block a user