2024-05-25 18:27:53 +02:00
|
|
|
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"},
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2024-05-26 02:04:59 +02:00
|
|
|
// Read file
|
2024-05-25 18:27:53 +02:00
|
|
|
{
|
|
|
|
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"},
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
2024-05-26 02:04:59 +02:00
|
|
|
// Write file
|
2024-05-25 18:27:53 +02:00
|
|
|
{
|
|
|
|
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}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|