From a2d2833c45bc2cc3e5d77f1ec5fc3d16be16a993 Mon Sep 17 00:00:00 2001 From: Yakov Shatilov Date: Fri, 7 Mar 2025 15:51:37 +0300 Subject: [PATCH] add config --- cmd/app/main.go | 18 +++++++++++++++++- internal/config/config.go | 19 +++++++++++++++++++ internal/input/input.go | 6 +++--- 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 internal/config/config.go diff --git a/cmd/app/main.go b/cmd/app/main.go index f928dbe..24d6901 100644 --- a/cmd/app/main.go +++ b/cmd/app/main.go @@ -1,7 +1,11 @@ package main import ( + "fmt" + "os" + "gommunicator/internal/communicator" + "gommunicator/internal/config" "gommunicator/internal/input" "gommunicator/internal/logger" "gommunicator/internal/memory" @@ -20,17 +24,29 @@ QeekJS54FkHRqN62vXeEAAAADnlhc2hAeWFzaC1hc3VzAQIDBAUGBw== func main() { log := logger.SetupLogger("prod") + cfg := config.MustParse() + mem := memory.New() communicator := communicator.New().WithDefaultServerClient() uc := usecase.New(log, mem, communicator) go input.New(uc, log).Run() + readServerPrivateKey(cfg.KeyFile) + srv, err := ssh.New(log, uc, []byte(key)) if err != nil { panic(err) } - if err := srv.Start("127.0.0.1:8022"); err != nil { + if err := srv.Start(cfg.ServerAddr); err != nil { panic(err) } } + +func readServerPrivateKey(filename string) (string, error) { + file, err := os.ReadFile(filename) + if err != nil { + return "", fmt.Errorf("failed to read private key in '%s': %w", filename, err) + } + return string(file), nil +} diff --git a/internal/config/config.go b/internal/config/config.go new file mode 100644 index 0000000..0b9ceee --- /dev/null +++ b/internal/config/config.go @@ -0,0 +1,19 @@ +package config + +import "flag" + +type Config struct { + KeyFile string + ServerAddr string // "127.0.0.1:8022" +} + +func MustParse() *Config { + var cfg Config + + flag.StringVar(&cfg.KeyFile, "key", "~/.ssh/id_rsa", "private server key") + flag.StringVar(&cfg.ServerAddr, "addr", "0.0.0.0:8022", "listen address") + + flag.Parse() + + return &cfg +} diff --git a/internal/input/input.go b/internal/input/input.go index ca45e3b..bb769cc 100644 --- a/internal/input/input.go +++ b/internal/input/input.go @@ -33,11 +33,11 @@ func (i *Input) Run() { continue } // observe command - if msg[0] == '/' || msg == "?" { + if msg[0] == '/' || msg[0] == '?' { switch msg { - case "?", "/help": + case "?\n", "/help\n": fmt.Println(helpMessage) - case "/new-password": + case "/new-password\n": pass, err := i.uc.GenNewPassword() if err != nil { i.log.Error("failed to generate new client's password", "err", err)