aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjet2tlf <jet2tlf@gmail.com>2024-06-03 16:57:16 +0000
committerjet2tlf <jet2tlf@gmail.com>2024-06-03 16:57:16 +0000
commitbac4fe6af92603eb0d5c22fed3f1c15a8d7c51f2 (patch)
treec6e7c8180ecab438b17f70baac9fc6d7bb422782
parent06d59369fee711cf1e9cd64cfcf5bc291cadcf77 (diff)
downloadhttp-server-go-bac4fe6af92603eb0d5c22fed3f1c15a8d7c51f2.tar.gz
http-server-go-bac4fe6af92603eb0d5c22fed3f1c15a8d7c51f2.zip
codecrafters submit [skip ci]
-rw-r--r--app/handler.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/app/handler.go b/app/handler.go
index 634e4a9..50de29f 100644
--- a/app/handler.go
+++ b/app/handler.go
@@ -1,11 +1,28 @@
package main
import (
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
"regexp"
+ "slices"
"strconv"
"strings"
)
+var directory = ""
+
+func init() {
+ args := os.Args
+ index := slices.Index(args, "--directory")
+ if index > 0 {
+ directory = args[index+1]
+ }
+
+ fmt.Println("directory: ", directory)
+}
+
func basePathHandler(request *Request) *Response {
return NewResponse(Ok, nil, nil)
}
@@ -26,8 +43,25 @@ func userAgentHandler(request *Request) *Response {
}, []byte(header))
}
+func fileHandler(request *Request) *Response {
+ file, err := os.Open(filepath.Join(directory, strings.Split(request.Target(), "/")[2]))
+ if err != nil {
+ return NewResponse(NotFound, nil, nil)
+ }
+
+ buf, _ := io.ReadAll(file)
+ return NewResponse(Ok, map[string]string{
+ "Content-Type": "application/octet-stream",
+ "Content-Length": strconv.Itoa(len(buf)),
+ }, buf)
+}
+
func Register(builder *RouterBuilder) {
builder.Add("GET", regexp.MustCompile("^/$"), basePathHandler)
builder.Add("GET", regexp.MustCompile("^/echo/[a-zA-Z]+$"), echoHandler)
builder.Add("GET", regexp.MustCompile("^/user-agent$"), userAgentHandler)
+
+ if directory != "" {
+ builder.Add("GET", regexp.MustCompile("^/files/.+$"), fileHandler)
+ }
}