From 6df68cb970c6ec2d57a6d68fb901df70b67693bf Mon Sep 17 00:00:00 2001 From: jet2tlf Date: Mon, 3 Jun 2024 14:01:32 -0300 Subject: codecrafters submit [skip ci] --- app/handler.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'app/handler.go') diff --git a/app/handler.go b/app/handler.go index 50de29f..02f4b27 100644 --- a/app/handler.go +++ b/app/handler.go @@ -43,7 +43,7 @@ func userAgentHandler(request *Request) *Response { }, []byte(header)) } -func fileHandler(request *Request) *Response { +func getFile(request *Request) *Response { file, err := os.Open(filepath.Join(directory, strings.Split(request.Target(), "/")[2])) if err != nil { return NewResponse(NotFound, nil, nil) @@ -56,12 +56,37 @@ func fileHandler(request *Request) *Response { }, buf) } +func createFile(request *Request) *Response { + fPath := filepath.Join(directory, strings.Split(request.Target(), "/")[2]) + fmt.Println("create file: ", fPath) + + file, err := os.Create(fPath) + if err != nil { + return NewResponse(InternalServerError, nil, nil) + } + + defer file.Close() + + length, err := strconv.Atoi(request.Header("Content-Length")) + if err != nil { + return NewResponse(InternalServerError, nil, nil) + } + + _, err = io.CopyN(file, request.Body(), int64(length)) + if err != nil { + return NewResponse(InternalServerError, nil, nil) + } + + return NewResponse(Created, nil, nil) +} + 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) + builder.Add("GET", regexp.MustCompile("^/files/.+$"), getFile) + builder.Add("POST", regexp.MustCompile("^/files/.+$"), createFile) } } -- cgit v1.2.3