diff --git a/core/installer/soft/client.go b/core/installer/soft/client.go
index 3e58279..a285ffd 100644
--- a/core/installer/soft/client.go
+++ b/core/installer/soft/client.go
@@ -3,7 +3,6 @@
 import (
 	"errors"
 	"fmt"
-	"golang.org/x/crypto/ssh"
 	"log"
 	"net"
 	"os"
@@ -12,6 +11,8 @@
 	"strings"
 	"time"
 
+	"golang.org/x/crypto/ssh"
+
 	"github.com/cenkalti/backoff/v4"
 	"github.com/go-git/go-billy/v5/memfs"
 	"github.com/go-git/go-git/v5"
@@ -33,9 +34,12 @@
 	AddRepository(name string) error
 	UserExists(name string) (bool, error)
 	FindUser(pubKey string) (string, error)
+	GetAllUsers() ([]string, error)
 	AddUser(name, pubKey string) error
+	RemoveUser(user string) error
 	AddPublicKey(user string, pubKey string) error
 	RemovePublicKey(user string, pubKey string) error
+	GetUserPublicKeys(user string) ([]string, error)
 	MakeUserAdmin(name string) error
 	AddReadWriteCollaborator(repo, user string) error
 	AddReadOnlyCollaborator(repo, user string) error
@@ -96,6 +100,15 @@
 	return ss.signer
 }
 
+func (ss *realClient) GetAllUsers() ([]string, error) {
+	log.Printf("Getting all users")
+	out, err := ss.RunCommand("user", "list")
+	if err != nil {
+		return nil, err
+	}
+	return strings.Fields(out), nil
+}
+
 func (ss *realClient) UserExists(name string) (bool, error) {
 	log.Printf("Checking user exists %s", name)
 	out, err := ss.RunCommand("user", "list")
@@ -132,6 +145,12 @@
 	return ss.AddPublicKey(name, pubKey)
 }
 
+func (ss *realClient) RemoveUser(user string) error {
+	log.Printf("Removing user: %s\n", user)
+	_, err := ss.RunCommand("user", "delete", user)
+	return err
+}
+
 func (ss *realClient) MakeUserAdmin(name string) error {
 	log.Printf("Making user %s admin", name)
 	_, err := ss.RunCommand("user", "set-admin", name, "true")
@@ -150,6 +169,31 @@
 	return err
 }
 
+func (ss *realClient) GetUserPublicKeys(user string) ([]string, error) {
+	log.Printf("Getting public keys for user: %s\n", user)
+	out, err := ss.RunCommand("user", "info", user)
+	if err != nil {
+		return nil, err
+	}
+	return extractPublicKeys(out), nil
+}
+
+func extractPublicKeys(userInfo string) []string {
+	var keys []string
+	lines := strings.Split(userInfo, "\n")
+	gettingKeys := false
+	for _, line := range lines {
+		if strings.HasPrefix(line, "Public keys:") {
+			gettingKeys = true
+			continue
+		}
+		if gettingKeys {
+			keys = append(keys, strings.TrimSpace(line))
+		}
+	}
+	return keys
+}
+
 func (ss *realClient) RunCommand(args ...string) (string, error) {
 	cmd := strings.Join(args, " ")
 	log.Printf("Running command %s", cmd)
