summaryrefslogtreecommitdiffstats
path: root/src/server.go
diff options
context:
space:
mode:
authorJunegunn Choi <junegunn.c@gmail.com>2023-09-18 00:51:40 +0900
committerJunegunn Choi <junegunn.c@gmail.com>2023-09-18 00:55:20 +0900
commit901939bd96b38bcc6f4023d2c7075356153a6c8f (patch)
tree25211e6a2bbebf968e4b3a2982002dbfd1096426 /src/server.go
parentedfdcc8cee31e227a5f7eda9c1faa4893757645c (diff)
Add support for limit and offset parameters for GET / endpoint
Related #3372
Diffstat (limited to 'src/server.go')
-rw-r--r--src/server.go40
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
+}