Revert "Add GET endpoints for getting the state of the finder"

This reverts commit 750b2a6313.

This can cause a deadlock if the endpoints are accessed in the core event
loop via execute action.

  fzf --listen 6266 --bind 'space:execute:curl localhost:6266'

Technically, there's no reason to use the API because the information is
already available via `{}` and `{q}`, but I'd like to completely remove
the risk of misuse.
This commit is contained in:
Junegunn Choi
2022-12-25 19:53:53 +09:00
parent 750b2a6313
commit b7bb973118
6 changed files with 22 additions and 64 deletions

View File

@@ -6,7 +6,6 @@ import (
"errors"
"fmt"
"net"
"regexp"
"strconv"
"strings"
"time"
@@ -14,18 +13,13 @@ import (
const (
crlf = "\r\n"
httpPattern = "^(GET|POST) (/[^ ]*) HTTP"
httpOk = "HTTP/1.1 200 OK" + crlf
httpBadRequest = "HTTP/1.1 400 Bad Request" + crlf
httpReadTimeout = 10 * time.Second
maxContentLength = 1024 * 1024
)
var (
httpRegexp *regexp.Regexp
)
func startHttpServer(port int, requestChan chan []*action, responseChan chan string) error {
func startHttpServer(port int, channel chan []*action) error {
if port == 0 {
return nil
}
@@ -35,7 +29,6 @@ func startHttpServer(port int, requestChan chan []*action, responseChan chan str
return fmt.Errorf("port not available: %d", port)
}
httpRegexp = regexp.MustCompile(httpPattern)
go func() {
for {
conn, err := listener.Accept()
@@ -46,7 +39,7 @@ func startHttpServer(port int, requestChan chan []*action, responseChan chan str
continue
}
}
conn.Write([]byte(handleHttpRequest(conn, requestChan, responseChan)))
conn.Write([]byte(handleHttpRequest(conn, channel)))
conn.Close()
}
listener.Close()
@@ -61,14 +54,12 @@ func startHttpServer(port int, requestChan chan []*action, responseChan chan str
// * No --listen: 2.8MB
// * --listen with net/http: 5.7MB
// * --listen w/o net/http: 3.3MB
func handleHttpRequest(conn net.Conn, requestChan chan []*action, responseChan chan string) string {
func handleHttpRequest(conn net.Conn, channel chan []*action) string {
contentLength := 0
body := ""
response := func(header string, message string) string {
return header + fmt.Sprintf("Content-Length: %d%s", len(message), crlf+crlf+message)
}
bad := func(message string) string {
return response(httpBadRequest, strings.TrimSpace(message)+"\n")
message += "\n"
return httpBadRequest + fmt.Sprintf("Content-Length: %d%s", len(message), crlf+crlf+message)
}
conn.SetReadDeadline(time.Now().Add(httpReadTimeout))
scanner := bufio.NewScanner(conn)
@@ -89,13 +80,8 @@ func handleHttpRequest(conn net.Conn, requestChan chan []*action, responseChan c
text := scanner.Text()
switch section {
case 0:
httpMatch := httpRegexp.FindStringSubmatch(text)
if len(httpMatch) != 3 {
return bad("invalid HTTP request: " + text)
}
if httpMatch[1] == "GET" {
requestChan <- []*action{{t: actEvaluate, a: httpMatch[2][1:]}}
return response(httpOk, <-responseChan)
if !strings.HasPrefix(text, "POST / HTTP") {
return bad("invalid request method")
}
section++
case 1:
@@ -134,6 +120,7 @@ func handleHttpRequest(conn net.Conn, requestChan chan []*action, responseChan c
if len(actions) == 0 {
return bad("no action specified")
}
requestChan <- actions
channel <- actions
return httpOk
}