pty.go 742 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package terminal
  2. import (
  3. "github.com/uozi-tech/cosy/logger"
  4. "github.com/0xJacky/Nginx-UI/internal/pty"
  5. "github.com/gin-gonic/gin"
  6. "github.com/gorilla/websocket"
  7. "net/http"
  8. )
  9. func Pty(c *gin.Context) {
  10. var upGrader = websocket.Upgrader{
  11. CheckOrigin: func(r *http.Request) bool {
  12. return true
  13. },
  14. }
  15. // upgrade http to websocket
  16. ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
  17. if err != nil {
  18. logger.Error(err)
  19. return
  20. }
  21. defer ws.Close()
  22. p, err := pty.NewPipeLine(ws)
  23. if err != nil {
  24. logger.Error(err)
  25. return
  26. }
  27. defer p.Close()
  28. errorChan := make(chan error, 1)
  29. go p.ReadPtyAndWriteWs(errorChan)
  30. go p.ReadWsAndWritePty(errorChan)
  31. err = <-errorChan
  32. if err != nil {
  33. logger.Error(err)
  34. }
  35. return
  36. }