blob: 6a8ced5987c685060f8669d5f4facc51433baebd [file] [log] [blame]
Davit Tabidze207ce082024-04-09 19:15:25 +04001package main
2
3import (
4 "fmt"
gio09a3e5b2024-04-26 14:11:06 +04005 "log"
Davit Tabidze56f86a42024-04-09 19:15:25 +04006 "os"
Davit Tabidze207ce082024-04-09 19:15:25 +04007
Davit Tabidze56f86a42024-04-09 19:15:25 +04008 "github.com/giolekva/pcloud/core/installer"
9 "github.com/giolekva/pcloud/core/installer/soft"
Davit Tabidze207ce082024-04-09 19:15:25 +040010 "github.com/giolekva/pcloud/core/installer/welcome"
gio09a3e5b2024-04-26 14:11:06 +040011
Davit Tabidze207ce082024-04-09 19:15:25 +040012 "github.com/spf13/cobra"
Davit Tabidze56f86a42024-04-09 19:15:25 +040013 "golang.org/x/crypto/ssh"
Davit Tabidze207ce082024-04-09 19:15:25 +040014)
15
16var launcherFlags struct {
Davit Tabidze563b6ad2024-06-11 13:38:56 +040017 logoutURL string
gio09a3e5b2024-04-26 14:11:06 +040018 port int
19 repoAddr string
20 sshKey string
Davit Tabidze207ce082024-04-09 19:15:25 +040021}
22
23func launcherCmd() *cobra.Command {
24 cmd := &cobra.Command{
25 Use: "launcher",
26 RunE: launcherCmdRun,
27 }
28 cmd.Flags().IntVar(
29 &launcherFlags.port,
30 "port",
31 8080,
32 "",
33 )
34 cmd.Flags().StringVar(
Davit Tabidze563b6ad2024-06-11 13:38:56 +040035 &launcherFlags.logoutURL,
Davit Tabidze207ce082024-04-09 19:15:25 +040036 "logout-url",
37 "",
38 "",
39 )
Davit Tabidze56f86a42024-04-09 19:15:25 +040040 cmd.Flags().StringVar(
41 &launcherFlags.repoAddr,
42 "repo-addr",
43 "",
44 "The address of the repository",
45 )
46 cmd.Flags().StringVar(
47 &launcherFlags.sshKey,
48 "ssh-key",
49 "",
50 "The path to the SSH key file",
51 )
Davit Tabidze207ce082024-04-09 19:15:25 +040052 return cmd
53}
54
55func launcherCmdRun(cmd *cobra.Command, args []string) error {
Davit Tabidze56f86a42024-04-09 19:15:25 +040056 sshKey, err := os.ReadFile(launcherFlags.sshKey)
57 if err != nil {
gio09a3e5b2024-04-26 14:11:06 +040058 return err
Davit Tabidze56f86a42024-04-09 19:15:25 +040059 }
60 signer, err := ssh.ParsePrivateKey(sshKey)
61 if err != nil {
gio09a3e5b2024-04-26 14:11:06 +040062 return err
Davit Tabidze56f86a42024-04-09 19:15:25 +040063 }
64 addr, err := soft.ParseRepositoryAddress(launcherFlags.repoAddr)
65 if err != nil {
66 return err
67 }
68 repo, err := soft.CloneRepository(addr, signer)
69 if err != nil {
gio09a3e5b2024-04-26 14:11:06 +040070 return err
Davit Tabidze56f86a42024-04-09 19:15:25 +040071 }
gio09a3e5b2024-04-26 14:11:06 +040072 log.Println("Cloned repository")
gioe72b54f2024-04-22 10:44:41 +040073 repoIO, err := soft.NewRepoIO(repo, signer)
Davit Tabidze56f86a42024-04-09 19:15:25 +040074 if err != nil {
gio09a3e5b2024-04-26 14:11:06 +040075 return err
Davit Tabidze56f86a42024-04-09 19:15:25 +040076 }
77 appManager, err := installer.NewAppManager(repoIO, nil, "/apps")
78 if err != nil {
gio09a3e5b2024-04-26 14:11:06 +040079 return err
Davit Tabidze56f86a42024-04-09 19:15:25 +040080 }
Davit Tabidze207ce082024-04-09 19:15:25 +040081 s, err := welcome.NewLauncherServer(
82 launcherFlags.port,
Davit Tabidze563b6ad2024-06-11 13:38:56 +040083 launcherFlags.logoutURL,
Davit Tabidze56f86a42024-04-09 19:15:25 +040084 &welcome.AppManagerDirectory{AppManager: appManager},
Davit Tabidze207ce082024-04-09 19:15:25 +040085 )
86 if err != nil {
87 return fmt.Errorf("failed to create LauncherServer: %v", err)
88 }
89 s.Start()
90 return nil
91}