PortAllocator: Generate crypto random string as secret

Change-Id: Icbeaa14e39c19507107444d1a358287819525696
diff --git a/core/port-allocator/.gitignore b/core/port-allocator/.gitignore
index ea6b1d9..62f1928 100644
--- a/core/port-allocator/.gitignore
+++ b/core/port-allocator/.gitignore
@@ -1 +1,2 @@
-server*
\ No newline at end of file
+server*
+port-allocator*
\ No newline at end of file
diff --git a/core/port-allocator/go.mod b/core/port-allocator/go.mod
index 4e1db75..a672f90 100644
--- a/core/port-allocator/go.mod
+++ b/core/port-allocator/go.mod
@@ -1,6 +1,6 @@
 module github.com/giolekva/pcloud/core/port-allocator
 
-replace github.com/giolekva/pcloud/core/installer => /Users/lekva/dev/src/pcloud/core/installer
+replace github.com/giolekva/pcloud/core/installer => ../installer
 
 go 1.22.0
 
diff --git a/core/port-allocator/go.sum b/core/port-allocator/go.sum
index ae2ebc8..390520e 100644
--- a/core/port-allocator/go.sum
+++ b/core/port-allocator/go.sum
@@ -51,8 +51,8 @@
 github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
-github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
+github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
+github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M=
 github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
 github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
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() {
diff --git a/core/port-allocator/main_test.go b/core/port-allocator/main_test.go
index ce9d3ff..caf2d51 100644
--- a/core/port-allocator/main_test.go
+++ b/core/port-allocator/main_test.go
@@ -163,3 +163,11 @@
 		t.Fatalf("Expected %d, got %d", http.StatusConflict, resp.StatusCode)
 	}
 }
+
+func TestGenerateSecret(t *testing.T) {
+	secret, err := generateSecret()
+	if err != nil {
+		t.Fatalf("Error generating secret: %v", err)
+	}
+	t.Logf("Generated secret: %s", secret)
+}