From 91c38de1679cafdba46bf071a891f70c3744c005 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Mon, 17 Aug 2026 18:58:18 +0300 Subject: [PATCH] DEV-000068 support strong postgres credentials --- adapters/postgres/authority_repository.go | 2 +- adapters/postgres/capability_repository.go | 3 +-- adapters/postgres/commit_repository.go | 2 +- adapters/postgres/continuity_repository.go | 21 +++++++++++++++++++-- adapters/postgres/epistemics_repository.go | 3 +-- adapters/postgres/identity_repository.go | 2 +- adapters/postgres/interaction_repository.go | 3 +-- adapters/postgres/situation_repository.go | 4 +--- adapters/postgres/work_repository.go | 3 +-- 9 files changed, 27 insertions(+), 16 deletions(-) diff --git a/adapters/postgres/authority_repository.go b/adapters/postgres/authority_repository.go index 5ca1022..08dbc69 100644 --- a/adapters/postgres/authority_repository.go +++ b/adapters/postgres/authority_repository.go @@ -11,7 +11,7 @@ import ( type AuthorityRepository struct{ pool *pgxpool.Pool } func OpenAuthority(ctx context.Context, c ContinuityConfig) (*AuthorityRepository, error) { - p, e := pgxpool.New(ctx, fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", c.Host, c.Port, c.Database, c.User, c.Password)) + p, e := openPool(ctx, c) if e != nil { return nil, e } diff --git a/adapters/postgres/capability_repository.go b/adapters/postgres/capability_repository.go index 36a56f4..4cd0096 100644 --- a/adapters/postgres/capability_repository.go +++ b/adapters/postgres/capability_repository.go @@ -19,8 +19,7 @@ var ErrCapabilityImplementationNotFound = errors.New("capability implementation type CapabilityRepository struct{ pool *pgxpool.Pool } func OpenCapability(ctx context.Context, config ContinuityConfig) (*CapabilityRepository, error) { - dsn := fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password) - pool, err := pgxpool.New(ctx, dsn) + pool, err := openPool(ctx, config) if err != nil { return nil, err } diff --git a/adapters/postgres/commit_repository.go b/adapters/postgres/commit_repository.go index da598ca..0f71bc9 100644 --- a/adapters/postgres/commit_repository.go +++ b/adapters/postgres/commit_repository.go @@ -23,7 +23,7 @@ var ( type CommitRepository struct{ pool *pgxpool.Pool } func OpenCommit(ctx context.Context, c ContinuityConfig) (*CommitRepository, error) { - p, e := pgxpool.New(ctx, fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", c.Host, c.Port, c.Database, c.User, c.Password)) + p, e := openPool(ctx, c) if e != nil { return nil, e } diff --git a/adapters/postgres/continuity_repository.go b/adapters/postgres/continuity_repository.go index 649594c..a9e42da 100644 --- a/adapters/postgres/continuity_repository.go +++ b/adapters/postgres/continuity_repository.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strconv" "git.cin.su/m/Assistant/contracts/authority" "git.cin.su/m/Assistant/contracts/continuity" @@ -29,9 +30,25 @@ var ( type ContinuityConfig struct{ Host, Port, Database, User, Password string } type ContinuityRepository struct{ pool *pgxpool.Pool } +func openPool(ctx context.Context, config ContinuityConfig) (*pgxpool.Pool, error) { + poolConfig, err := pgxpool.ParseConfig("") + if err != nil { + return nil, err + } + port, err := strconv.ParseUint(config.Port, 10, 16) + if err != nil { + return nil, fmt.Errorf("invalid postgres port: %w", err) + } + poolConfig.ConnConfig.Host = config.Host + poolConfig.ConnConfig.Port = uint16(port) + poolConfig.ConnConfig.Database = config.Database + poolConfig.ConnConfig.User = config.User + poolConfig.ConnConfig.Password = config.Password + return pgxpool.NewWithConfig(ctx, poolConfig) +} + func OpenContinuity(ctx context.Context, config ContinuityConfig) (*ContinuityRepository, error) { - dsn := fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password) - pool, err := pgxpool.New(ctx, dsn) + pool, err := openPool(ctx, config) if err != nil { return nil, err } diff --git a/adapters/postgres/epistemics_repository.go b/adapters/postgres/epistemics_repository.go index ca3645c..6b4a4aa 100644 --- a/adapters/postgres/epistemics_repository.go +++ b/adapters/postgres/epistemics_repository.go @@ -11,8 +11,7 @@ import ( type EpistemicsRepository struct{ pool *pgxpool.Pool } func OpenEpistemics(ctx context.Context, config ContinuityConfig) (*EpistemicsRepository, error) { - dsn := fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password) - pool, err := pgxpool.New(ctx, dsn) + pool, err := openPool(ctx, config) if err != nil { return nil, err } diff --git a/adapters/postgres/identity_repository.go b/adapters/postgres/identity_repository.go index 5b6e689..d03ef79 100644 --- a/adapters/postgres/identity_repository.go +++ b/adapters/postgres/identity_repository.go @@ -11,7 +11,7 @@ import ( type IdentityRepository struct{ pool *pgxpool.Pool } func OpenIdentity(ctx context.Context, config ContinuityConfig) (*IdentityRepository, error) { - pool, err := pgxpool.New(ctx, fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password)) + pool, err := openPool(ctx, config) if err != nil { return nil, err } diff --git a/adapters/postgres/interaction_repository.go b/adapters/postgres/interaction_repository.go index 1df363e..1905660 100644 --- a/adapters/postgres/interaction_repository.go +++ b/adapters/postgres/interaction_repository.go @@ -2,7 +2,6 @@ package postgres import ( "context" - "fmt" "git.cin.su/m/Assistant/contracts/interaction" "github.com/jackc/pgx/v5/pgxpool" @@ -11,7 +10,7 @@ import ( type InteractionRepository struct{ pool *pgxpool.Pool } func OpenInteraction(ctx context.Context, c ContinuityConfig) (*InteractionRepository, error) { - p, e := pgxpool.New(ctx, fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", c.Host, c.Port, c.Database, c.User, c.Password)) + p, e := openPool(ctx, c) return &InteractionRepository{p}, e } func (r *InteractionRepository) Close() { r.pool.Close() } diff --git a/adapters/postgres/situation_repository.go b/adapters/postgres/situation_repository.go index aaf4f71..773ad36 100644 --- a/adapters/postgres/situation_repository.go +++ b/adapters/postgres/situation_repository.go @@ -2,7 +2,6 @@ package postgres import ( "context" - "fmt" "strings" "git.cin.su/m/Assistant/contracts/identity" @@ -13,8 +12,7 @@ import ( type SituationRepository struct{ pool *pgxpool.Pool } func OpenSituation(ctx context.Context, config ContinuityConfig) (*SituationRepository, error) { - dsn := fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password) - pool, err := pgxpool.New(ctx, dsn) + pool, err := openPool(ctx, config) if err != nil { return nil, err } diff --git a/adapters/postgres/work_repository.go b/adapters/postgres/work_repository.go index b5b4b11..50600de 100644 --- a/adapters/postgres/work_repository.go +++ b/adapters/postgres/work_repository.go @@ -11,8 +11,7 @@ import ( type WorkRepository struct{ pool *pgxpool.Pool } func OpenWork(ctx context.Context, config ContinuityConfig) (*WorkRepository, error) { - dsn := fmt.Sprintf("host=%s port=%s dbname=%s user=%s password=%s", config.Host, config.Port, config.Database, config.User, config.Password) - pool, err := pgxpool.New(ctx, dsn) + pool, err := openPool(ctx, config) if err != nil { return nil, err } -- 2.54.0