mirror of
https://github.com/cupcakearmy/codecrafters-http-server-go.git
synced 2024-09-20 03:04:46 +02:00
73 lines
1.6 KiB
Go
73 lines
1.6 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"regexp"
|
||
|
)
|
||
|
|
||
|
var routes = Routes{
|
||
|
stringRoutes: []StringRoute{
|
||
|
// ROOT
|
||
|
{path: "/", method: "GET", handler: func(req Request) Response {
|
||
|
return Response{Version: req.Version, Code: OK}
|
||
|
}},
|
||
|
|
||
|
// USER AGENT
|
||
|
{path: "/user-agent", method: "GET", handler: func(req Request) Response {
|
||
|
userAgent := req.Headers["User-Agent"]
|
||
|
if userAgent == "" {
|
||
|
return Response{Version: req.Version, Code: BadRequest}
|
||
|
}
|
||
|
|
||
|
return Response{
|
||
|
Version: req.Version,
|
||
|
Code: OK,
|
||
|
Body: userAgent,
|
||
|
Headers: map[string]string{"Content-Type": "text/plain"},
|
||
|
}
|
||
|
}},
|
||
|
},
|
||
|
|
||
|
regexpRoutes: []RegexRoute{
|
||
|
|
||
|
// PATH PARAMETER
|
||
|
{
|
||
|
regex: regexp.MustCompile(`^/echo/([A-Za-z]+)$`),
|
||
|
method: "GET",
|
||
|
handler: func(req Request, matches []string) Response {
|
||
|
return Response{
|
||
|
Version: req.Version,
|
||
|
Code: OK,
|
||
|
Body: matches[1],
|
||
|
Headers: map[string]string{"Content-Type": "text/plain"},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
regex: regexp.MustCompile(`^/files/([A-Za-z0-9_\-.]+)`),
|
||
|
method: "GET",
|
||
|
handler: func(req Request, matches []string) Response {
|
||
|
file, notFound := readFile(matches[1])
|
||
|
if notFound {
|
||
|
return Response{Version: req.Version, Code: NotFound}
|
||
|
}
|
||
|
return Response{
|
||
|
Version: req.Version,
|
||
|
Code: OK,
|
||
|
BodyRaw: file,
|
||
|
Headers: map[string]string{"Content-Type": "application/octet-stream"},
|
||
|
}
|
||
|
},
|
||
|
},
|
||
|
|
||
|
{
|
||
|
regex: regexp.MustCompile(`^/files/([A-Za-z0-9_\-.]+)`),
|
||
|
method: "POST",
|
||
|
handler: func(req Request, matches []string) Response {
|
||
|
writeFile(matches[1], []byte(req.Body))
|
||
|
return Response{Version: req.Version, Code: Created}
|
||
|
},
|
||
|
},
|
||
|
},
|
||
|
}
|