playground: Add a flag for CORS origin header.

The default is https://playground.v.io

When running compilerd with "make start", the origin is set to "*".

Fixes https://github.com/vanadium/issues/issues/295

Change-Id: I8c98e3927ba28e0fa8826bf0cafedb38f8264fa6
diff --git a/go/src/v.io/x/playground/Makefile b/go/src/v.io/x/playground/Makefile
index 77c430a..e41b9b4 100644
--- a/go/src/v.io/x/playground/Makefile
+++ b/go/src/v.io/x/playground/Makefile
@@ -34,6 +34,7 @@
 		--sqlconf=$< \
 		--listen-timeout=0 \
 		--address=$(host):$(port) \
+		--origin='*' \
 		--use-docker=false
 
 config/db.json:
diff --git a/go/src/v.io/x/playground/README.md b/go/src/v.io/x/playground/README.md
index 19cf776..9392bfa 100644
--- a/go/src/v.io/x/playground/README.md
+++ b/go/src/v.io/x/playground/README.md
@@ -54,11 +54,11 @@
 
 Run the compiler binary:
 
-    $ $V23_ROOT/release/projects/playground/go/bin/compilerd --listen-timeout=0 --address=localhost:8181
+    $ $V23_ROOT/release/projects/playground/go/bin/compilerd --listen-timeout=0 --address=localhost:8181 --origin='*'
 
 Or, run it without Docker (for faster iterations during development):
 
-    $ PATH=$V23_ROOT/release/go/bin:$V23_ROOT/release/projects/playground/go/bin:$PATH compilerd --listen-timeout=0 --address=localhost:8181 --use-docker=false
+    $ PATH=$V23_ROOT/release/go/bin:$V23_ROOT/release/projects/playground/go/bin:$PATH compilerd --listen-timeout=0 --address=localhost:8181 --origin='*' --use-docker=false
 
 The server should now be running at http://localhost:8181 and responding to
 compile requests at http://localhost:8181/compile.
diff --git a/go/src/v.io/x/playground/compilerd/main.go b/go/src/v.io/x/playground/compilerd/main.go
index fc9ce91..88c01e9 100644
--- a/go/src/v.io/x/playground/compilerd/main.go
+++ b/go/src/v.io/x/playground/compilerd/main.go
@@ -42,6 +42,8 @@
 
 	address = flag.String("address", ":8181", "Address to listen on.")
 
+	origin = flag.String("origin", "https://playground.v.io", "The origin where the playground client is hosted. This will be used in CORS headers to allow XHRs to the playground API. Use '*' to allow all origins.")
+
 	// compilerd exits cleanly on SIGTERM or after a random amount of time,
 	// between listenTimeout/2 and listenTimeout.
 	listenTimeout = flag.Duration("listen-timeout", 60*time.Minute, "Maximum amount of time to listen for before exiting. A value of 0 disables the timeout.")
@@ -194,9 +196,7 @@
 // Returns false iff response processing should not continue.
 func handleCORS(w http.ResponseWriter, r *http.Request) bool {
 	// CORS headers.
-	// TODO(nlacasse): Fill the origin header in with actual playground origin
-	// before going to production.
-	w.Header().Set("Access-Control-Allow-Origin", "*")
+	w.Header().Set("Access-Control-Allow-Origin", *origin)
 	w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")
 	w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding")