EasyOpHdlRequest.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package easyophdl
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "git.swzry.com/zry/go-zSshRpcServer/server"
  6. "github.com/tidwall/gjson"
  7. "golang.org/x/crypto/ssh"
  8. )
  9. type EasyOpHdlRequest struct {
  10. RawRequest zsshrpc_server.ZSshRpcOperationRequest
  11. isGJsonProc bool
  12. gjsonResult gjson.Result
  13. isErrHappend bool
  14. isJsonProcError bool
  15. errMsg string
  16. logger zsshrpc_server.SvrLogFunc
  17. }
  18. func (this *EasyOpHdlRequest) GetMethodName() string {
  19. return zsshrpc_server.GetOperationMethodName(this.RawRequest.Method)
  20. }
  21. func (this *EasyOpHdlRequest) GetUserName() string {
  22. return this.RawRequest.ChannelContext.SessionCtx.ServerConn.User()
  23. }
  24. func (this *EasyOpHdlRequest) GetPermissions() *ssh.Permissions {
  25. return this.RawRequest.ChannelContext.SessionCtx.ServerConn.Permissions
  26. }
  27. func (this *EasyOpHdlRequest) WriteLogInfo(msg string) {
  28. this.writeLog(zsshrpc_server.SvrLogLevel_INFO, msg)
  29. }
  30. func (this *EasyOpHdlRequest) WriteLogDebug(msg string) {
  31. this.writeLog(zsshrpc_server.SvrLogLevel_DEBUG, msg)
  32. }
  33. func (this *EasyOpHdlRequest) WriteErrLog(msg string, err error) {
  34. this.writeLogWithError(zsshrpc_server.SvrLogLevel_WARNING, msg, err)
  35. }
  36. func (this *EasyOpHdlRequest) writeLog(level int, msg string) {
  37. this.writeLogWithError(level, msg, nil)
  38. }
  39. func (this *EasyOpHdlRequest) writeLogWithError(level int, msg string, err error) {
  40. this.logger(level, fmt.Sprint("Backend ", this.RawRequest.URI, " Handler Log: ", msg), err)
  41. }
  42. func (this *EasyOpHdlRequest) GetClientVersion() string {
  43. return string(this.RawRequest.ChannelContext.SessionCtx.ServerConn.ClientVersion())
  44. }
  45. func (this *EasyOpHdlRequest) GetRemoteAddr() string {
  46. return this.RawRequest.ChannelContext.SessionCtx.ServerConn.RemoteAddr().String()
  47. }
  48. func (this *EasyOpHdlRequest) ProcGJson() {
  49. this.gjsonResult = gjson.Parse(this.RawRequest.JSON)
  50. this.isGJsonProc = true
  51. }
  52. func (this *EasyOpHdlRequest) GJsonGet(path string) *gjson.Result {
  53. if this.isGJsonProc {
  54. gjo := this.gjsonResult.Get(path)
  55. return &gjo
  56. } else {
  57. this.isErrHappend = true
  58. this.errMsg = "Do GJson Getting Operation Before ProcGJson."
  59. this.doErrLog()
  60. return nil
  61. }
  62. }
  63. func (this *EasyOpHdlRequest) ProcRegularJson(v interface{}) bool {
  64. err := json.Unmarshal([]byte(this.RawRequest.JSON), v)
  65. if err != nil {
  66. this.isErrHappend = true
  67. this.isJsonProcError = true
  68. this.errMsg = fmt.Sprint("Failed ProcRegularJson: ", err)
  69. this.doErrLog()
  70. return false
  71. }
  72. return true
  73. }
  74. func (this *EasyOpHdlRequest) doErrLog() {
  75. if this.isErrHappend {
  76. this.logger(zsshrpc_server.SvrLogLevel_WARNING,
  77. fmt.Sprint("Internal Error: ", this.errMsg),
  78. nil,
  79. )
  80. }
  81. }