Skip to content

Commit dee3ea3

Browse files
authored
Merge pull request #18 from snapp-incubator/fix/hashing-algorithm-changed
changed algorithm of hashing to be compatible with apache standard
2 parents b78a50b + db4030a commit dee3ea3

File tree

6 files changed

+45
-32
lines changed

6 files changed

+45
-32
lines changed

go.mod

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ module github.com/snapp-incubator/simple-authenticator
33
go 1.19
44

55
require (
6+
github.com/go-logr/logr v1.2.3
7+
github.com/johnaoss/htpasswd v0.0.0-20190120213328-a0cc59f788da
68
github.com/onsi/ginkgo/v2 v2.6.0
79
github.com/onsi/gomega v1.24.1
810
github.com/opdev/subreconciler v0.0.0-20230302151718-c4c8b5ec17c5
11+
github.com/pkg/errors v0.9.1
912
github.com/spf13/viper v1.17.0
1013
k8s.io/api v0.26.0
1114
k8s.io/apimachinery v0.26.0
@@ -20,7 +23,6 @@ require (
2023
github.com/emicklei/go-restful/v3 v3.9.0 // indirect
2124
github.com/evanphx/json-patch/v5 v5.6.0 // indirect
2225
github.com/fsnotify/fsnotify v1.6.0 // indirect
23-
github.com/go-logr/logr v1.2.3 // indirect
2426
github.com/go-logr/zapr v1.2.3 // indirect
2527
github.com/go-openapi/jsonpointer v0.19.5 // indirect
2628
github.com/go-openapi/jsonreference v0.20.0 // indirect
@@ -44,7 +46,6 @@ require (
4446
github.com/modern-go/reflect2 v1.0.2 // indirect
4547
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
4648
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
47-
github.com/pkg/errors v0.9.1 // indirect
4849
github.com/prometheus/client_golang v1.14.0 // indirect
4950
github.com/prometheus/client_model v0.3.0 // indirect
5051
github.com/prometheus/common v0.37.0 // indirect
@@ -62,9 +63,9 @@ require (
6263
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
6364
golang.org/x/net v0.15.0 // indirect
6465
golang.org/x/oauth2 v0.12.0 // indirect
65-
golang.org/x/sys v0.12.0 // indirect
66-
golang.org/x/term v0.12.0 // indirect
67-
golang.org/x/text v0.13.0 // indirect
66+
golang.org/x/sys v0.15.0 // indirect
67+
golang.org/x/term v0.15.0 // indirect
68+
golang.org/x/text v0.14.0 // indirect
6869
golang.org/x/time v0.3.0 // indirect
6970
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
7071
google.golang.org/appengine v1.6.7 // indirect

go.sum

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:
188188
github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
189189
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
190190
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
191+
github.com/johnaoss/htpasswd v0.0.0-20190120213328-a0cc59f788da h1:HV5jj72yOUw49JuFGCVWyS5aIJLhRgtc+WZW8wWAHew=
192+
github.com/johnaoss/htpasswd v0.0.0-20190120213328-a0cc59f788da/go.mod h1:ZyzRn1mEXMs9GCPP3+tUmolnCuHRikkIo57/8F8sbag=
191193
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
192194
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
193195
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
@@ -293,6 +295,7 @@ github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY=
293295
github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
294296
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
295297
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
298+
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
296299
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
297300
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
298301
github.com/spf13/viper v1.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI=
@@ -336,6 +339,7 @@ go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
336339
go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
337340
go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
338341
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
342+
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
339343
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
340344
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
341345
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -486,12 +490,12 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
486490
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
487491
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
488492
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
489-
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
490-
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
493+
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
494+
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
491495
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
492496
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
493-
golang.org/x/term v0.12.0 h1:/ZfYdc3zq+q02Rv9vGqTeSItdzZTSNDmfTi0mBAuidU=
494-
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
497+
golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
498+
golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
495499
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
496500
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
497501
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -500,8 +504,8 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
500504
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
501505
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
502506
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
503-
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
504-
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
507+
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
508+
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
505509
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
506510
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
507511
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

internal/controller/basic_authenticator/provision.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,12 +136,12 @@ func (r *BasicAuthenticatorReconciler) ensureSecret(ctx context.Context, req ctr
136136
}
137137
err = updateHtpasswdField(&credentialSecret)
138138
if err != nil {
139-
r.logger.Error(err, "failed to add secret to include htpasswd field", "credential secret", credentialSecret)
139+
r.logger.Error(err, "failed to update secret to include htpasswd field")
140140
return subreconciler.RequeueWithError(err)
141141
}
142142
err = r.Update(ctx, &credentialSecret)
143143
if err != nil {
144-
r.logger.Error(err, "failed to update secret to add htpasswd field")
144+
r.logger.Error(err, "failed to update secret")
145145
return subreconciler.RequeueWithError(err)
146146
}
147147
r.credentialName = credentialSecret.Name

internal/controller/basic_authenticator/workload.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/pkg/errors"
88
"github.com/snapp-incubator/simple-authenticator/api/v1alpha1"
99
"github.com/snapp-incubator/simple-authenticator/internal/config"
10-
"github.com/snapp-incubator/simple-authenticator/pkg/md5"
10+
"github.com/snapp-incubator/simple-authenticator/pkg/htpasswd"
1111
"github.com/snapp-incubator/simple-authenticator/pkg/random_generator"
1212
appsv1 "k8s.io/api/apps/v1"
1313
corev1 "k8s.io/api/core/v1"
@@ -62,7 +62,6 @@ func createNginxDeployment(basicAuthenticator *v1alpha1.BasicAuthenticator, conf
6262
{
6363
Name: credentialName,
6464
MountPath: SecretMountDir,
65-
SubPath: SecretHtpasswdField,
6665
},
6766
},
6867
},
@@ -83,6 +82,12 @@ func createNginxDeployment(basicAuthenticator *v1alpha1.BasicAuthenticator, conf
8382
VolumeSource: corev1.VolumeSource{
8483
Secret: &corev1.SecretVolumeSource{
8584
SecretName: credentialName,
85+
Items: []corev1.KeyToPath{
86+
{
87+
Key: SecretHtpasswdField,
88+
Path: SecretHtpasswdField,
89+
},
90+
},
8691
},
8792
},
8893
},
@@ -123,7 +128,15 @@ func updateHtpasswdField(secret *corev1.Secret) error {
123128
if !ok {
124129
return defaultError.New("password not found in secret")
125130
}
126-
htpasswdString := fmt.Sprintf("%s:%s", string(username), md5.MD5Hash(string(password)))
131+
salt, err := random_generator.GenerateRandomString(8)
132+
if err != nil {
133+
return errors.Wrap(err, "failed to generate salt")
134+
}
135+
hashedPassword, err := htpasswd.ApacheHash(string(password), salt)
136+
if err != nil {
137+
return err
138+
}
139+
htpasswdString := fmt.Sprintf("%s:%s", string(username), hashedPassword)
127140
secret.Data["htpasswd"] = []byte(htpasswdString)
128141
return nil
129142
}
@@ -222,7 +235,6 @@ func injector(ctx context.Context, basicAuthenticator *v1alpha1.BasicAuthenticat
222235
{
223236
Name: credentialName,
224237
MountPath: SecretMountDir,
225-
SubPath: SecretHtpasswdField,
226238
},
227239
},
228240
})

pkg/htpasswd/hash.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package htpasswd
2+
3+
import "github.com/johnaoss/htpasswd/apr1"
4+
5+
func ApacheHash(pass, salt string) (string, error) {
6+
hashedPassword, err := apr1.Hash(pass, salt)
7+
if err != nil {
8+
return "", err
9+
}
10+
return hashedPassword, nil
11+
}

pkg/md5/md5.go

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)