7 Commits

Author SHA1 Message Date
Łukasz Budnik
f8fab8d501 Merge pull request #8 from lukaszbudnik/cors-support
added CORS support
2021-02-16 13:02:35 +01:00
Łukasz Budnik
bb07fc7e6e Merge branch 'main' into cors-support 2021-02-16 13:01:24 +01:00
Łukasz Budnik
7073bea751 added CORS support 2021-02-16 12:59:42 +01:00
Łukasz Budnik
b3fa7f0507 Merge pull request #7 from lukaszbudnik/added-github-workflow-badges
added github workflow badges
2021-02-05 08:36:29 +01:00
Łukasz Budnik
50a90591fc added github workflow badges 2021-02-05 08:35:28 +01:00
Łukasz Budnik
204cd377f5 Merge pull request #6 from lukaszbudnik/better-curl-example
added better curl example
2021-02-04 22:42:42 +01:00
Łukasz Budnik
988ee495ba added better curl example 2021-02-04 22:40:52 +01:00
3 changed files with 26 additions and 9 deletions

View File

@@ -1,4 +1,4 @@
# yosoy
# yosoy ![Go](https://github.com/lukaszbudnik/yosoy/workflows/Go/badge.svg) ![Docker](https://github.com/lukaszbudnik/yosoy/workflows/Docker%20Image%20CI/badge.svg)
yosoy is a HTTP service for stubbing and prototyping distributed applications. It is a service which will introduce itself to the caller and print some useful information about its environment. "Yo soy" in español means "I am".
@@ -52,19 +52,19 @@ minikube start
kubectl apply -f test/deployment.yaml
# tunnel to it and copy the URL as $URL variable
minikube service --url camarero
# call it a few times
curl $URL
curl $URL
curl $URL
curl $URL
# simulate some HTTP requests
curl -H "Host: gateway.myapp.com" $URL/camarero/abc
curl -H "Host: gateway.myapp.com" $URL/camarero/abc
curl -H "Host: gateway.myapp.com" $URL/camarero/abc
curl -H "Host: gateway.myapp.com" $URL/camarero/abc
```
A sample response looks like this:
```json
{
"host": "127.0.0.1:53366",
"requestUri": "/",
"host": "gateway.myapp.com",
"requestUri": "/camarero/abc",
"remoteAddr": "172.17.0.1",
"counter": 4,
"headers": {

View File

@@ -26,7 +26,19 @@ type response struct {
var counter = 0
var hostname = os.Getenv("HOSTNAME")
func preflight(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "*")
w.Header().Set("Access-Control-Allow-Headers", "*")
w.Header().Set("Access-Control-Allow-Credentials", "true")
w.Header().Set("Access-Control-Expose-Headers", "*")
w.Header().Set("Access-Control-Max-Age", "600")
w.WriteHeader(http.StatusOK)
}
func handler(w http.ResponseWriter, req *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "*")
showEnvs := os.Getenv("YOSOY_SHOW_ENVS")
showFiles := os.Getenv("YOSOY_SHOW_FILES")
@@ -80,7 +92,8 @@ func main() {
r := mux.NewRouter()
r.Handle("/favicon.ico", r.NotFoundHandler)
r.PathPrefix("/").HandlerFunc(handler)
r.PathPrefix("/").HandlerFunc(preflight).Methods(http.MethodOptions)
r.PathPrefix("/").HandlerFunc(handler).Methods(http.MethodGet, http.MethodPut, http.MethodPatch, http.MethodPost, http.MethodDelete, http.MethodConnect, http.MethodHead, http.MethodTrace)
loggingRouter := handlers.CombinedLoggingHandler(os.Stdout, r)
proxyRouter := handlers.ProxyHeaders(loggingRouter)

View File

@@ -32,8 +32,12 @@ func TestHandler(t *testing.T) {
var response response
json.Unmarshal(rr.Body.Bytes(), &response)
// test response
assert.Equal(t, 1, response.Counter)
assert.Equal(t, "example.org", response.Host)
assert.NotEmpty(t, response.EnvVariables)
assert.NotEmpty(t, response.Files[".gitignore"])
// test cors
assert.Contains(t, rr.HeaderMap["Access-Control-Allow-Origin"], "*")
}