This commit is contained in:
LinkLeong 2022-11-29 02:25:26 +00:00
parent 60608c5dc7
commit eb31bf5586
7 changed files with 91 additions and 2 deletions

View file

@ -30,6 +30,7 @@ const (
Record_NOT_EXIST = 20007
Record_ALREADY_EXIST = 20008
SERVICE_NOT_RUNNING = 20009
CHARACTER_LIMIT = 20010
//disk
NAME_NOT_AVAILABLE = 40001
@ -85,6 +86,7 @@ var MsgFlags = map[int]string{
Record_ALREADY_EXIST: "Record already exists",
Record_NOT_EXIST: "Record does not exist",
SERVICE_NOT_RUNNING: "Service is not running",
CHARACTER_LIMIT: "Only uppercase letters, lowercase letters and numbers are allowed for username and password.",
//app
UNINSTALL_APP_ERROR: "Error uninstalling app",

View file

@ -70,12 +70,23 @@ func SendAllHardwareStatusBySocket() {
}
}
cpu := service.MyService.System().GetCpuPercent()
var cpuModel = "arm"
if cpu := service.MyService.System().GetCpuInfo(); len(cpu) > 0 {
if strings.Count(strings.ToLower(strings.TrimSpace(cpu[0].ModelName)), "intel") > 0 {
cpuModel = "intel"
} else if strings.Count(strings.ToLower(strings.TrimSpace(cpu[0].ModelName)), "amd") > 0 {
cpuModel = "amd"
}
}
num := service.MyService.System().GetCpuCoreNum()
cpuData := make(map[string]interface{})
cpuData["percent"] = cpu
cpuData["num"] = num
cpuData["temperature"] = service.MyService.System().GetCPUTemperature()
cpuData["power"] = service.MyService.System().GetCPUPower()
cpuData["model"] = cpuModel
memInfo := service.MyService.System().GetMemInfo()

View file

@ -152,6 +152,7 @@ func InitRouter() *gin.Engine {
// v1SysGroup.GET("/port", v1.GetCasaOSPort)
// v1SysGroup.PUT("/port", v1.PutCasaOSPort)
v1SysGroup.GET("/proxy", v1.GetSystemProxy)
v1SysGroup.PUT("/state/:state", v1.PutSystemState)
}
v1PortGroup := v1Group.Group("/port")
v1PortGroup.Use()

View file

@ -622,6 +622,11 @@ func UnInstallApp(c *gin.Context) {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.INVALID_PARAMS, Message: common_err.GetMsg(common_err.INVALID_PARAMS)})
return
}
j := make(map[string]string)
c.ShouldBind(&j)
isDelete := j["delete_config_folder"]
//info := service.MyService.App().GetUninstallInfo(appId)
info, err := service.MyService.Docker().DockerContainerInfo(appId)
@ -646,7 +651,7 @@ func UnInstallApp(c *gin.Context) {
// stepremove image
service.MyService.Docker().DockerImageRemove(info.Config.Image)
if info.Config.Labels["origin"] != "custom" {
if info.Config.Labels["origin"] != "custom" && len(isDelete) > 0 {
//step: 删除文件夹
for _, v := range info.Mounts {
if strings.Contains(v.Source, info.Name) {

View file

@ -14,12 +14,14 @@ import (
"fmt"
"os"
"path/filepath"
"regexp"
"strings"
"github.com/IceWhaleTech/CasaOS/model"
"github.com/IceWhaleTech/CasaOS/pkg/samba"
"github.com/IceWhaleTech/CasaOS/pkg/utils/common_err"
"github.com/IceWhaleTech/CasaOS/pkg/utils/file"
"github.com/IceWhaleTech/CasaOS/pkg/utils/ip_helper"
"github.com/IceWhaleTech/CasaOS/service"
model2 "github.com/IceWhaleTech/CasaOS/service/model"
"github.com/gin-gonic/gin"
@ -125,9 +127,27 @@ func PostSambaConnectionsCreate(c *gin.Context) {
connection.Port = "445"
}
if connection.Username == "" || connection.Host == "" {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.CHARACTER_LIMIT, Message: common_err.GetMsg(common_err.CHARACTER_LIMIT)})
return
}
if ok, _ := regexp.MatchString("^[a-zA-Z0-9]{4,30}$", connection.Password); !ok {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.CHARACTER_LIMIT, Message: common_err.GetMsg(common_err.CHARACTER_LIMIT)})
return
}
if ok, _ := regexp.MatchString("^[a-zA-Z0-9]{4,30}$", connection.Username); !ok {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.INVALID_PARAMS, Message: common_err.GetMsg(common_err.INVALID_PARAMS)})
return
}
if !ip_helper.IsIPv4(connection.Host) && !ip_helper.IsIPv6(connection.Host) {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.INVALID_PARAMS, Message: common_err.GetMsg(common_err.INVALID_PARAMS)})
return
}
if ok, _ := regexp.MatchString("^[0-9]{1,6}$", connection.Port); !ok {
c.JSON(common_err.CLIENT_ERROR, model.Result{Success: common_err.INVALID_PARAMS, Message: common_err.GetMsg(common_err.INVALID_PARAMS)})
return
}
connection.Host = strings.Split(connection.Host, "/")[0]
// check is exists
connections := service.MyService.Connections().GetConnectionByHost(connection.Host)

View file

@ -228,11 +228,20 @@ func GetSystemUtilization(c *gin.Context) {
data := make(map[string]interface{})
cpu := service.MyService.System().GetCpuPercent()
num := service.MyService.System().GetCpuCoreNum()
var cpuModel = "arm"
if cpu := service.MyService.System().GetCpuInfo(); len(cpu) > 0 {
if strings.Count(strings.ToLower(strings.TrimSpace(cpu[0].ModelName)), "intel") > 0 {
cpuModel = "intel"
} else if strings.Count(strings.ToLower(strings.TrimSpace(cpu[0].ModelName)), "amd") > 0 {
cpuModel = "amd"
}
}
cpuData := make(map[string]interface{})
cpuData["percent"] = cpu
cpuData["num"] = num
cpuData["temperature"] = service.MyService.System().GetCPUTemperature()
cpuData["power"] = service.MyService.System().GetCPUPower()
cpuData["model"] = cpuModel
data["cpu"] = cpuData
data["mem"] = service.MyService.System().GetMemInfo()
@ -358,3 +367,21 @@ func GetSystemProxy(c *gin.Context) {
// 复制转发的响应Body到响应Body
io.Copy(c.Writer, ioutil.NopCloser(bytes.NewBuffer(rda)))
}
func PutSystemState(c *gin.Context) {
state := c.Param("state")
if state == "off" {
go func() {
time.Sleep(30 * time.Second)
service.MyService.System().SystemShutdown()
}()
} else if state == "restart" {
go func() {
time.Sleep(30 * time.Second)
service.MyService.System().SystemReboot()
}()
}
c.JSON(http.StatusOK, model.Result{Success: common_err.SUCCESS, Message: common_err.GetMsg(common_err.SUCCESS), Data: "The operation will be executed after 30 seconds"})
}

View file

@ -5,6 +5,7 @@ import (
"io/ioutil"
net2 "net"
"os"
"os/exec"
"path/filepath"
"runtime"
"strconv"
@ -52,6 +53,8 @@ type SystemService interface {
GetCPUTemperature() int
GetCPUPower() map[string]string
GetMacAddress() (string, error)
SystemReboot() error
SystemShutdown() error
}
type systemService struct{}
@ -364,6 +367,26 @@ func (s *systemService) GetCPUPower() map[string]string {
return data
}
func (s *systemService) SystemReboot() error {
arg := []string{"6"}
cmd := exec.Command("init", arg...)
_, err := cmd.CombinedOutput()
if err != nil {
return err
}
return nil
}
func (s *systemService) SystemShutdown() error {
arg := []string{"0"}
cmd := exec.Command("init", arg...)
_, err := cmd.CombinedOutput()
if err != nil {
return err
}
return nil
}
func NewSystemService() SystemService {
return &systemService{}
}