From 6a67af79b71cd370a98eb427f9da76e5ce19e546 Mon Sep 17 00:00:00 2001 From: Sergey Chubaryan Date: Sat, 27 Jul 2024 18:07:36 +0300 Subject: [PATCH 1/3] added primitive args parsing --- args/args.go | 32 ++++++++++++++++++++++++++++++++ go.mod | 1 + go.sum | 2 ++ 3 files changed, 35 insertions(+) create mode 100644 args/args.go diff --git a/args/args.go b/args/args.go new file mode 100644 index 0000000..667236a --- /dev/null +++ b/args/args.go @@ -0,0 +1,32 @@ +package args + +import ( + "github.com/akamensky/argparse" +) + +type Args interface { + GetConfigPath() string +} + +func Parse(osArgs []string) (Args, error) { + parser := argparse.NewParser("backend", "runs backend") + + s := parser.String("s", "string", &argparse.Options{Required: true, Help: "Path to a config file"}) + + err := parser.Parse(osArgs) + if err != nil { + return nil, err + } + + return &args{ + ConfigPath: *s, + }, nil +} + +type args struct { + ConfigPath string +} + +func (a *args) GetConfigPath() string { + return a.ConfigPath +} diff --git a/go.mod b/go.mod index 71d1934..bce77c0 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module backend go 1.22.5 require ( + github.com/akamensky/argparse v1.4.0 github.com/gin-gonic/gin v1.10.0 github.com/go-playground/validator/v10 v10.22.0 github.com/golang-jwt/jwt/v5 v5.2.1 diff --git a/go.sum b/go.sum index 7b5667d..43e9afb 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +github.com/akamensky/argparse v1.4.0 h1:YGzvsTqCvbEZhL8zZu2AiA5nq805NZh75JNj4ajn1xc= +github.com/akamensky/argparse v1.4.0/go.mod h1:S5kwC7IuDcEr5VeXtGPRVZ5o/FdhcMlQz4IZQuw64xA= github.com/bytedance/sonic v1.11.9 h1:LFHENlIY/SLzDWverzdOvgMztTxcfcF+cqNsz9pK5zg= github.com/bytedance/sonic v1.11.9/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= From 83315c027a6e3c2a908b8a71ad331815f86f883a Mon Sep 17 00:00:00 2001 From: Sergey Chubaryan Date: Sat, 27 Jul 2024 19:04:51 +0300 Subject: [PATCH 2/3] getting config path from cmd args --- {args => args_parser}/args.go | 4 ++-- main.go | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) rename {args => args_parser}/args.go (84%) diff --git a/args/args.go b/args_parser/args.go similarity index 84% rename from args/args.go rename to args_parser/args.go index 667236a..9763bab 100644 --- a/args/args.go +++ b/args_parser/args.go @@ -1,4 +1,4 @@ -package args +package args_parser import ( "github.com/akamensky/argparse" @@ -11,7 +11,7 @@ type Args interface { func Parse(osArgs []string) (Args, error) { parser := argparse.NewParser("backend", "runs backend") - s := parser.String("s", "string", &argparse.Options{Required: true, Help: "Path to a config file"}) + s := parser.String("c", "config", &argparse.Options{Required: true, Help: "Path to a config file"}) err := parser.Parse(osArgs) if err != nil { diff --git a/main.go b/main.go index 5c5282e..302a2d2 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "backend/args_parser" "backend/config" "backend/src/handlers" "backend/src/middleware" @@ -19,7 +20,12 @@ import ( ) func main() { - conf, err := config.NewFromFile("./config_example/config.yaml") + args, err := args_parser.Parse(os.Args) + if err != nil { + panic(err) + } + + conf, err := config.NewFromFile(args.GetConfigPath()) if err != nil { panic(err) } From 00621524e9029397c8a80426a885a158b72d05c0 Mon Sep 17 00:00:00 2001 From: Sergey Chubaryan Date: Sat, 27 Jul 2024 19:21:30 +0300 Subject: [PATCH 3/3] small main code improve --- main.go | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/main.go b/main.go index 302a2d2..f87ff5f 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,9 @@ import ( "backend/src/repo" "backend/src/services" "backend/src/utils" + "crypto/rsa" "crypto/x509" + "database/sql" "encoding/pem" "fmt" "os" @@ -30,26 +32,32 @@ func main() { panic(err) } - keyRawBytes, err := os.ReadFile(conf.GetJwtSigningKey()) - if err != nil { - panic(err) + var key *rsa.PrivateKey + { + keyRawBytes, err := os.ReadFile(conf.GetJwtSigningKey()) + if err != nil { + panic(err) + } + + keyPem, _ := pem.Decode(keyRawBytes) + key, err = x509.ParsePKCS1PrivateKey(keyPem.Bytes) + if err != nil { + panic(err) + } } - keyPem, _ := pem.Decode(keyRawBytes) - key, err := x509.ParsePKCS1PrivateKey(keyPem.Bytes) - if err != nil { - panic(err) - } + var sqlDb *sql.DB + { + pgConnStr := conf.GetPostgresUrl() + connConf, err := pgx.ParseConnectionString(pgConnStr) + if err != nil { + panic(err) + } - pgConnStr := conf.GetPostgresUrl() - connConf, err := pgx.ParseConnectionString(pgConnStr) - if err != nil { - panic(err) - } - - sqlDb := stdlib.OpenDB(connConf) - if err := sqlDb.Ping(); err != nil { - panic(err) + sqlDb := stdlib.OpenDB(connConf) + if err := sqlDb.Ping(); err != nil { + panic(err) + } } jwtUtil := utils.NewJwtUtil(key)