From 2b2193e255e55fe55dedf7dce0e6bdc22f4860ee Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期六, 19 八月 2023 19:39:11 +0800 Subject: [PATCH] 修改网络设调用禁用或停用脚本 --- api/v1/plc.go | 14 +-- /dev/null | 87 --------------------- utils/cmd.go | 33 ++++++++ conf/config.go | 23 +++-- conf/apsClient.json | 5 + api/v1/config.go | 21 +++++ 6 files changed, 76 insertions(+), 107 deletions(-) diff --git a/api/v1/config.go b/api/v1/config.go index 43065ad..96a1c3e 100644 --- a/api/v1/config.go +++ b/api/v1/config.go @@ -1,6 +1,7 @@ package v1 import ( + "apsClient/conf" "apsClient/model" "apsClient/model/request" _ "apsClient/model/response" @@ -8,6 +9,8 @@ "apsClient/pkg/ecode" "apsClient/pkg/logx" "apsClient/service" + "apsClient/utils" + "fmt" "github.com/gin-gonic/gin" ) @@ -56,13 +59,29 @@ ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇缃戠粶閰嶇疆澶辫触") return } - err = service.NewConfigService().SetNetConfig(params.Id, ¶ms) if err != nil { logx.Errorf("SetNetConfig error: %v", err.Error()) ctx.FailWithMsg(ecode.DBErr, "璁剧疆澶辫触") return } + if conf.Conf.System.NetSetShellPath == "" || conf.Conf.System.NetUpShellName == "" || conf.Conf.System.NetDownShellName == "" { + ctx.FailWithMsg(ecode.DBErr, "璇峰厛閰嶇疆缃戠粶璁剧疆璺緞鍜岃剼鏈悕") + return + } + var shName string + if params.Status == model.NetConfigStatusEnabled { + shName = conf.Conf.System.NetUpShellName + } else { + shName = conf.Conf.System.NetDownShellName + } + sh := fmt.Sprintf("%s %v %v %v", shName, params.IP, params.MASK, params.Gateway) + err = utils.Cmd(conf.Conf.System.NetSetShellPath, sh) + if err != nil { + logx.Errorf("network update failed: %v", err.Error()) + ctx.FailWithMsg(ecode.UnknownErr, "缃戠粶璁剧疆澶辫触") + return + } ctx.Ok() } diff --git a/api/v1/plc.go b/api/v1/plc.go index 2a93a15..0d91e0e 100644 --- a/api/v1/plc.go +++ b/api/v1/plc.go @@ -11,7 +11,6 @@ "apsClient/service" "encoding/json" "github.com/gin-gonic/gin" - "github.com/spf13/cast" ) type PlcApi struct{} @@ -48,8 +47,10 @@ ipAddr = plcConfig.Address } + resp := new(response.ProductProgress) if startAddress == 0 || valueType == "" { - ctx.FailWithMsg(ecode.UnknownErr, "璇峰厛閰嶇疆PLC") + ctx.OkWithDetailed(resp) + logx.Warnf("璇峰厛閰嶇疆PLC") return } conn, err := plc.NewModbusConnection(ipAddr) @@ -58,26 +59,23 @@ } if err != nil { - ctx.FailWithMsg(ecode.UnknownErr, "杩炴帴plc澶辫触") + ctx.OkWithDetailed(resp) logx.Errorf("GetProductProgress 杩炴帴plc澶辫触: %v", err.Error()) return } rawData, err := plc.ReadHoldingRegister(conn, startAddress, dataLength) if err != nil { - ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇plc鏁版嵁澶辫触") + ctx.OkWithDetailed(resp) logx.Errorf("GetProductProgress 鑾峰彇plc鏁版嵁澶辫触: %v", err.Error()) return } var finishNumber interface{} err = json.Unmarshal(rawData, &finishNumber) if err != nil { - ctx.FailWithMsg(ecode.UnknownErr, "鑾峰彇鐢熶骇杩涘害鏁版嵁瑙f瀽澶辫触") + ctx.OkWithDetailed(resp) logx.Errorf("GetProductProgress 鑾峰彇鐢熶骇杩涘害鏁版嵁瑙f瀽澶辫触: %v, data: %v, valueType:%v", err.Error(), rawData, valueType) return - } - resp := response.ProductProgress{ - FinishNumber: cast.ToInt(finishNumber), } ctx.OkWithDetailed(resp) } diff --git a/conf/apsClient.json b/conf/apsClient.json index e4fb3f9..ef329b9 100644 --- a/conf/apsClient.json +++ b/conf/apsClient.json @@ -8,7 +8,10 @@ "LimitTimeIP": 3600, "RouterPrefix": "api", "SudoPassword": "basic2021", - "deviceId": "DeviceID 1" + "deviceId": "DeviceID 1", + "netSetShellPath": "/data/network", + "netUpShellName": "up.sh", + "netDownShellName": "down.sh" }, "log": { "path": "./logs/apsClient.log", diff --git a/conf/config.go b/conf/config.go index c28317b..cdd7133 100644 --- a/conf/config.go +++ b/conf/config.go @@ -24,16 +24,19 @@ type ( System struct { - Env string // 鐜鍊� develop test public - Port int // 绔彛 - DbType string // 鏁版嵁搴撶被鍨� - UseMultipoint bool // 澶氱偣鐧诲綍鎷︽埅 - UseRedis bool // 浣跨敤redis - LimitCountIP int - LimitTimeIP int - RouterPrefix string // 璺敱鍓嶇紑 - SudoPassword string // sudo瀵嗙爜 - DeviceId string //璁惧id + Env string // 鐜鍊� develop test public + Port int // 绔彛 + DbType string // 鏁版嵁搴撶被鍨� + UseMultipoint bool // 澶氱偣鐧诲綍鎷︽埅 + UseRedis bool // 浣跨敤redis + LimitCountIP int + LimitTimeIP int + RouterPrefix string // 璺敱鍓嶇紑 + SudoPassword string // sudo瀵嗙爜 + DeviceId string //璁惧id + NetSetShellPath string //缃戠粶璁剧疆鑴氭湰璺緞 + NetUpShellName string //缃戠粶鍋滅敤鑴氭湰 + NetDownShellName string //缃戠粶寮�鍚剼鏈� } Etcd struct { diff --git a/utils/clamis.go b/utils/clamis.go deleted file mode 100644 index 93def04..0000000 --- a/utils/clamis.go +++ /dev/null @@ -1,51 +0,0 @@ -package utils - -import ( - "apsClient/model/request" - "apsClient/pkg/logx" - "github.com/gin-gonic/gin" - "strings" -) - -func GetClaims(c *gin.Context) (*request.CustomClaims, error) { - token := c.Request.Header.Get("Authorization") - logx.Infof("GetClaims token:%v", token) - slices := strings.Split(token, " ") - if len(slices) == 2 { - token = slices[1] - } - j := NewJWT() - claims, err := j.ParseToken(token) - if err != nil { - logx.Error("浠嶨in鐨凜ontext涓幏鍙栦粠jwt瑙f瀽淇℃伅澶辫触, 璇锋鏌ヨ姹傚ご鏄惁瀛樺湪x-token涓攃laims鏄惁涓鸿瀹氱粨鏋�") - } - return claims, err -} - -// GetUserID 浠嶨in鐨凜ontext涓幏鍙栦粠jwt瑙f瀽鍑烘潵鐨勭敤鎴稩D -func GetUserID(c *gin.Context) string { - if claims, exists := c.Get("claims"); !exists { - if cl, err := GetClaims(c); err != nil { - return "" - } else { - return cl.UserId - } - } else { - waitUse := claims.(*request.CustomClaims) - return waitUse.UserId - } -} - -// GetUserInfo 浠嶨in鐨凜ontext涓幏鍙栦粠jwt瑙f瀽鍑烘潵鐨勭敤鎴蜂俊鎭� -func GetUserInfo(c *gin.Context) *request.CustomClaims { - if claims, exists := c.Get("claims"); !exists { - if cl, err := GetClaims(c); err != nil { - return nil - } else { - return cl - } - } else { - waitUse := claims.(*request.CustomClaims) - return waitUse - } -} diff --git a/utils/cmd.go b/utils/cmd.go new file mode 100644 index 0000000..7a526af --- /dev/null +++ b/utils/cmd.go @@ -0,0 +1,33 @@ +package utils + +import ( + "fmt" + "os" + "os/exec" +) + +func Cmd(directory, script string) error { + // 鍒涘缓涓�涓墽琛屽懡浠ょ殑瀵硅薄 + cmd := exec.Command("/bin/bash", "-c", fmt.Sprintf("cd %s && %s", directory, script)) + + // 璁剧疆鍛戒护鐨勫伐浣滅洰褰� + cmd.Dir = directory + + // 灏嗗懡浠ょ殑杈撳嚭杩炴帴鍒板綋鍓嶈繘绋嬬殑杈撳嚭 + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + // 鎵ц鍛戒护 + output, err := cmd.Output() + if err != nil { + return err + } + fmt.Println(string(output)) + // 妫�鏌ュ懡浠ゆ墽琛岀粨鏋� + if cmd.ProcessState.Success() { + fmt.Println("鑴氭湰鎵ц鎴愬姛") + } else { + fmt.Println("鑴氭湰鎵ц澶辫触") + } + return nil +} diff --git a/utils/jwt.go b/utils/jwt.go deleted file mode 100644 index 6c29e70..0000000 --- a/utils/jwt.go +++ /dev/null @@ -1,87 +0,0 @@ -package utils - -import ( - "apsClient/conf" - "apsClient/constvar" - "apsClient/model/request" - "errors" - "time" - - jwt "github.com/golang-jwt/jwt/v4" -) - -type JWT struct { - SigningKey []byte -} - -var ( - TokenExpired = errors.New("Token is expired") - TokenNotValidYet = errors.New("Token not active yet") - TokenMalformed = errors.New("That's not even a token") - TokenInvalid = errors.New("Couldn't handle this token:") -) - -func NewJWT() *JWT { - return &JWT{ - []byte(conf.Conf.JWT.SigningKey), - } -} - -func (j *JWT) CreateClaims(baseClaims request.BaseClaims) request.CustomClaims { - bf, _ := ParseDuration(conf.Conf.JWT.BufferTime) - ep, _ := ParseDuration(conf.Conf.JWT.ExpiresTime) - claims := request.CustomClaims{ - BaseClaims: baseClaims, - BufferTime: int64(bf / time.Second), // 缂撳啿鏃堕棿1澶� 缂撳啿鏃堕棿鍐呬細鑾峰緱鏂扮殑token鍒锋柊浠ょ墝 姝ゆ椂涓�涓敤鎴蜂細瀛樺湪涓や釜鏈夋晥浠ょ墝 浣嗘槸鍓嶇鍙暀涓�涓� 鍙︿竴涓細涓㈠け - StandardClaims: jwt.StandardClaims{ - NotBefore: time.Now().Unix() - 1000, // 绛惧悕鐢熸晥鏃堕棿 - ExpiresAt: time.Now().Add(ep).Unix(), // 杩囨湡鏃堕棿 7澶� 閰嶇疆鏂囦欢 - Issuer: conf.Conf.JWT.Issuer, // 绛惧悕鐨勫彂琛岃�� - }, - } - return claims -} - -// CreateToken 鍒涘缓涓�涓猼oken -func (j *JWT) CreateToken(claims request.CustomClaims) (string, error) { - token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) - return token.SignedString(j.SigningKey) -} - -// CreateTokenByOldToken 鏃oken 鎹㈡柊token 浣跨敤褰掑苟鍥炴簮閬垮厤骞跺彂闂 -func (j *JWT) CreateTokenByOldToken(oldToken string, claims request.CustomClaims) (string, error) { - v, err, _ := constvar.SingleGroup.Do("JWT:"+oldToken, func() (interface{}, error) { - return j.CreateToken(claims) - }) - return v.(string), err -} - -// ParseToken 瑙f瀽token -func (j *JWT) ParseToken(tokenString string) (*request.CustomClaims, error) { - token, err := jwt.ParseWithClaims(tokenString, &request.CustomClaims{}, func(token *jwt.Token) (i interface{}, e error) { - return j.SigningKey, nil - }) - if err != nil { - if ve, ok := err.(*jwt.ValidationError); ok { - if ve.Errors&jwt.ValidationErrorMalformed != 0 { - return nil, TokenMalformed - } else if ve.Errors&jwt.ValidationErrorExpired != 0 { - // Token is expired - return nil, TokenExpired - } else if ve.Errors&jwt.ValidationErrorNotValidYet != 0 { - return nil, TokenNotValidYet - } else { - return nil, TokenInvalid - } - } - } - if token != nil { - if claims, ok := token.Claims.(*request.CustomClaims); ok && token.Valid { - return claims, nil - } - return nil, TokenInvalid - - } else { - return nil, TokenInvalid - } -} -- Gitblit v1.8.0