blob: 832f159a1e404dafebb8be2d51760ff77ab75b49 [file] [log] [blame]
Davit Tabidze207ce082024-04-09 19:15:25 +04001package main
2
3import (
4 "fmt"
Davit Tabidze56f86a42024-04-09 19:15:25 +04005 "os"
Davit Tabidze207ce082024-04-09 19:15:25 +04006
Davit Tabidze56f86a42024-04-09 19:15:25 +04007 "github.com/giolekva/pcloud/core/installer"
8 "github.com/giolekva/pcloud/core/installer/soft"
Davit Tabidze207ce082024-04-09 19:15:25 +04009 "github.com/giolekva/pcloud/core/installer/welcome"
10 "github.com/spf13/cobra"
Davit Tabidze56f86a42024-04-09 19:15:25 +040011 "golang.org/x/crypto/ssh"
Davit Tabidze207ce082024-04-09 19:15:25 +040012)
13
14var launcherFlags struct {
Davit Tabidze56f86a42024-04-09 19:15:25 +040015 logoutUrl string
16 port int
17 repoAddr string
18 sshKey string
19 appManager *installer.AppManager
Davit Tabidze207ce082024-04-09 19:15:25 +040020}
21
22func launcherCmd() *cobra.Command {
23 cmd := &cobra.Command{
24 Use: "launcher",
25 RunE: launcherCmdRun,
26 }
27 cmd.Flags().IntVar(
28 &launcherFlags.port,
29 "port",
30 8080,
31 "",
32 )
33 cmd.Flags().StringVar(
34 &launcherFlags.logoutUrl,
35 "logout-url",
36 "",
37 "",
38 )
Davit Tabidze56f86a42024-04-09 19:15:25 +040039 cmd.Flags().StringVar(
40 &launcherFlags.repoAddr,
41 "repo-addr",
42 "",
43 "The address of the repository",
44 )
45 cmd.Flags().StringVar(
46 &launcherFlags.sshKey,
47 "ssh-key",
48 "",
49 "The path to the SSH key file",
50 )
Davit Tabidze207ce082024-04-09 19:15:25 +040051 return cmd
52}
53
54func launcherCmdRun(cmd *cobra.Command, args []string) error {
Davit Tabidze56f86a42024-04-09 19:15:25 +040055 sshKey, err := os.ReadFile(launcherFlags.sshKey)
56 if err != nil {
57 return fmt.Errorf("failed reading ssh key: %v", err)
58 }
59 signer, err := ssh.ParsePrivateKey(sshKey)
60 if err != nil {
61 return fmt.Errorf("failed parsing ssh private key: %v", err)
62 }
63 addr, err := soft.ParseRepositoryAddress(launcherFlags.repoAddr)
64 if err != nil {
65 return err
66 }
67 repo, err := soft.CloneRepository(addr, signer)
68 if err != nil {
69 return fmt.Errorf("failed cloning repository: %v", err)
70 }
gioe72b54f2024-04-22 10:44:41 +040071 repoIO, err := soft.NewRepoIO(repo, signer)
Davit Tabidze56f86a42024-04-09 19:15:25 +040072 if err != nil {
73 return fmt.Errorf("failed initializing RepoIO: %v", err)
74 }
75 appManager, err := installer.NewAppManager(repoIO, nil, "/apps")
76 if err != nil {
77 return fmt.Errorf("failed to create AppManager: %v", err)
78 }
Davit Tabidze207ce082024-04-09 19:15:25 +040079 s, err := welcome.NewLauncherServer(
80 launcherFlags.port,
81 launcherFlags.logoutUrl,
Davit Tabidze56f86a42024-04-09 19:15:25 +040082 &welcome.AppManagerDirectory{AppManager: appManager},
Davit Tabidze207ce082024-04-09 19:15:25 +040083 )
84 if err != nil {
85 return fmt.Errorf("failed to create LauncherServer: %v", err)
86 }
87 s.Start()
88 return nil
89}