Skip to content
This repository was archived by the owner on Feb 9, 2025. It is now read-only.

Commit e229130

Browse files
committed
🥦 Minor fixes
- add ssl-options - rewrite tests (remove go-convey) - increase code coverage - update to Helium v0.11.11 - update to pg v8.0.4 - update to viper v1.3.2 - update to zap v1.10.0 - replace mellium.im/sasl with github.com/mellium/sasl
1 parent a0e2fe5 commit e229130

File tree

8 files changed

+481
-146
lines changed

8 files changed

+481
-146
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
language: go
22
go:
33
- 1.11.x
4+
- 1.12.x
45
env:
56
- GO111MODULE=on
67
install:

go.mod

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
module github.com/go-helium/postgres
22

33
require (
4-
github.com/go-pg/pg v8.0.1+incompatible
5-
github.com/im-kulikov/helium v0.10.1
4+
github.com/go-pg/pg v8.0.4+incompatible
5+
github.com/im-kulikov/helium v0.11.11
66
github.com/jinzhu/inflection v0.0.0-20180308033659-04140366298a // indirect
77
github.com/pkg/errors v0.8.1
8-
github.com/smartystreets/goconvey v0.0.0-20190222223459-a17d461953aa
9-
github.com/spf13/viper v1.3.1
10-
go.uber.org/zap v1.9.1
8+
github.com/spf13/viper v1.3.2
9+
github.com/stretchr/testify v1.3.0
10+
go.uber.org/zap v1.10.0
1111
mellium.im/sasl v0.2.1 // indirect
1212
)
13+
14+
replace mellium.im/sasl v0.2.1 => github.com/mellium/sasl v0.2.1

go.sum

Lines changed: 31 additions & 52 deletions
Large diffs are not rendered by default.

orm.go

Lines changed: 70 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,15 @@ import (
1212

1313
type (
1414
// Config alias
15-
Config = struct {
16-
Addr string
17-
User string
15+
Config struct {
16+
Hostname string
17+
Username string
1818
Password string
1919
Database string
2020
Debug bool
2121
PoolSize int
22-
Logger *zap.SugaredLogger
22+
Logger *zap.Logger
23+
Options map[string]string
2324
}
2425

2526
// Hook is a simple implementation of pg.QueryHook
@@ -28,8 +29,37 @@ type (
2829
Before func(*pg.QueryEvent)
2930
After func(*pg.QueryEvent)
3031
}
32+
33+
// Error is constant error
34+
Error string
3135
)
3236

37+
const (
38+
// ErrPemParse when couldn't parse pem in sslrootcert
39+
ErrPemParse = Error("couldn't parse pem in sslrootcert")
40+
// ErrEmptyConfig when given empty options
41+
ErrEmptyConfig = Error("database empty config")
42+
// ErrEmptyLogger when logger not initialized
43+
ErrEmptyLogger = Error("database empty logger")
44+
// ErrSSLKeyHasWorldPermissions when pk permissions no u=rw (0600) or less
45+
ErrSSLKeyHasWorldPermissions = Error("private key file has group or world access. Permissions should be u=rw (0600) or less")
46+
47+
errUnsupportedSSLMode = `unsupported sslmode %q; only "require" (default), "verify-full", "verify-ca", and "disable" supported`
48+
)
49+
50+
var (
51+
// Module is default connection to PostgreSQL
52+
Module = module.Module{
53+
{Constructor: NewDefaultConfig},
54+
{Constructor: NewConnection},
55+
}
56+
)
57+
58+
// Error implementation
59+
func (e Error) Error() string {
60+
return string(e)
61+
}
62+
3363
// BeforeQuery callback
3464
func (h *Hook) BeforeQuery(e *pg.QueryEvent) {
3565
h.StartAt = time.Now()
@@ -50,38 +80,37 @@ func (h Hook) AfterQuery(e *pg.QueryEvent) {
5080
h.After(e)
5181
}
5282

53-
var (
54-
// Module is default connection to PostgreSQL
55-
Module = module.Module{
56-
{Constructor: NewDefaultConfig},
57-
{Constructor: NewConnection},
58-
}
59-
60-
// ErrEmptyConfig when given empty options
61-
ErrEmptyConfig = errors.New("database empty config")
62-
// ErrEmptyLogger when logger not initialized
63-
ErrEmptyLogger = errors.New("database empty logger")
64-
)
65-
6683
// NewDefaultConfig returns connection config
6784
func NewDefaultConfig(v *viper.Viper) (*Config, error) {
6885
if !v.IsSet("postgres") {
6986
return nil, ErrEmptyConfig
7087
}
7188

89+
// v.SetDefault("postgres.hostname", "localhost")
90+
v.SetDefault("postgres.options.sslmode", "disable")
91+
92+
// re-fetch by full key
93+
options := v.GetStringMapString("postgres.options")
94+
if len(options) > 0 {
95+
for opt := range options {
96+
options[opt] = v.GetString("postgres.options." + opt)
97+
}
98+
}
99+
72100
return &Config{
73-
Addr: v.GetString("postgres.address"),
74-
User: v.GetString("postgres.username"),
101+
Hostname: v.GetString("postgres.hostname"),
102+
Username: v.GetString("postgres.username"),
75103
Password: v.GetString("postgres.password"),
76104
Database: v.GetString("postgres.database"),
77105
Debug: v.GetBool("postgres.debug"),
78106
PoolSize: v.GetInt("postgres.pool_size"),
107+
Options: options,
79108
}, nil
80109
}
81110

82111
// NewConnection returns database connection
83-
func NewConnection(opts *Config, l *zap.Logger) (db *pg.DB, err error) {
84-
if opts == nil {
112+
func NewConnection(cfg *Config, l *zap.Logger, v *viper.Viper) (db *pg.DB, err error) {
113+
if cfg == nil {
85114
err = ErrEmptyConfig
86115
return
87116
}
@@ -91,26 +120,32 @@ func NewConnection(opts *Config, l *zap.Logger) (db *pg.DB, err error) {
91120
return
92121
}
93122

123+
opts := &pg.Options{
124+
Addr: cfg.Hostname,
125+
User: cfg.Username,
126+
Password: cfg.Password,
127+
Database: cfg.Database,
128+
PoolSize: cfg.PoolSize,
129+
}
130+
94131
l.Debug("Connect to PostgreSQL",
95-
zap.String("address", opts.Addr),
96-
zap.String("user", opts.User),
97-
zap.String("password", opts.Password),
98-
zap.String("database", opts.Database),
99-
zap.Int("pool_size", opts.PoolSize))
100-
101-
db = pg.Connect(&pg.Options{
102-
Addr: opts.Addr,
103-
User: opts.User,
104-
Password: opts.Password,
105-
Database: opts.Database,
106-
PoolSize: opts.PoolSize,
107-
})
132+
zap.String("hostname", cfg.Hostname),
133+
zap.String("username", cfg.Username),
134+
zap.String("password", cfg.Password),
135+
zap.String("database", cfg.Database),
136+
zap.Int("pool_size", cfg.PoolSize),
137+
zap.Any("options", cfg.Options))
138+
139+
if opts.TLSConfig, err = ssl(cfg.Options); err != nil {
140+
return nil, err
141+
}
108142

143+
db = pg.Connect(opts)
109144
if _, err = db.ExecOne("SELECT 1"); err != nil {
110145
return nil, errors.Wrap(err, "can't connect to postgres")
111146
}
112147

113-
if opts.Debug {
148+
if cfg.Debug {
114149
h := new(Hook)
115150
h.After = func(e *pg.QueryEvent) {
116151
query, qErr := e.FormattedQuery()

0 commit comments

Comments
 (0)