Launcher: take app information from AppManager

Change-Id: I0dedd5a710adc4810feb9210b903655a3d2f5533
diff --git a/core/installer/cmd/launcher.go b/core/installer/cmd/launcher.go
index d86196b..be3b208 100644
--- a/core/installer/cmd/launcher.go
+++ b/core/installer/cmd/launcher.go
@@ -2,14 +2,21 @@
 
 import (
 	"fmt"
+	"os"
 
+	"github.com/giolekva/pcloud/core/installer"
+	"github.com/giolekva/pcloud/core/installer/soft"
 	"github.com/giolekva/pcloud/core/installer/welcome"
 	"github.com/spf13/cobra"
+	"golang.org/x/crypto/ssh"
 )
 
 var launcherFlags struct {
-	logoutUrl string
-	port      int
+	logoutUrl  string
+	port       int
+	repoAddr   string
+	sshKey     string
+	appManager *installer.AppManager
 }
 
 func launcherCmd() *cobra.Command {
@@ -29,14 +36,50 @@
 		"",
 		"",
 	)
+	cmd.Flags().StringVar(
+		&launcherFlags.repoAddr,
+		"repo-addr",
+		"",
+		"The address of the repository",
+	)
+	cmd.Flags().StringVar(
+		&launcherFlags.sshKey,
+		"ssh-key",
+		"",
+		"The path to the SSH key file",
+	)
 	return cmd
 }
 
 func launcherCmdRun(cmd *cobra.Command, args []string) error {
+	sshKey, err := os.ReadFile(launcherFlags.sshKey)
+	if err != nil {
+		return fmt.Errorf("failed reading ssh key: %v", err)
+	}
+	signer, err := ssh.ParsePrivateKey(sshKey)
+	if err != nil {
+		return fmt.Errorf("failed parsing ssh private key: %v", err)
+	}
+	addr, err := soft.ParseRepositoryAddress(launcherFlags.repoAddr)
+	if err != nil {
+		return err
+	}
+	repo, err := soft.CloneRepository(addr, signer)
+	if err != nil {
+		return fmt.Errorf("failed cloning repository: %v", err)
+	}
+	repoIO, err := installer.NewRepoIO(repo, signer)
+	if err != nil {
+		return fmt.Errorf("failed initializing RepoIO: %v", err)
+	}
+	appManager, err := installer.NewAppManager(repoIO, nil, "/apps")
+	if err != nil {
+		return fmt.Errorf("failed to create AppManager: %v", err)
+	}
 	s, err := welcome.NewLauncherServer(
 		launcherFlags.port,
 		launcherFlags.logoutUrl,
-		&welcome.FakeAppDirectory{},
+		&welcome.AppManagerDirectory{AppManager: appManager},
 	)
 	if err != nil {
 		return fmt.Errorf("failed to create LauncherServer: %v", err)