From bac4fe6af92603eb0d5c22fed3f1c15a8d7c51f2 Mon Sep 17 00:00:00 2001 From: jet2tlf Date: Mon, 3 Jun 2024 13:57:16 -0300 Subject: codecrafters submit [skip ci] --- app/handler.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'app') 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) + } } -- cgit v1.2.3