diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2023-09-18 00:51:40 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2023-09-18 00:55:20 +0900 |
commit | 901939bd96b38bcc6f4023d2c7075356153a6c8f (patch) | |
tree | 25211e6a2bbebf968e4b3a2982002dbfd1096426 /src/server.go | |
parent | edfdcc8cee31e227a5f7eda9c1faa4893757645c (diff) |
Add support for limit and offset parameters for GET / endpoint
Related #3372
Diffstat (limited to 'src/server.go')
-rw-r--r-- | src/server.go | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/server.go b/src/server.go index 36980157..8fc605ac 100644 --- a/src/server.go +++ b/src/server.go @@ -8,11 +8,23 @@ import ( "fmt" "net" "os" + "regexp" "strconv" "strings" "time" ) +var getRegex *regexp.Regexp + +func init() { + getRegex = regexp.MustCompile(`^GET /(?:\?([a-z0-9=&]+))? HTTP`) +} + +type getParams struct { + limit int + offset int +} + const ( crlf = "\r\n" httpOk = "HTTP/1.1 200 OK" + crlf @@ -117,9 +129,9 @@ func (server *httpServer) handleHttpRequest(conn net.Conn) string { text := scanner.Text() switch section { case 0: - // TODO: Parameter support e.g. "GET /?limit=100 HTTP" - if strings.HasPrefix(text, "GET / HTTP") { - server.actionChannel <- []*action{{t: actResponse}} + getMatch := getRegex.FindStringSubmatch(text) + if len(getMatch) > 0 { + server.actionChannel <- []*action{{t: actResponse, a: getMatch[1]}} response := <-server.responseChannel return good(response) } else if !strings.HasPrefix(text, "POST / HTTP") { @@ -175,3 +187,25 @@ func (server *httpServer) handleHttpRequest(conn net.Conn) string { server.actionChannel <- actions return httpOk } + +func parseGetParams(query string) getParams { + params := getParams{limit: 100, offset: 0} + for _, pair := range strings.Split(query, "&") { + parts := strings.SplitN(pair, "=", 2) + if len(parts) == 2 { + switch parts[0] { + case "limit": + val, err := strconv.Atoi(parts[1]) + if err == nil { + params.limit = val + } + case "offset": + val, err := strconv.Atoi(parts[1]) + if err == nil { + params.offset = val + } + } + } + } + return params +} |