installer: orginize bootstrapper, improve service IP handling
diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index 6027204..a19a9fc 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -1,17 +1,13 @@
 package main
 
 import (
-	"net"
 	"os"
 
-	"github.com/go-git/go-billy/v5/memfs"
-	"github.com/go-git/go-git/v5"
-	gitssh "github.com/go-git/go-git/v5/plumbing/transport/ssh"
-	"github.com/go-git/go-git/v5/storage/memory"
 	"github.com/spf13/cobra"
 	"golang.org/x/crypto/ssh"
 
 	"github.com/giolekva/pcloud/core/installer"
+	"github.com/giolekva/pcloud/core/installer/soft"
 	"github.com/giolekva/pcloud/core/installer/welcome"
 )
 
@@ -63,7 +59,11 @@
 	if err != nil {
 		return err
 	}
-	repo, err := cloneRepo(appManagerFlags.repoAddr, signer)
+	addr, err := soft.ParseRepositoryAddress(appManagerFlags.repoAddr)
+	if err != nil {
+		return err
+	}
+	repo, err := soft.CloneRepo(addr, signer)
 	if err != nil {
 		return err
 	}
@@ -88,25 +88,3 @@
 	s.Start()
 	return nil
 }
-
-func cloneRepo(address string, signer ssh.Signer) (*git.Repository, error) {
-	return git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
-		URL:             address,
-		Auth:            auth(signer),
-		RemoteName:      "origin",
-		InsecureSkipTLS: true,
-	})
-}
-
-func auth(signer ssh.Signer) *gitssh.PublicKeys {
-	return &gitssh.PublicKeys{
-		Signer: signer,
-		HostKeyCallbackHelper: gitssh.HostKeyCallbackHelper{
-			HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
-				// TODO(giolekva): verify server public key
-				// fmt.Printf("## %s || %s -- \n", serverPubKey, ssh.MarshalAuthorizedKey(key))
-				return nil
-			},
-		},
-	}
-}