PortAllocator: Generate crypto random string as secret

Change-Id: Icbeaa14e39c19507107444d1a358287819525696
diff --git a/core/port-allocator/main.go b/core/port-allocator/main.go
index d99550b..6b4fd47 100644
--- a/core/port-allocator/main.go
+++ b/core/port-allocator/main.go
@@ -20,6 +20,10 @@
 	"golang.org/x/crypto/ssh"
 )
 
+const (
+	secretLength = 20
+)
+
 var port = flag.Int("port", 8080, "Port to listen on")
 var repoAddr = flag.String("repo-addr", "", "Git repository address where Helm releases are stored")
 var sshKey = flag.String("ssh-key", "", "Path to SHH key used to connect with Git repository")
@@ -280,7 +284,11 @@
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 		return
 	}
-	secret := generateSecret()
+	secret, err := generateSecret()
+	if err != nil {
+		http.Error(w, err.Error(), http.StatusInternalServerError)
+		return
+	}
 	s.reserve[port] = secret
 	go func() {
 		time.Sleep(30 * time.Minute)
@@ -360,9 +368,13 @@
 	return soft.NewRepoIO(repo, signer)
 }
 
-func generateSecret() string {
-	// TODO(gio): implement
-	return "foo"
+func generateSecret() (string, error) {
+	b := make([]byte, secretLength)
+	_, err := rand.Read(b)
+	if err != nil {
+		return "", fmt.Errorf("error generating secret: %v", err)
+	}
+	return string(b), nil
 }
 
 func main() {