package easyophdl import ( "encoding/json" "fmt" "git.swzry.com/zry/go-zSshRpcServer/server" "github.com/tidwall/gjson" "golang.org/x/crypto/ssh" ) type EasyOpHdlRequest struct { RawRequest zsshrpc_server.ZSshRpcOperationRequest isGJsonProc bool gjsonResult gjson.Result isErrHappend bool isJsonProcError bool errMsg string logger zsshrpc_server.SvrLogFunc } func (this *EasyOpHdlRequest) GetMethodName() string { return zsshrpc_server.GetOperationMethodName(this.RawRequest.Method) } func (this *EasyOpHdlRequest) GetUserName() string { return this.RawRequest.ChannelContext.SessionCtx.ServerConn.User() } func (this *EasyOpHdlRequest) GetPermissions() *ssh.Permissions { return this.RawRequest.ChannelContext.SessionCtx.ServerConn.Permissions } func (this *EasyOpHdlRequest) WriteLogInfo(msg string) { this.writeLog(zsshrpc_server.SvrLogLevel_INFO, msg) } func (this *EasyOpHdlRequest) WriteLogDebug(msg string) { this.writeLog(zsshrpc_server.SvrLogLevel_DEBUG, msg) } func (this *EasyOpHdlRequest) WriteErrLog(msg string, err error) { this.writeLogWithError(zsshrpc_server.SvrLogLevel_WARNING, msg, err) } func (this *EasyOpHdlRequest) writeLog(level int, msg string) { this.writeLogWithError(level, msg, nil) } func (this *EasyOpHdlRequest) writeLogWithError(level int, msg string, err error) { this.logger(level, fmt.Sprint("Backend ", this.RawRequest.URI, " Handler Log: ", msg), err) } func (this *EasyOpHdlRequest) GetClientVersion() string { return string(this.RawRequest.ChannelContext.SessionCtx.ServerConn.ClientVersion()) } func (this *EasyOpHdlRequest) GetRemoteAddr() string { return this.RawRequest.ChannelContext.SessionCtx.ServerConn.RemoteAddr().String() } func (this *EasyOpHdlRequest) ProcGJson() { this.gjsonResult = gjson.Parse(this.RawRequest.JSON) this.isGJsonProc = true } func (this *EasyOpHdlRequest) GJsonGet(path string) *gjson.Result { if this.isGJsonProc { gjo := this.gjsonResult.Get(path) return &gjo } else { this.isErrHappend = true this.errMsg = "Do GJson Getting Operation Before ProcGJson." this.doErrLog() return nil } } func (this *EasyOpHdlRequest) ProcRegularJson(v interface{}) bool { err := json.Unmarshal([]byte(this.RawRequest.JSON), v) if err != nil { this.isErrHappend = true this.isJsonProcError = true this.errMsg = fmt.Sprint("Failed ProcRegularJson: ", err) this.doErrLog() return false } return true } func (this *EasyOpHdlRequest) doErrLog() { if this.isErrHappend { this.logger(zsshrpc_server.SvrLogLevel_WARNING, fmt.Sprint("Internal Error: ", this.errMsg), nil, ) } }