func BatchDeleteVm(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var infos []struct { ID uint } if err := r.DecodeJSONPayload(&infos); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } for _, info := range infos { _, errDevice := repo.DeleteVmDeviceById(info.ID) if errDevice != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errDevice.Error()}) return } } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func GetNetworkList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Limit uint Offset uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } mods, err := repo.GetNetworkListWithPage(info.Limit, info.Offset) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["list"] = mods //总条数 count, err := repo.CountNetwork() if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result["recordCount"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func GetScanDeviceModelName(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string Product string UserID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Company = strings.TrimSpace(info.Company) info.Product = strings.TrimSpace(info.Product) var where string where = "device_id = 0 and company = '" + info.Company + "'" if info.Product != "" { where += " and product = '" + info.Product + "'" } if info.UserID > uint(0) { where += " and user_id = '" + fmt.Sprintf("%d", info.UserID) + "'" } mod, err := repo.GetManufacturerModelNameByGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func FormatLocationToTreeByPid(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Pid uint SelectPid uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } //var initContent []map[string]interface{} mods, err := repo.FormatLocationToTreeByPid(info.Pid, nil, 0, info.SelectPid) //mods, err := repo.FormatLocationToTreeByPid(info.Pid) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mods}) }
func GetScanDeviceProduct(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Company = strings.TrimSpace(info.Company) var where string where = "device_id = 0 and company = '" + info.Company + "'" mod, err := repo.GetManufacturerProductByGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func DeleteUserById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } _, errAccessToken := VerifyAccessToken(info.AccessToken, ctx, true) if errAccessToken != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAccessToken.Error()}) return } osConfig, err := repo.DeleteUserById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } errAssign := repo.AssignManufacturerNewOnwer(uint(0), info.ID) if errAssign != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAssign.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": osConfig}) }
func DeleteNetworkById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } mod, err := repo.DeleteNetworkById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } _, errDelete := repo.DeleteIpByNetworkId(info.ID) if errDelete != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errDelete.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func UpdateMyInfo(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint Password string Name string PhoneNumber string Permission string Status string Role string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.Password = strings.TrimSpace(info.Password) info.Name = strings.TrimSpace(info.Name) info.PhoneNumber = strings.TrimSpace(info.PhoneNumber) info.AccessToken = strings.TrimSpace(info.AccessToken) _, errAccessToken := VerifyAccessToken(info.AccessToken, ctx, false) if errAccessToken != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAccessToken.Error()}) return } user, err := repo.GetUserById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if info.Password == "" { info.Password = user.Password } else { encodePassword, err := util.EncodePassword(info.Password) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } info.Password = encodePassword } info.Permission = user.Permission info.Status = user.Status info.Role = user.Role mod, err := repo.UpdateUserById(info.ID, info.Password, info.Name, info.PhoneNumber, info.Permission, info.Status, info.Role) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func DeleteHardwareById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } hardware, err := repo.GetHardwareById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if hardware.IsSystemAdd == "Yes" { //w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "系统添加的配置不允许删除!"}) //return } mod, err := repo.DeleteHardwareById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func SavePlatformConfig(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Name string Content string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } info.Name = strings.TrimSpace(info.Name) info.Content = strings.TrimSpace(info.Content) if info.Name == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } count, err := repo.CountPlatformConfigByName(info.Name) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { platformConfig, err := repo.GetPlatformConfigByName(info.Name) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } _, errUpdate := repo.UpdatePlatformConfigById(platformConfig.ID, info.Name, info.Content) if errUpdate != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errUpdate.Error()}) return } } else { _, err := repo.AddPlatformConfig(info.Name, info.Content) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
//重装 func BatchReInstall(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var infos []struct { ID uint } if err := r.DecodeJSONPayload(&infos); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } for _, info := range infos { _, err := repo.ReInstallDeviceById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } //log device, err := repo.GetDeviceById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } logContent := make(map[string]interface{}) logContent["data"] = device json, err := json.Marshal(logContent) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "操作失败:" + err.Error()}) return } _, errAddLog := repo.AddDeviceLog(info.ID, "重装设备", "operate", string(json)) if errAddLog != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAddLog.Error()}) return } _, errLog := repo.UpdateDeviceLogTypeByDeviceIdAndType(info.ID, "install", "install_history") if errLog != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errLog.Error()}) return } /* //删除LOG _, errLog := repo.DeleteDeviceLogByDeviceID(info.ID) if errLog != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errLog.Error()}) return } */ } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func GetDeviceNumByStatus(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Status string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.Status = strings.TrimSpace(info.Status) var where string where = " where t1.id > 0 " where += " and t1.status = '" + info.Status + "'" //总条数 count, err := repo.CountDevice(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["count"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func ValidateSn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Sn string } info.Sn = strings.TrimSpace(info.Sn) if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if info.Sn == "" { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "SN参数不能为空!", "Content": ""}) return } count, err := repo.CountDeviceBySn(info.Sn) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "参数错误!"}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "该SN已存在,继续填写会覆盖旧的数据!"}) } else { w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "SN填写正确!"}) } }
//获取cidr信息 func GetCidrInfoByNetwork(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { _, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } logger, ok := middleware.LoggerFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Network string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Network = strings.TrimSpace(info.Network) //处理网段 network, err := util.GetCidrInfo(info.Network, logger) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": network}) }
func GetModelNameByWhereAndGroup(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string Product string IsSystemAdd string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } where := " company = '" + info.Company + "'" if info.Product != "" { where += " and product = '" + info.Product + "'" } if info.IsSystemAdd != "" { where += " and is_system_add = '" + info.IsSystemAdd + "'" } mod, err := repo.GetModelNameByWhereAndGroup(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func SaveDeviceInstallCallback(ctx context.Context, deviceId uint, callbackType string, content string) error { content = strings.TrimSpace(content) if content == "" { return nil } repo, ok := middleware.RepoFromContext(ctx) if !ok { return errors.New("内部服务器错误") } countCallback, errCount := repo.CountDeviceInstallCallbackByDeviceIDAndType(deviceId, callbackType) if errCount != nil { return errCount } if countCallback > 0 { callback, err := repo.GetDeviceInstallCallbackByDeviceIDAndType(deviceId, callbackType) if err != nil { return err } _, errUpdateCallback := repo.UpdateDeviceInstallCallbackByID(callback.ID, deviceId, callbackType, content, "", "", "") if errUpdateCallback != nil { return errUpdateCallback } } else { _, errAddCallback := repo.AddDeviceInstallCallback(deviceId, callbackType, content, "", "", "") if errAddCallback != nil { return errAddCallback } } return nil }
//添加 func AddHardware(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Company string Product string ModelName string Raid string Oob string Bios string IsSystemAdd string Tpl string Data string Source string Version string Status string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Company = strings.TrimSpace(info.Company) info.Product = strings.TrimSpace(info.Product) info.ModelName = strings.TrimSpace(info.ModelName) info.IsSystemAdd = strings.TrimSpace(info.IsSystemAdd) info.Tpl = strings.TrimSpace(info.Tpl) info.Data = strings.TrimSpace(info.Data) info.Source = strings.TrimSpace(info.Source) info.Version = strings.TrimSpace(info.Version) info.Status = strings.TrimSpace(info.Status) if info.Company == "" || info.Product == "" || info.ModelName == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } count, err := repo.CountHardwareByCompanyAndProductAndName(info.Company, info.Product, info.ModelName) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该硬件型号已存在!"}) return } _, errAdd := repo.AddHardware(info.Company, info.Product, info.ModelName, info.Raid, info.Oob, info.Bios, info.IsSystemAdd, info.Tpl, info.Data, info.Source, info.Version, info.Status) if errAdd != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAdd.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func DeleteLocationById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } locationIds, err := repo.FormatChildLocationIdById(info.ID, "", ",") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } count, err := repo.CountDeviceByWhere("location_id in (" + locationIds + ")") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if count > 0 { devices, err := repo.GetDeviceByWhere("location_id in (" + locationIds + ")") if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } var str string for k, device := range devices { if k != len(devices)-1 { str += device.Sn + "," } else { str += device.Sn } } w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "下列设备正在使用此位置,不能删除! <br />SN:(" + str + ")"}) return } mod, err := repo.DeleteLocationById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mod}) }
func GetDeviceInstallCallbackList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { DeviceId uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } where := fmt.Sprintf("device_id = %d", info.DeviceId) order := "id asc" list, err := repo.GetDeviceInstallCallbackByWhere(where, order) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } var rows []model.DeviceInstallCallback for _, callback := range list { device, err := repo.GetDeviceById(callback.DeviceID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } callback.Content = strings.Replace(callback.Content, "<{sn}>", device.Sn, -1) callback.Content = strings.Replace(callback.Content, "<{hostname}>", device.Hostname, -1) callback.Content = strings.Replace(callback.Content, "<{ip}>", device.Ip, -1) callback.Content = strings.Replace(callback.Content, "<{manage_ip}>", device.ManageIp, -1) if device.NetworkID > uint(0) { network, _ := repo.GetNetworkById(device.NetworkID) callback.Content = strings.Replace(callback.Content, "<{gateway}>", network.Gateway, -1) callback.Content = strings.Replace(callback.Content, "<{netmask}>", network.Netmask, -1) } if device.ManageNetworkID > uint(0) { manageNetwork, _ := repo.GetManageNetworkById(device.ManageNetworkID) callback.Content = strings.Replace(callback.Content, "<{manage_gateway}>", manageNetwork.Gateway, -1) callback.Content = strings.Replace(callback.Content, "<{manage_netmask}>", manageNetwork.Netmask, -1) } callback.Content = strings.Replace(callback.Content, "\n", "<br />", -1) callback.RunResult = strings.Replace(callback.RunResult, "\n", "<br />", -1) rows = append(rows, callback) } result := make(map[string]interface{}) result["list"] = rows w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func BatchAssignManufacturerOnwer(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var infos []struct { ID uint UserID uint AccessToken string } session, errSession := GetSession(w, r) if errSession != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + errSession.Error()}) return } if err := r.DecodeJSONPayload(&infos); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } for _, info := range infos { if session.ID <= uint(0) { accessTokenUser, errAccessToken := VerifyAccessToken(info.AccessToken, ctx, false) if errAccessToken != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAccessToken.Error()}) return } session.ID = accessTokenUser.ID session.Role = accessTokenUser.Role } if session.Role != "Administrator" { w.WriteJSON(map[string]interface{}{"Status": "failure", "Message": "权限不足!"}) return } manufacturer, err := repo.GetManufacturerById(info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } _, errUpdate := repo.AssignManufacturerOnwer(manufacturer.ID, info.UserID) if errUpdate != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errUpdate.Error()}) return } } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func GetUserList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Limit uint Offset uint Status string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } session, errSession := GetSession(w, r) if errSession != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + errSession.Error()}) return } if session.Username == "" { _, errAccessToken := VerifyAccessToken(info.AccessToken, ctx, true) if errAccessToken != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAccessToken.Error()}) return } } var where = "" if info.Status != "" { where += " and status = '" + info.Status + "'" } mods, err := repo.GetUserListWithPage(info.Limit, info.Offset, where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["list"] = mods //总条数 count, err := repo.CountUser(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result["recordCount"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func CreateNewMacAddress(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } fmt.Println(repo) mac := util.CreateNewMacAddress() w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": mac}) }
func RunCreateVm(ctx context.Context, vmDeviceId uint) error { repo, ok := middleware.RepoFromContext(ctx) if !ok { return errors.New("内部服务器错误") } logger, ok := middleware.LoggerFromContext(ctx) if !ok { return errors.New("内部服务器错误") } vmDevice, err := repo.GetVmDeviceById(vmDeviceId) if err != nil { return err } device, err := repo.GetDeviceById(vmDevice.DeviceID) if err != nil { return err } var cmdFormat = `LANG=C virt-install --connect qemu+ssh://root@%s/system \ --name=%s \ --os-type=windows \ --vcpus=%d \ --ram=%d \ --hvm \ --boot hd,network,menu=on \ --accelerate \ --graphics vnc,listen=0.0.0.0,port=%s \ --noautoconsole \ --autostart \ --network bridge=br0,model=virtio,mac=%s \ --disk path=/dev/VolGroup0/%s,device=disk,bus=virtio,cache=none,sparse=false,format=raw` var cmd = fmt.Sprintf(cmdFormat, device.Ip, vmDevice.Hostname, vmDevice.CpuCoresNumber, vmDevice.MemoryCurrent, vmDevice.VncPort, vmDevice.Mac, vmDevice.Hostname) logger.Debugf("create vm:%s", cmd) var runResult = "执行脚本:\n" + cmd bytes, err := util.ExecScript(cmd) logger.Debugf("create result:%s", string(bytes)) runResult += "\n\n" + "执行结果:\n" + string(bytes) if err != nil { logger.Errorf("create error:%s", err.Error()) runResult += "\n\n" + "错误信息:\n" + err.Error() return errors.New(runResult) } return nil }
func UpdateOsConfigById(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { ID uint Name string Pxe string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } info.Name = strings.TrimSpace(info.Name) info.Pxe = strings.TrimSpace(info.Pxe) info.Pxe = strings.Replace(info.Pxe, "\r\n", "\n", -1) if info.Name == "" || info.Pxe == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } count, err := repo.CountOsConfigByNameAndId(info.Name, info.ID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该操作系统版本已存在!"}) return } osConfig, err := repo.UpdateOsConfigById(info.ID, info.Name, info.Pxe) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": osConfig}) }
func GetVmDeviceLogByDeviceIdAndType(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { DeviceID uint Type string Order string MaxID uint } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } if info.Order == "" { info.Order = "id DESC" } mods, err := repo.GetVmDeviceLogListByDeviceIDAndType(info.DeviceID, info.Type, info.Order, info.MaxID) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } type log struct { ID uint DeviceID uint Title string Type string Content string CreatedAt utils.ISOTime UpdatedAt utils.ISOTime } var result []log for _, v := range mods { var row log row.ID = v.ID row.DeviceID = v.DeviceID row.Title = v.Title row.Type = v.Type row.Content = v.Content row.CreatedAt = utils.ISOTime(v.CreatedAt) row.UpdatedAt = utils.ISOTime(v.UpdatedAt) result = append(result, row) } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func GetSystemBySn(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { var info struct { Sn string Type string } info.Sn = r.FormValue("sn") info.Type = r.FormValue("type") info.Sn = strings.TrimSpace(info.Sn) info.Type = strings.TrimSpace(info.Type) if info.Type == "" { info.Type = "raw" } repo, ok := middleware.RepoFromContext(ctx) if !ok { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误", "Content": ""}) } return } if info.Sn == "" { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "SN参数不能为空"}) } return } mod, err := repo.GetSystemBySn(info.Sn) if err != nil { if info.Type == "raw" { w.Write([]byte("")) } else { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error(), "Content": ""}) } return } if info.Type == "raw" { w.Header().Add("Content-type", "text/html; charset=utf-8") w.Write([]byte(mod.Content)) } else { w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "成功获取system信息", "Content": mod}) } }
//添加 func AddSystemConfig(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Name string Content string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Name = strings.TrimSpace(info.Name) info.Content = strings.TrimSpace(info.Content) info.Content = strings.Replace(info.Content, "\r\n", "\n", -1) info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } if info.Name == "" || info.Content == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } count, err := repo.CountSystemConfigByName(info.Name) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该系统模板名已存在!"}) return } _, errAdd := repo.AddSystemConfig(info.Name, info.Content) if errAdd != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAdd.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }
func GetDeviceInstallReport(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } where := "`status` = 'success'" count, err := repo.CountDeviceInstallReportByWhere(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } where = "`status` = 'success'" productReport, err := repo.GetDeviceProductNameInstallReport(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } where = "`status` = 'success'" companyReport, err := repo.GetDeviceCompanyNameInstallReport(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } where = "`status` = 'success'" osReport, err := repo.GetDeviceOsNameInstallReport(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } where = "`status` = 'success'" hardwareReport, err := repo.GetDeviceHardwareNameInstallReport(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["Count"] = count result["ProductReport"] = productReport result["CompanyReport"] = companyReport result["HardwareReport"] = hardwareReport result["OsReport"] = osReport w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
func GetHardwareList(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Limit uint Offset uint Company string Product string ModelName string IsSystemAdd string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误" + err.Error()}) return } var where string if info.Company != "" { where += " and company = '" + info.Company + "' " } if info.Product != "" { where += " and product = '" + info.Product + "' " } if info.ModelName != "" { where += " and model_name = '" + info.ModelName + "' " } if info.IsSystemAdd != "" { where += " and is_system_add = '" + info.IsSystemAdd + "' " } mods, err := repo.GetHardwareListWithPage(info.Limit, info.Offset, where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result := make(map[string]interface{}) result["list"] = mods //总条数 count, err := repo.CountHardware(where) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } result["recordCount"] = count w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功", "Content": result}) }
//添加 func AddLocation(ctx context.Context, w rest.ResponseWriter, r *rest.Request) { repo, ok := middleware.RepoFromContext(ctx) if !ok { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "内部服务器错误"}) return } var info struct { Pid uint Name string AccessToken string } if err := r.DecodeJSONPayload(&info); err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "参数错误"}) return } info.Name = strings.TrimSpace(info.Name) info.AccessToken = strings.TrimSpace(info.AccessToken) _, errVerify := VerifyAccessPurview(info.AccessToken, ctx, true, w, r) if errVerify != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errVerify.Error()}) return } if info.Name == "" { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "请将信息填写完整!"}) return } count, err := repo.CountLocationByNameAndPid(info.Name, info.Pid) if err != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": err.Error()}) return } if count > 0 { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": "该位置名已存在!"}) return } _, errAdd := repo.AddLocation(info.Pid, info.Name) if errAdd != nil { w.WriteJSON(map[string]interface{}{"Status": "error", "Message": errAdd.Error()}) return } w.WriteJSON(map[string]interface{}{"Status": "success", "Message": "操作成功"}) }