Skip to content

Commit 7016795

Browse files
authored
Merge pull request #6 from kloeckner-i/apply_mysql_password_policy
METAL-1670 password upper and lower case has to be mixed
2 parents 92d9bc3 + e4bbb25 commit 7016795

4 files changed

Lines changed: 96 additions & 18 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,5 @@ tags
113113

114114

115115
# End of https://www.gitignore.io/api/go,vim,emacs,visualstudiocode
116+
117+
my-image.tar

pkg/utils/database/postgres.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"github.com/lib/pq"
1111
"github.com/sirupsen/logrus"
1212

13+
// Don't delete below package. Used for driver "postgres"
14+
_ "github.com/lib/pq"
1315
// Don't delete below package. Used for driver "cloudsqlpostgres"
1416
_ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres"
1517
)
@@ -117,7 +119,7 @@ func (p Postgres) isRowExist(database, query, user, password string) bool {
117119
var name string
118120
err = db.QueryRow(query).Scan(&name)
119121
if err != nil {
120-
logrus.Debug(err)
122+
logrus.Debugf("failed executing query %s - %s", query, err)
121123
return false
122124
}
123125
return true
@@ -129,12 +131,14 @@ func (p Postgres) createDatabase(admin AdminCredentials) error {
129131
if !p.isDbExist(admin) {
130132
err := p.executeQuery("postgres", create, admin)
131133
if err != nil {
134+
logrus.Errorf("failed creating postgres database %s", err)
132135
return err
133136
}
134137
}
135138

136139
err := p.addExtensions(admin)
137140
if err != nil {
141+
logrus.Errorf("failed creating postgres extensions %s", err)
138142
return err
139143
}
140144

@@ -149,17 +153,20 @@ func (p Postgres) createUser(admin AdminCredentials) error {
149153
if !p.isUserExist(admin) {
150154
err := p.executeQuery("postgres", create, admin)
151155
if err != nil {
156+
logrus.Errorf("failed creating postgres user - %s", err)
152157
return err
153158
}
154159
} else {
155160
err := p.executeQuery("postgres", update, admin)
156161
if err != nil {
162+
logrus.Errorf("failed updating postgres user %s - %s", update, err)
157163
return err
158164
}
159165
}
160166

161167
err := p.executeQuery("postgres", grant, admin)
162168
if err != nil {
169+
logrus.Errorf("failed granting postgres user %s - %s", grant, err)
163170
return err
164171
}
165172

@@ -173,6 +180,7 @@ func (p Postgres) deleteDatabase(admin AdminCredentials) error {
173180
if p.isDbExist(admin) {
174181
err := p.executeQuery("postgres", revoke, admin)
175182
if err != nil {
183+
logrus.Errorf("failed revoking connection on database %s - %s", revoke, err)
176184
return err
177185
}
178186

@@ -226,6 +234,7 @@ func (p Postgres) addExtensions(admin AdminCredentials) error {
226234
query := fmt.Sprintf("CREATE EXTENSION IF NOT EXISTS \"%s\";", ext)
227235
err := p.executeExec(p.Database, query, admin)
228236
if err != nil {
237+
logrus.Errorf("failed creating extensions %s - %s", query, err)
229238
return err
230239
}
231240
}

pkg/utils/kci/helper.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import (
55
"time"
66

77
"github.com/mitchellh/hashstructure"
8-
"github.com/sethvargo/go-password/password"
98
"github.com/sirupsen/logrus"
109
)
1110

@@ -33,22 +32,6 @@ func removeItem(slice []string, s string) []string {
3332
return newslice
3433
}
3534

36-
// GeneratePass generates secure password string
37-
func GeneratePass() string {
38-
// include only uri safe special charactors
39-
generatorInput := password.GeneratorInput{Symbols: "-_"}
40-
pwGenerator, err := password.NewGenerator(&generatorInput)
41-
if err != nil {
42-
logrus.Fatalf("Failed to create Password Generator: %v", err)
43-
}
44-
password, err := pwGenerator.Generate(20, 8, 2, false, false)
45-
if err != nil {
46-
logrus.Fatalf("Failed to generate new password: %v", err)
47-
}
48-
49-
return password
50-
}
51-
5235
// StringNotEmpty return the first not empty string
5336
func StringNotEmpty(values ...string) string {
5437
for _, value := range values {

pkg/utils/kci/password.go

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
package kci
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
"math/rand"
7+
"time"
8+
9+
"github.com/sirupsen/logrus"
10+
)
11+
12+
// GeneratePass generates secure password string
13+
func GeneratePass() string {
14+
password, err := generatePass(10, 8, 2, true)
15+
if err != nil {
16+
logrus.Fatalf("can not generate password - %s", err)
17+
}
18+
return password
19+
}
20+
21+
func generatePass(numLetters, numDigits, numSpecials int, mixCase bool) (string, error) {
22+
const (
23+
mininumLength = 8
24+
digits = "0123456789"
25+
specials = "-_" // include only uri safe special charactors
26+
uppers = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
27+
lowers = "abcdefghijklmnopqrstuvwxyz"
28+
)
29+
length := numLetters + numDigits + numSpecials
30+
31+
if length < mininumLength {
32+
return "", fmt.Errorf("total length of the password should be at least bigger than %d", mininumLength)
33+
}
34+
35+
if mixCase && (numLetters < 2) {
36+
return "", errors.New("can not mix case when the length of letters is smaller than 2")
37+
}
38+
39+
rand.Seed(time.Now().UnixNano())
40+
var bufAll []byte
41+
42+
if numDigits != 0 {
43+
bufDigits := randomElement(numDigits, digits)
44+
bufAll = append(bufAll, bufDigits...)
45+
}
46+
47+
if numSpecials != 0 {
48+
bufSpecials := randomElement(numSpecials, specials)
49+
bufAll = append(bufAll, bufSpecials...)
50+
}
51+
52+
numUppers := rand.Intn(numLetters)
53+
if numUppers == 0 && mixCase {
54+
numUppers = numUppers + 1
55+
}
56+
57+
if numUppers != 0 {
58+
bufUppers := randomElement(numUppers, uppers)
59+
bufAll = append(bufAll, bufUppers...)
60+
}
61+
62+
numLowers := numLetters - numUppers
63+
if numLowers != 0 {
64+
bufLowers := randomElement(numLowers, lowers)
65+
bufAll = append(bufAll, bufLowers...)
66+
}
67+
68+
rand.Shuffle(len(bufAll), func(i, j int) {
69+
bufAll[i], bufAll[j] = bufAll[j], bufAll[i]
70+
})
71+
72+
password := string(bufAll)
73+
74+
return password, nil
75+
}
76+
77+
func randomElement(length int, element string) []byte {
78+
buf := make([]byte, length)
79+
for i := 0; i < length; i++ {
80+
buf[i] = element[rand.Intn(len(element))]
81+
}
82+
83+
return buf
84+
}

0 commit comments

Comments
 (0)