1
0

http_server.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package mock
  2. import (
  3. "fmt"
  4. "log"
  5. "net/http"
  6. "regexp"
  7. "strings"
  8. "github.com/fatedier/frp/tests/consts"
  9. "github.com/gorilla/websocket"
  10. )
  11. var upgrader = websocket.Upgrader{}
  12. func StartHttpServer(port int) {
  13. http.HandleFunc("/", handleHttp)
  14. http.HandleFunc("/ws", handleWebSocket)
  15. http.ListenAndServe(fmt.Sprintf("0.0.0.0:%d", port), nil)
  16. }
  17. func handleWebSocket(w http.ResponseWriter, r *http.Request) {
  18. c, err := upgrader.Upgrade(w, r, nil)
  19. if err != nil {
  20. log.Print("upgrade:", err)
  21. return
  22. }
  23. defer c.Close()
  24. for {
  25. mt, message, err := c.ReadMessage()
  26. if err != nil {
  27. break
  28. }
  29. err = c.WriteMessage(mt, message)
  30. if err != nil {
  31. log.Println("write:", err)
  32. break
  33. }
  34. }
  35. }
  36. func handleHttp(w http.ResponseWriter, r *http.Request) {
  37. if r.Header.Get("X-From-Where") == "frp" {
  38. w.Header().Set("X-Header-Set", "true")
  39. }
  40. match, err := regexp.Match(`.*\.sub\.com`, []byte(r.Host))
  41. if err != nil {
  42. w.WriteHeader(500)
  43. return
  44. }
  45. if match {
  46. w.WriteHeader(200)
  47. w.Write([]byte(r.Host))
  48. return
  49. }
  50. if strings.Contains(r.Host, "127.0.0.1") || strings.Contains(r.Host, "test2.frp.com") ||
  51. strings.Contains(r.Host, "test5.frp.com") || strings.Contains(r.Host, "test6.frp.com") {
  52. w.WriteHeader(200)
  53. w.Write([]byte(consts.TEST_HTTP_NORMAL_STR))
  54. } else if strings.Contains(r.Host, "test3.frp.com") {
  55. w.WriteHeader(200)
  56. if strings.Contains(r.URL.Path, "foo") {
  57. w.Write([]byte(consts.TEST_HTTP_FOO_STR))
  58. } else if strings.Contains(r.URL.Path, "bar") {
  59. w.Write([]byte(consts.TEST_HTTP_BAR_STR))
  60. } else {
  61. w.Write([]byte(consts.TEST_HTTP_NORMAL_STR))
  62. }
  63. } else {
  64. w.WriteHeader(404)
  65. }
  66. return
  67. }