aboutsummaryrefslogtreecommitdiff
path: root/app/handler.go
diff options
context:
space:
mode:
authorjet2tlf <jet2tlf@gmail.com>2024-06-03 17:01:32 +0000
committerjet2tlf <jet2tlf@gmail.com>2024-06-03 17:01:32 +0000
commit6df68cb970c6ec2d57a6d68fb901df70b67693bf (patch)
tree1b53efd58b754184d6743d757abb0479c6e7a87d /app/handler.go
parentbac4fe6af92603eb0d5c22fed3f1c15a8d7c51f2 (diff)
downloadhttp-server-go-6df68cb970c6ec2d57a6d68fb901df70b67693bf.tar.gz
http-server-go-6df68cb970c6ec2d57a6d68fb901df70b67693bf.zip
codecrafters submit [skip ci]
Diffstat (limited to 'app/handler.go')
-rw-r--r--app/handler.go29
1 files changed, 27 insertions, 2 deletions
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)
}
}