204 lines
5.5 KiB
Go
204 lines
5.5 KiB
Go
package base
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
var allowlistRegexTests = map[string]struct {
|
|
invalid []string
|
|
valid []string
|
|
}{
|
|
"general placeholders": {
|
|
invalid: []string{
|
|
`true`, `True`, `false`, `False`, `null`, `NULL`,
|
|
},
|
|
},
|
|
"general placeholders - repeated characters": {
|
|
invalid: []string{
|
|
`aaaaaaaaaaaaaaaaa`, `BBBBBBBBBBbBBBBBBBbBB`, `********************`,
|
|
},
|
|
valid: []string{`aaaaaaaaaaaaaaaaaaabaa`, `pas*************d`},
|
|
},
|
|
"environment variables": {
|
|
invalid: []string{`$2`, `$GIT_PASSWORD`, `${GIT_PASSWORD}`, `$password`},
|
|
valid: []string{`$yP@R.@=ibxI`, `$2a6WCust9aE`, `${not_complete1`},
|
|
},
|
|
"interpolated variables - ansible": {
|
|
invalid: []string{
|
|
`{{ x }}`, `{{ password }}`, `{{password}}`, `{{ data.proxy_password }}`,
|
|
`{{ dict1 | ansible.builtin.combine(dict2) }}`,
|
|
},
|
|
},
|
|
"interpolated variables - github actions": {
|
|
invalid: []string{
|
|
`${{ env.First_Name }}`,
|
|
`${{ env.DAY_OF_WEEK == 'Monday' }}`,
|
|
`${{env.JAVA_VERSION}}`,
|
|
`${{ github.event.issue.title }}`,
|
|
`${{ github.repository == "Gattocrucco/lsqfitgp" }}`,
|
|
`${{ github.event.pull_request.number || github.ref }}`,
|
|
`${{ github.event_name == 'pull_request' && github.event.action == 'unassigned' }}`,
|
|
`${{ secrets.SuperSecret }}`,
|
|
`${{ vars.JOB_NAME }}`,
|
|
`${{ vars.USE_VARIABLES == 'true' }}`,
|
|
},
|
|
},
|
|
"interpolated variables - nuget": {
|
|
invalid: []string{
|
|
`%MY_PASSWORD%`, `%password%`,
|
|
},
|
|
},
|
|
"interpolated variables - string fmt - golang": {
|
|
invalid: []string{
|
|
`%b`, `%c`, `%d`, `% d`, `%e`, `%E`, `%f`, `%F`, `%g`, `%G`, `%o`, `%O`, `%p`, `%q`, `%-s`, `%s`, `%t`, `%T`, `%U`, `%#U`, `%+v`, `%#v`, `%v`, `%x`, `%X`,
|
|
},
|
|
},
|
|
"interpolated variables - string fmt - python": {
|
|
invalid: []string{
|
|
`{}`, `{0}`, `{10}`,
|
|
},
|
|
},
|
|
"interpolated variables - ucd": {
|
|
invalid: []string{`@password@`, `@LDAP_PASS@`},
|
|
valid: []string{`@username@mastodon.example`},
|
|
},
|
|
"miscellaneous - file paths": {
|
|
invalid: []string{
|
|
// MacOS
|
|
`/Users/james/Projects/SwiftCode/build/Release`,
|
|
// Linux
|
|
`/tmp/screen-exchange`,
|
|
},
|
|
valid: []string{},
|
|
},
|
|
}
|
|
|
|
func TestConfigAllowlistRegexes(t *testing.T) {
|
|
cfg := CreateGlobalConfig()
|
|
allowlists := cfg.Allowlists
|
|
for name, cases := range allowlistRegexTests {
|
|
t.Run(name, func(t *testing.T) {
|
|
for _, c := range cases.invalid {
|
|
for _, a := range allowlists {
|
|
if !a.RegexAllowed(c) {
|
|
t.Errorf("invalid value not marked as allowed: %s", c)
|
|
}
|
|
}
|
|
}
|
|
|
|
for _, c := range cases.valid {
|
|
for _, a := range allowlists {
|
|
if a.RegexAllowed(c) {
|
|
t.Errorf("valid value marked as allowed: %s", c)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkConfigAllowlistRegexes(b *testing.B) {
|
|
cfg := CreateGlobalConfig()
|
|
allowlists := cfg.Allowlists
|
|
for n := 0; n < b.N; n++ {
|
|
for _, cases := range allowlistRegexTests {
|
|
for _, c := range cases.invalid {
|
|
for _, a := range allowlists {
|
|
a.RegexAllowed(c)
|
|
}
|
|
}
|
|
|
|
for _, c := range cases.valid {
|
|
for _, a := range allowlists {
|
|
a.RegexAllowed(c)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
var allowlistPathsTests = map[string]struct {
|
|
invalid []string
|
|
valid []string
|
|
}{
|
|
"javascript - common static assets": {
|
|
invalid: []string{
|
|
`tests/e2e/nuget/wwwroot/lib/bootstrap/dist/js/bootstrap.esm.min.js`,
|
|
`src/main/static/lib/angular.1.2.16.min.js`,
|
|
`src/main/resources/static/jquery-ui-1.12.1/jquery-ui-min.js`,
|
|
`src/main/resources/static/js/jquery-ui-1.10.4.min.js`,
|
|
`src-static/js/plotly.min.js`,
|
|
`swagger/swaggerui/swagger-ui-bundle.js.map`,
|
|
`swagger/swaggerui/swagger-ui-es-bundle.js.map`,
|
|
`src/main/static/swagger-ui.min.js`,
|
|
`swagger/swaggerui/swagger-ui.js`,
|
|
},
|
|
},
|
|
"python": {
|
|
invalid: []string{
|
|
// lock files
|
|
`Pipfile.lock`, `poetry.lock`,
|
|
// virtual environments
|
|
"env/lib/python3.7/site-packages/urllib3/util/url.py",
|
|
"venv/Lib/site-packages/regex-2018.08.29.dist-info/DESCRIPTION.rst",
|
|
"venv/lib64/python3.5/site-packages/pynvml.py",
|
|
"python/python3/virtualenv/Lib/site-packages/pyphonetics/utils.py",
|
|
"virtualenv/lib64/python3.7/base64.py",
|
|
// packages
|
|
"cde-root/usr/lib64/python2.4/site-packages/Numeric.pth",
|
|
"lib/python3.9/site-packages/setuptools/_distutils/msvccompiler.py",
|
|
"lib/python3.8/site-packages/botocore/data/alexaforbusiness/2017-11-09/service-2.json",
|
|
"code/python/3.7.4/Lib/site-packages/dask/bytes/tests/test_bytes_utils.py",
|
|
"python/3.7.4/Lib/site-packages/fsspec/utils.py",
|
|
"python/2.7.16.32/Lib/bsddb/test/test_dbenv.py",
|
|
"python/lib/python3.8/site-packages/boto3/data/ec2/2016-04-01/resources-1.json",
|
|
// distinfo
|
|
"libs/PyX-0.15.dist-info/AUTHORS",
|
|
},
|
|
},
|
|
}
|
|
|
|
func TestConfigAllowlistPaths(t *testing.T) {
|
|
cfg := CreateGlobalConfig()
|
|
allowlists := cfg.Allowlists
|
|
for name, cases := range allowlistPathsTests {
|
|
t.Run(name, func(t *testing.T) {
|
|
for _, c := range cases.invalid {
|
|
for _, a := range allowlists {
|
|
if !a.PathAllowed(c) {
|
|
t.Errorf("invalid path not marked as allowed: %s", c)
|
|
}
|
|
}
|
|
}
|
|
|
|
for _, c := range cases.valid {
|
|
for _, a := range allowlists {
|
|
if a.PathAllowed(c) {
|
|
t.Errorf("valid path marked as allowed: %s", c)
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkConfigAllowlistPaths(b *testing.B) {
|
|
cfg := CreateGlobalConfig()
|
|
allowlists := cfg.Allowlists
|
|
for n := 0; n < b.N; n++ {
|
|
for _, cases := range allowlistPathsTests {
|
|
for _, c := range cases.invalid {
|
|
for _, a := range allowlists {
|
|
a.PathAllowed(c)
|
|
}
|
|
}
|
|
|
|
for _, c := range cases.valid {
|
|
for _, a := range allowlists {
|
|
a.PathAllowed(c)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|