pty.go 759 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/pkg/pty"
  4. "github.com/gin-gonic/gin"
  5. "github.com/gorilla/websocket"
  6. "log"
  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. log.Println("pty ws upgrade error", err)
  19. return
  20. }
  21. defer ws.Close()
  22. p, err := pty.NewPipeLine(ws)
  23. if err != nil {
  24. log.Println("pty.NewPipLine error", err)
  25. return
  26. }
  27. defer p.Pty.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. log.Println(err)
  34. }
  35. return
  36. }