diff --git a/args_parser/args.go b/args_parser/args.go new file mode 100644 index 0000000..9763bab --- /dev/null +++ b/args_parser/args.go @@ -0,0 +1,32 @@ +package args_parser + +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("c", "config", &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= diff --git a/main.go b/main.go index 5c5282e..f87ff5f 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" @@ -8,7 +9,9 @@ import ( "backend/src/repo" "backend/src/services" "backend/src/utils" + "crypto/rsa" "crypto/x509" + "database/sql" "encoding/pem" "fmt" "os" @@ -19,31 +22,42 @@ import ( ) func main() { - conf, err := config.NewFromFile("./config_example/config.yaml") + args, err := args_parser.Parse(os.Args) if err != nil { panic(err) } - keyRawBytes, err := os.ReadFile(conf.GetJwtSigningKey()) + conf, err := config.NewFromFile(args.GetConfigPath()) if err != nil { panic(err) } - keyPem, _ := pem.Decode(keyRawBytes) - key, err := x509.ParsePKCS1PrivateKey(keyPem.Bytes) - 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) + } } - pgConnStr := conf.GetPostgresUrl() - connConf, err := pgx.ParseConnectionString(pgConnStr) - if err != nil { - panic(err) - } + var sqlDb *sql.DB + { + 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)