diff --git a/Dockerfile.example-golang b/Dockerfile.example-golang index 25c817fc3..a8ec10f34 100644 --- a/Dockerfile.example-golang +++ b/Dockerfile.example-golang @@ -1,4 +1,4 @@ -FROM golang:1.16 +FROM golang:1.22 RUN mkdir -p /viron/example/golang RUN mkdir -p /viron/packages/golang diff --git a/docker-compose.example-nodejs.mongo.yml b/docker-compose.example-nodejs.mongo.yml index 3161bbb51..2561208d8 100644 --- a/docker-compose.example-nodejs.mongo.yml +++ b/docker-compose.example-nodejs.mongo.yml @@ -22,7 +22,7 @@ services: - $PWD/example/nodejs/cert:/viron/example/nodejs/cert - $PWD/packages/nodejs:/viron/packages/nodejs - $PWD/packages/linter:/viron/packages/linter - command: npm run dev + command: run dev mongo: extends: diff --git a/docker-compose.example-nodejs.mysql.yml b/docker-compose.example-nodejs.mysql.yml index d8e4e9654..855fbc948 100644 --- a/docker-compose.example-nodejs.mysql.yml +++ b/docker-compose.example-nodejs.mysql.yml @@ -22,7 +22,7 @@ services: - $PWD/example/nodejs/cert:/viron/example/nodejs/cert - $PWD/packages/nodejs:/viron/packages/nodejs - $PWD/packages/linter:/viron/packages/linter - command: npm run dev + command: run dev mysql: extends: diff --git a/example/golang/go.mod b/example/golang/go.mod index 77208b75f..ce8713d3e 100644 --- a/example/golang/go.mod +++ b/example/golang/go.mod @@ -1,12 +1,12 @@ module github.com/cam-inc/viron/example/golang -go 1.16 +go 1.22 require ( github.com/cam-inc/viron/packages/golang v0.0.0-00010101000000-000000000000 - github.com/getkin/kin-openapi v0.66.0 + github.com/getkin/kin-openapi v0.94.0 github.com/go-chi/chi v1.5.1 - github.com/go-chi/chi/v5 v5.0.3 + github.com/go-chi/chi/v5 v5.0.7 github.com/go-chi/cors v1.2.0 github.com/go-sql-driver/mysql v1.6.0 github.com/golang-migrate/migrate/v4 v4.14.1 @@ -17,4 +17,125 @@ require ( go.uber.org/automaxprocs v1.4.0 ) +require ( + cloud.google.com/go v0.93.3 // indirect + cloud.google.com/go/spanner v1.9.0 // indirect + cloud.google.com/go/storage v1.10.0 // indirect + github.com/Blank-Xu/sql-adapter v0.0.0-20210714092925-0bdd0d548758 // indirect + github.com/ClickHouse/clickhouse-go v1.3.12 // indirect + github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible // indirect + github.com/apache/arrow/go/arrow v0.0.0-20200601151325-b2287a20f230 // indirect + github.com/aws/aws-sdk-go v1.34.28 // indirect + github.com/casbin/casbin/v2 v2.34.2 // indirect + github.com/casbin/mongodb-adapter/v3 v3.2.1 // indirect + github.com/cenkalti/backoff/v4 v4.0.2 // indirect + github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 // indirect + github.com/cockroachdb/cockroach-go v0.0.0-20190925194419-606b3d062051 // indirect + github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/deepmap/oapi-codegen v1.8.3 // indirect + github.com/denisenkom/go-mssqldb v0.10.0 // indirect + github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect + github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712 // indirect + github.com/friendsofgo/errors v0.9.2 // indirect + github.com/ghodss/yaml v1.0.0 // indirect + github.com/go-chi/jwtauth v1.2.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/swag v0.21.1 // indirect + github.com/go-stack/stack v1.8.0 // indirect + github.com/goccy/go-json v0.9.7 // indirect + github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4 // indirect + github.com/gofrs/uuid v4.0.0+incompatible // indirect + github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect + github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect + github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/snappy v0.0.3 // indirect + github.com/google/flatbuffers v1.11.0 // indirect + github.com/google/go-cmp v0.5.6 // indirect + github.com/google/go-github v17.0.0+incompatible // indirect + github.com/google/go-querystring v1.0.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/googleapis/gax-go/v2 v2.1.0 // indirect + github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect + github.com/hashicorp/errwrap v1.0.0 // indirect + github.com/hashicorp/go-multierror v1.1.0 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/jackc/chunkreader/v2 v2.0.1 // indirect + github.com/jackc/pgconn v1.3.2 // indirect + github.com/jackc/pgio v1.0.0 // indirect + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgproto3/v2 v2.0.1 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/k0kubun/pp v2.3.0+incompatible // indirect + github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect + github.com/klauspost/compress v1.9.5 // indirect + github.com/ktrysmt/go-bitbucket v0.6.4 // indirect + github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect + github.com/lestrrat-go/blackmagic v1.0.1 // indirect + github.com/lestrrat-go/httpcc v1.0.1 // indirect + github.com/lestrrat-go/iter v1.0.2 // indirect + github.com/lestrrat-go/jwx v1.2.24 // indirect + github.com/lestrrat-go/option v1.0.0 // indirect + github.com/lib/pq v1.8.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/mattn/go-colorable v0.1.8 // indirect + github.com/mattn/go-isatty v0.0.12 // indirect + github.com/mattn/go-sqlite3 v1.10.0 // indirect + github.com/mitchellh/mapstructure v1.4.1 // indirect + github.com/mutecomm/go-sqlcipher/v4 v4.4.0 // indirect + github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8 // indirect + github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba // indirect + github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237 // indirect + github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24 // indirect + github.com/snowflakedb/glog v0.0.0-20180824191149-f5055e6f21ce // indirect + github.com/snowflakedb/gosnowflake v1.3.5 // indirect + github.com/spf13/cast v1.3.1 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/volatiletech/inflect v0.0.1 // indirect + github.com/volatiletech/null/v8 v8.1.2 // indirect + github.com/volatiletech/randomize v0.0.1 // indirect + github.com/volatiletech/strmangle v0.0.1 // indirect + github.com/xanzy/go-gitlab v0.15.0 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.0.2 // indirect + github.com/xdg-go/stringprep v1.0.2 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + github.com/xeipuuv/gojsonschema v1.2.0 // indirect + github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect + gitlab.com/nyarla/go-crypt v0.0.0-20160106005555-d9a5dc2b789b // indirect + go.opencensus.io v0.23.0 // indirect + go.uber.org/atomic v1.7.0 // indirect + golang.org/x/crypto v0.0.0-20220513210258-46612604a0f9 // indirect + golang.org/x/net v0.0.0-20220513224357-95641704303c // indirect + golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f // indirect + golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/tools v0.1.5 // indirect + golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f // indirect + google.golang.org/api v0.56.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71 // indirect + google.golang.org/grpc v1.40.0 // indirect + google.golang.org/protobuf v1.28.0 // indirect + gopkg.in/inf.v0 v0.9.1 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + modernc.org/b v1.0.0 // indirect + modernc.org/db v1.0.0 // indirect + modernc.org/file v1.0.0 // indirect + modernc.org/fileutil v1.0.0 // indirect + modernc.org/golex v1.0.0 // indirect + modernc.org/internal v1.0.0 // indirect + modernc.org/lldb v1.0.0 // indirect + modernc.org/mathutil v1.0.0 // indirect + modernc.org/ql v1.0.0 // indirect + modernc.org/sortutil v1.1.0 // indirect + modernc.org/strutil v1.1.0 // indirect + modernc.org/zappy v1.0.0 // indirect +) + replace github.com/cam-inc/viron/packages/golang => ../../packages/golang diff --git a/example/golang/go.sum b/example/golang/go.sum index 327eb4a5e..0f94d107e 100644 --- a/example/golang/go.sum +++ b/example/golang/go.sum @@ -124,14 +124,19 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369 h1:XNT/Zf5l++1Pyg08/HV04ppB0gKxAqtZQBRYiYrUuYk= github.com/cznic/mathutil v0.0.0-20180504122225-ca4c9f2c1369/go.mod h1:e6NPNENfs9mPDVNRekM7lKScauxd5kXTr1Mfyig6TDM= 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/deepmap/oapi-codegen v1.8.1 h1:gSKgzu1DvWfRctnr0UVwieWkg1LEecP0C2htZyBwDTA= -github.com/deepmap/oapi-codegen v1.8.1/go.mod h1:YLgSKSDv/bZQB7N4ws6luhozi3cEdRktEqrX88CvjIw= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/deepmap/oapi-codegen v1.8.3 h1:0TkiSYTJGD1GU+CTyiKT5XqFZfrxkaTlFGxE1J69VAY= +github.com/deepmap/oapi-codegen v1.8.3/go.mod h1:WG64zU4J1vxgkwgXq1ysfi9eayMH9y1g2aXNdCXr/i0= github.com/denisenkom/go-mssqldb v0.0.0-20200620013148-b91950f658ec/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= github.com/denisenkom/go-mssqldb v0.10.0 h1:QykgLZBorFE95+gO3u9esLd0BmbvpWp0/waNNZfHBM8= github.com/denisenkom/go-mssqldb v0.10.0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= @@ -140,8 +145,6 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/dhui/dktest v0.3.3 h1:DBuH/9GFaWbDRa42qsut/hbQu+srAQ0rPWnUoiGX7CA= github.com/dhui/dktest v0.3.3/go.mod h1:EML9sP4sqJELHn4jV7B0TY8oF6077nk83/tz7M56jcQ= -github.com/dlclark/regexp2 v1.2.0 h1:8sAhBGEM0dRWogWqWyQeIJnxjWO6oIjl8FKqREDsGfk= -github.com/dlclark/regexp2 v1.2.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible h1:iWPIG7pWIsCwT6ZtHnTUpoVMnete7O/pzd9HFE3+tn8= @@ -170,15 +173,15 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/fsouza/fake-gcs-server v1.17.0 h1:OeH75kBZcZa3ZE+zz/mFdJ2btt9FgqfjI7gIh9+5fvk= github.com/fsouza/fake-gcs-server v1.17.0/go.mod h1:D1rTE4YCyHFNa99oyJJ5HyclvN/0uQR+pM/VdlL83bw= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= -github.com/getkin/kin-openapi v0.66.0 h1:GNEnjUYK5j5TR8CrXBQ5Nao9kVd7kPpoTr0Y0q4eaSA= -github.com/getkin/kin-openapi v0.66.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= +github.com/getkin/kin-openapi v0.94.0 h1:bAxg2vxgnHHHoeefVdmGbR+oxtJlcv5HsJJa3qmAHuo= +github.com/getkin/kin-openapi v0.94.0/go.mod h1:LWZfzOd7PRy8GJ1dJ6mCU6tNdSfOwRac1BUPam4aw6Q= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-chi/chi v1.5.1 h1:kfTK3Cxd/dkMu/rKs5ZceWYp+t5CtiE7vmaTv3LjC6w= github.com/go-chi/chi v1.5.1/go.mod h1:REp24E+25iKvxgeTfHmdUoL5x15kBiDBlnIl5bCwe2k= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= -github.com/go-chi/chi/v5 v5.0.3 h1:khYQBdPivkYG1s1TAzDQG1f6eX4kD2TItYVZexL5rS4= -github.com/go-chi/chi/v5 v5.0.3/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= +github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= github.com/go-chi/cors v1.2.0 h1:tV1g1XENQ8ku4Bq3K9ub2AtgG+p16SmzeMSGTwrOKdE= github.com/go-chi/cors v1.2.0/go.mod h1:sSbTewc+6wYHBBCW7ytsFSn836hqM7JxpglAy2Vzc58= github.com/go-chi/jwtauth v1.2.0 h1:Z116SPpevIABBYsv8ih/AHYBHmd4EufKSKsLUnWdrTM= @@ -191,8 +194,9 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9 github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= +github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= @@ -224,8 +228,9 @@ github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWe github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ= github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0= github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw= -github.com/goccy/go-json v0.3.5 h1:HqrLjEWx7hD62JRhBh+mHv+rEEzBANIu6O0kbDlaLzU= github.com/goccy/go-json v0.3.5/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4 h1:vF83LI8tAakwEwvWZtrIEx7pOySacl2TOxx6eXk4ePo= github.com/gocql/gocql v0.0.0-20190301043612-f6df8288f9b4/go.mod h1:4Fw1eo5iaEhDUs8XyuhSVCVy52Jq3L+/3GJgYkwc+/0= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -380,7 +385,6 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jackc/chunkreader v1.0.0 h1:4s39bBR8ByfqH+DKm8rQA3E1LHZWB9XWcrz8fqaZbe0= github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= @@ -396,7 +400,6 @@ github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2 h1:JVX6jT/XfzNqIjye47 github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0 h1:FYYE4yRw+AgI8wXIinMlNjBbp/UitDJwfj5LqqewP1A= github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= @@ -420,6 +423,8 @@ github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfC github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= @@ -447,29 +452,38 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/ktrysmt/go-bitbucket v0.6.4 h1:C8dUGp0qkwncKtAnozHCbbqhptefzEd1I0sfnuy9rYQ= github.com/ktrysmt/go-bitbucket v0.6.4/go.mod h1:9u0v3hsd2rqCHRIpbir1oP7F58uo5dq19sBYvuMoyQ4= github.com/labstack/echo/v4 v4.2.1/go.mod h1:AA49e0DZ8kk5jTOOCKNuPR6oTnBS0dYiM4FW1e6jwpg= github.com/labstack/gommon v0.3.0/go.mod h1:MULnywXg0yavhxWKc+lOruYdAhDwPK9wf0OL7NoOu+k= -github.com/lestrrat-go/backoff/v2 v2.0.7 h1:i2SeK33aOFJlUNJZzf2IpXRBvqBBnaGXfY5Xaop/GsE= github.com/lestrrat-go/backoff/v2 v2.0.7/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= +github.com/lestrrat-go/blackmagic v1.0.1 h1:lS5Zts+5HIC/8og6cGHb0uCcNCa3OUt1ygh3Qz2Fe80= +github.com/lestrrat-go/blackmagic v1.0.1/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU= github.com/lestrrat-go/codegen v1.0.0/go.mod h1:JhJw6OQAuPEfVKUCLItpaVLumDGWQznd1VaXrBk9TdM= -github.com/lestrrat-go/httpcc v1.0.0 h1:FszVC6cKfDvBKcJv646+lkh4GydQg2Z29scgUfkOpYc= github.com/lestrrat-go/httpcc v1.0.0/go.mod h1:tGS/u00Vh5N6FHNkExqGGNId8e0Big+++0Gf8MBnAvE= -github.com/lestrrat-go/iter v1.0.0 h1:QD+hHQPDSHC4rCJkZYY/yXChYr/vjfBopKekTc+7l4Q= +github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= github.com/lestrrat-go/iter v1.0.0/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= -github.com/lestrrat-go/jwx v1.1.0 h1:gerfaQK3mEIL8X8oJ5MFvsB/JuxXoGryLtTlNmPi3/k= +github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= +github.com/lestrrat-go/iter v1.0.2 h1:gMXo1q4c2pHmC3dn8LzRhJfP1ceCbgSiT9lUydIzltI= +github.com/lestrrat-go/iter v1.0.2/go.mod h1:Momfcq3AnRlRjI5b5O8/G5/BvpzrhoFTZcn06fEOPt4= github.com/lestrrat-go/jwx v1.1.0/go.mod h1:vn9FzD6gJtKkgYs7RTKV7CjWtEka8F/voUollhnn4QE= +github.com/lestrrat-go/jwx v1.2.24 h1:N6Qsn6TUsDzz+qgS/1xcfBtkQfnbwW01fLFJpuYgKsg= +github.com/lestrrat-go/jwx v1.2.24/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= github.com/lestrrat-go/option v0.0.0-20210103042652-6f1ecfceda35/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/lestrrat-go/option v1.0.0 h1:WqAWL8kh8VcSoD6xjSH34/1m8yxluXQbDeKNfvFeEO4= github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= -github.com/lestrrat-go/pdebug/v3 v3.0.1 h1:3G5sX/aw/TbMTtVc9U7IHBWRZtMvwvBziF1e4HoQtv8= github.com/lestrrat-go/pdebug/v3 v3.0.1/go.mod h1:za+m+Ve24yCxTEhR59N7UlnJomWwCiIqbJRmKeiADU4= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -482,8 +496,10 @@ github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czP github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq0y3QnmWAArdw9PqbmotexnWx/FU8= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/pkger v0.15.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= @@ -530,6 +546,7 @@ github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8 h1:P48LjvUQpT github.com/nakagami/firebirdsql v0.0.0-20190310045651-3c02a58cfed8/go.mod h1:86wM1zFnC6/uDBfZGNwB65O+pR2OFi5q/YQaEUid1qA= github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba h1:fhFP5RliM2HW/8XdcO5QngSfFli9GcRIpMXvypTQt6E= github.com/neo4j/neo4j-go-driver v1.8.1-0.20200803113522-b626aa943eba/go.mod h1:ncO5VaFWh0Nrt+4KT4mOZboaczBZcLuHrG+/sUeP8gI= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= @@ -575,6 +592,8 @@ github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6L github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= +github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= @@ -599,8 +618,6 @@ github.com/snowflakedb/glog v0.0.0-20180824191149-f5055e6f21ce/go.mod h1:EB/w24p github.com/snowflakedb/gosnowflake v1.3.5 h1:/Ep0cXv4/3o+iXQvh+6CDjHCRPk2AM42l/AMR9PM94Q= github.com/snowflakedb/gosnowflake v1.3.5/go.mod h1:13Ky+lxzIm3VqNDZJdyvu9MCGy+WgRdYFdXp96UcLZU= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soongo/path-to-regexp v1.6.3 h1:6iOWlYPUwjHNE4eiYZl5TMunNBkqs9MH9SDD/c6p8do= -github.com/soongo/path-to-regexp v1.6.3/go.mod h1:tXCyQMiXR7WQwF49yZ4QWgtbvqma2NKDt5kOisBJiHQ= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= @@ -631,8 +648,9 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= @@ -726,8 +744,10 @@ golang.org/x/crypto v0.0.0-20200709230013-948cd5f35899/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201217014255-9d1352758620/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220513210258-46612604a0f9 h1:NUzdAbFtCJSXU20AOXgeqaUwg8Ypg4MPYmL+d+rsB5c= +golang.org/x/crypto v0.0.0-20220513210258-46612604a0f9/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 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= @@ -810,8 +830,10 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420 h1:a8jGStKg0XqKDlKqjLrXn0ioF5MH36pT7Z0BRTqLhbk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220513224357-95641704303c h1:nF9mHSvoKBLkQNQhJZNsc66z2UzAMUbLGjC95CF3pU0= +golang.org/x/net v0.0.0-20220513224357-95641704303c/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -906,11 +928,13 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf h1:2ucpDCmfkl8Bd/FsLtiD653Wf96cW37s+iGx93zsu4k= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a h1:N2T1jUrTQE9Re6TFF5PhvEHXHCguynGhKjWVsIUt5cY= +golang.org/x/sys v0.0.0-20220513210249-45d2b4557a2a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -920,8 +944,9 @@ 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.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 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= @@ -1003,8 +1028,9 @@ golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f h1:GGU+dLjvlC3qDwqYgL6UgRmHXhOOgns0bZu2Ty5mm6U= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -1142,12 +1168,15 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj 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/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -1171,6 +1200,7 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= diff --git a/example/nodejs/.env.template b/example/nodejs/.env.template index a98c15346..1c957edd1 100644 --- a/example/nodejs/.env.template +++ b/example/nodejs/.env.template @@ -1,4 +1,13 @@ GOOGLE_OAUTH2_CLIENT_ID= GOOGLE_OAUTH2_CLIENT_SECRET= +GOOGLE_OAUTH2_USER_HOSTED_DOMAINS= +OIDC_CLIENT_ID= +OIDC_CLIENT_SECRET= +OIDC_CLIENT_CONFIGURATION_URL= +OIDC_USER_HOSTED_DOMAINS= AWS_S3_ACCESS_KEY_ID= AWS_S3_SECRET_KEY= +SSL_CERTIFICATE= +SSL_PRIVATE_KEY= +SERVICE_ENV= +MODE= \ No newline at end of file diff --git a/example/nodejs/CHANGELOG.md b/example/nodejs/CHANGELOG.md new file mode 100644 index 000000000..8de0129b2 --- /dev/null +++ b/example/nodejs/CHANGELOG.md @@ -0,0 +1,12 @@ +# @viron/example-nodejs + +## 1.1.0 + +### Minor Changes + +- Added OpenId Connect to app, viron/lib(nodejs) and example(nodejs). + +### Patch Changes + +- Updated dependencies + - @viron/lib@2.4.0 diff --git a/example/nodejs/docker-compose.mongo.yml b/example/nodejs/docker-compose.mongo.yml index 7f7b64516..57033dcf9 100644 --- a/example/nodejs/docker-compose.mongo.yml +++ b/example/nodejs/docker-compose.mongo.yml @@ -18,7 +18,7 @@ services: - $PWD/package.json:/example/nodejs/package.json - $PWD/src:/example/nodejs/src - $PWD/cert:/example/nodejs/cert - command: npm run dev + command: run dev mongo: image: mongo diff --git a/example/nodejs/docker-compose.mysql.yml b/example/nodejs/docker-compose.mysql.yml index 7d86f2f27..53c3f4b8a 100644 --- a/example/nodejs/docker-compose.mysql.yml +++ b/example/nodejs/docker-compose.mysql.yml @@ -19,10 +19,10 @@ services: - $PWD/package.json:/example/nodejs/package.json - $PWD/src:/example/nodejs/src - $PWD/cert:/example/nodejs/cert - command: npm run dev + command: run dev mysql: - image: mysql + image: mysql:8.0 restart: always ports: - 3306:3306 diff --git a/example/nodejs/package.json b/example/nodejs/package.json index 4626e9772..4b2410184 100644 --- a/example/nodejs/package.json +++ b/example/nodejs/package.json @@ -1,11 +1,12 @@ { "name": "@viron/example-nodejs", - "version": "1.0.0", + "version": "1.1.0", "description": "A toolkit to speedily build a viron api server", "main": "dist/server.js", "dependencies": { "@aws-sdk/client-s3": "^3.451.0", - "@viron/lib": "^2.0.2", + "@types/sanitize-html": "^2.13.0", + "@viron/lib": "2.4.0", "accepts": "^1.3.7", "compression": "^1.7.4", "cookie-parser": "^1.4.5", @@ -20,8 +21,10 @@ "multer": "^1.4.3", "multer-s3": "^3.0.1", "mysql2": "^2.2.5", + "openid-client": "^4.7.4", "pino": "^7.6.4", "pino-http": "^6.6.0", + "sanitize-html": "^2.14.0", "sequelize": "^6.5.0", "uuid": "^8.3.2" }, diff --git a/example/nodejs/src/application.ts b/example/nodejs/src/application.ts index 33b673602..f69bd20ee 100644 --- a/example/nodejs/src/application.ts +++ b/example/nodejs/src/application.ts @@ -12,6 +12,7 @@ import { domainsAuth, domainsOas } from '@viron/lib'; import { middlewareI18n } from './middlewares/i18n'; import { middlewareNotFound } from './middlewares/notfound'; import { middlewareCors } from './middlewares/cors'; +import { csrf as middlewareCsrf } from './middlewares/csrf'; import { middlewareAccessLog } from './middlewares/accesslog'; import { middlewareAuditLog } from './middlewares/auditlog'; import { middlewareCacheControl } from './middlewares/cachecontrol'; @@ -69,6 +70,9 @@ export const createApplication = async (): Promise => { app.use(json()); app.use(urlencoded({ extended: true })); app.use(cookieParser()); + if (ctx.config.csrf) { + app.use(middlewareCsrf(ctx.config.csrf)); + } app.use(middlewareAccessLog()); app.use(middlewareI18n()); app.use(middlewareCacheControl()); diff --git a/example/nodejs/src/config/development.ts b/example/nodejs/src/config/development.ts index 34f404757..56dd1ab84 100644 --- a/example/nodejs/src/config/development.ts +++ b/example/nodejs/src/config/development.ts @@ -35,6 +35,19 @@ export const get = (): Config => { 'https://snapshot.viron.work', ], }, + csrf: { + host: 'demo.viron.work', + allowOrigins: [ + 'https://localhost:8000', + 'https://viron.work', + 'https://snapshot.viron.work', + ], + ignorePaths: [ + '/ping', + '/oidc/authorization', + '/oauth2/google/authorization', + ], + }, auth: { jwt: { secret: process.env.JWT_SECRET ?? '', @@ -45,7 +58,18 @@ export const get = (): Config => { clientId: process.env.GOOGLE_OAUTH2_CLIENT_ID ?? '', clientSecret: process.env.GOOGLE_OAUTH2_CLIENT_SECRET ?? '', additionalScopes: [], - userHostedDomains: ['cam-inc.co.jp', 'cyberagent.co.jp'], + userHostedDomains: process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS + ? process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS.split(',') + : [], + }, + oidc: { + clientId: process.env.OIDC_CLIENT_ID ?? '', + clientSecret: process.env.OIDC_CLIENT_SECRET ?? '', + configurationUrl: process.env.OIDC_CLIENT_CONFIGURATION_URL ?? '', + additionalScopes: [], + userHostedDomains: process.env.OIDC_USER_HOSTED_DOMAINS + ? process.env.OIDC_USER_HOSTED_DOMAINS.split(',') + : [], }, }, aws: { diff --git a/example/nodejs/src/config/index.ts b/example/nodejs/src/config/index.ts index fa84fd2b9..732e14718 100644 --- a/example/nodejs/src/config/index.ts +++ b/example/nodejs/src/config/index.ts @@ -25,6 +25,12 @@ export interface CorsConfig { allowOrigins: string[]; } +export interface ConfigCsrf { + host: string; + allowOrigins: string[]; + ignorePaths: string[]; +} + export interface OasConfig { infoExtentions: domainsOas.VironInfoObjectExtentions; } @@ -45,9 +51,11 @@ export interface Config { vironLib: MongoConfig | MysqlConfig; }; cors: CorsConfig; + csrf?: ConfigCsrf; auth: { jwt: domainsAuth.JwtConfig; googleOAuth2: domainsAuth.GoogleOAuthConfig; + oidc: domainsAuth.OidcConfig; }; aws: AWSConfig; oas: OasConfig; diff --git a/example/nodejs/src/config/local.ts b/example/nodejs/src/config/local.ts index a019293d8..528f99ec7 100644 --- a/example/nodejs/src/config/local.ts +++ b/example/nodejs/src/config/local.ts @@ -46,6 +46,19 @@ export const get = (mode: Mode): Config => { 'https://snapshot.viron.work', ], }, + csrf: { + host: 'example.viron.work:3000', + allowOrigins: [ + 'https://localhost:8000', + 'https://viron.work', + 'https://snapshot.viron.work', + ], + ignorePaths: [ + '/ping', + '/oidc/authorization', + '/oauth2/google/authorization', + ], + }, auth: { jwt: { secret: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', @@ -56,7 +69,18 @@ export const get = (mode: Mode): Config => { clientId: process.env.GOOGLE_OAUTH2_CLIENT_ID ?? '', clientSecret: process.env.GOOGLE_OAUTH2_CLIENT_SECRET ?? '', additionalScopes: [], - userHostedDomains: ['cam-inc.co.jp', 'cyberagent.co.jp'], + userHostedDomains: process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS + ? process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS.split(',') + : [], + }, + oidc: { + clientId: process.env.OIDC_CLIENT_ID ?? '', + clientSecret: process.env.OIDC_CLIENT_SECRET ?? '', + configurationUrl: process.env.OIDC_CLIENT_CONFIGURATION_URL ?? '', + additionalScopes: [], + userHostedDomains: process.env.OIDC_USER_HOSTED_DOMAINS + ? process.env.OIDC_USER_HOSTED_DOMAINS.split(',') + : [], }, }, aws: { diff --git a/example/nodejs/src/config/production.ts b/example/nodejs/src/config/production.ts index b28aeaabc..ac0992245 100644 --- a/example/nodejs/src/config/production.ts +++ b/example/nodejs/src/config/production.ts @@ -31,6 +31,15 @@ export const get = (): Config => { cors: { allowOrigins: ['https://viron.plus', 'https://snapshot.viron.plus'], }, + csrf: { + host: 'demo.viron.plus', + allowOrigins: ['https://viron.plus', 'https://snapshot.viron.plus'], + ignorePaths: [ + '/ping', + '/oidc/authorization', + '/oauth2/google/authorization', + ], + }, auth: { jwt: { secret: process.env.JWT_SECRET ?? '', @@ -39,10 +48,19 @@ export const get = (): Config => { }, googleOAuth2: { clientId: process.env.GOOGLE_OAUTH2_CLIENT_ID ?? '', - clientSecret: process.env.GOOGLE_OAUTH2_CLIENT_SECRET ?? '', additionalScopes: [], - userHostedDomains: ['gmail.com', 'cam-inc.co.jp', 'cyberagent.co.jp'], + userHostedDomains: process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS + ? process.env.GOOGLE_OAUTH2_USER_HOSTED_DOMAINS.split(',') + : [], + }, + // 本番demoではOIDCのIdpが準備できないので設定なしにする + oidc: { + clientId: '', + clientSecret: '', + configurationUrl: '', + additionalScopes: [], + userHostedDomains: [], }, }, aws: { diff --git a/example/nodejs/src/constants.ts b/example/nodejs/src/constants.ts index ac3e3da56..05b314ca2 100644 --- a/example/nodejs/src/constants.ts +++ b/example/nodejs/src/constants.ts @@ -2,7 +2,7 @@ export const MODE = { MYSQL: 'mysql', MONGO: 'mongo', } as const; -export type Mode = typeof MODE[keyof typeof MODE]; +export type Mode = (typeof MODE)[keyof typeof MODE]; export type StoreType = Mode; export const SERVICE_ENV = { @@ -10,7 +10,7 @@ export const SERVICE_ENV = { DEVELOPMENT: 'development', PRODUCTION: 'production', }; -export type ServiceEnv = typeof SERVICE_ENV[keyof typeof SERVICE_ENV]; +export type ServiceEnv = (typeof SERVICE_ENV)[keyof typeof SERVICE_ENV]; export const AUTHENTICATION_RESULT_TYPE = { SUCCESS: 'success', @@ -18,3 +18,5 @@ export const AUTHENTICATION_RESULT_TYPE = { } as const; export const LIMIT_MEDIA_FILE_SIZE = 2000000; + +export const CSRF_IGNORE_HTTP_METHODS = ['HEAD', 'OPTIONS']; diff --git a/example/nodejs/src/controllers/adminroles.ts b/example/nodejs/src/controllers/adminroles.ts index ac2c4289a..3eda95edf 100644 --- a/example/nodejs/src/controllers/adminroles.ts +++ b/example/nodejs/src/controllers/adminroles.ts @@ -5,8 +5,11 @@ import { RouteContext } from '../application'; export const listVironAdminRoles = async ( context: RouteContext ): Promise => { + const { size, page } = context.params.query; const result = await domainsAdminRole.listByOas( - context.req._context.apiDefinition + context.req._context.apiDefinition, + size, + page ); context.res.json(result); diff --git a/example/nodejs/src/controllers/auth.ts b/example/nodejs/src/controllers/auth.ts index bfd22b8bb..87b497a95 100644 --- a/example/nodejs/src/controllers/auth.ts +++ b/example/nodejs/src/controllers/auth.ts @@ -2,6 +2,8 @@ import { domainsAuth, genAuthorizationCookie, genOAuthStateCookie, + genOidcStateCookie, + genOidcCodeVerifierCookie, mismatchState, COOKIE_KEY, HTTP_HEADER, @@ -28,6 +30,73 @@ export const signinEmail = async (context: RouteContext): Promise => { context.res.status(204).end(); }; +// OIDCの認証画面へリダイレクト +export const oidcAuthorization = async ( + context: RouteContext +): Promise => { + const { redirectUri } = context.params.query; + const state = domainsAuth.genState(); + const client = await domainsAuth.genOidcClient( + ctx.config.auth.oidc, + redirectUri + ); + + // PKCE用のCodeVerifierを生成 + const codeVerifier = await domainsAuth.genOidcCodeVerifier(); + + // OIDC認証画面URLを取得 + const authorizationUrl = await domainsAuth.getOidcAuthorizationUrl( + ctx.config.auth.oidc, + client, + codeVerifier, + state + ); + + // CookieにOIDCのStateとPKCE用のCodeVerifierをセット + const cookies = [ + genOidcStateCookie(state), + genOidcCodeVerifierCookie(codeVerifier), + ]; + context.res.setHeader(HTTP_HEADER.SET_COOKIE, cookies); + context.res.setHeader(HTTP_HEADER.LOCATION, authorizationUrl); + context.res.status(301).end(); +}; + +// OIDCのコールバック +export const oidcCallback = async (context: RouteContext): Promise => { + const codeVerifier = context.req.cookies[COOKIE_KEY.OIDC_CODE_VERIFIER]; + const cookieState = context.req.cookies[COOKIE_KEY.OIDC_STATE]; + const { state, redirectUri } = context.requestBody; + + if (!codeVerifier || !cookieState || !state || cookieState !== state) { + throw mismatchState(); + } + + // OIDC Clientを取得 + const client = await domainsAuth.genOidcClient( + ctx.config.auth.oidc, + redirectUri + ); + const params = client.callbackParams(context.req); + const token = await domainsAuth.signinOidc( + client, + codeVerifier as string, + redirectUri, + params, + ctx.config.auth.oidc + ); + context.res.setHeader( + HTTP_HEADER.SET_COOKIE, + genAuthorizationCookie(token, { + maxAge: ctx.config.auth.jwt.expirationSec, + }) + ); + context.origRes.clearCookie(COOKIE_KEY.OIDC_STATE); + context.origRes.clearCookie(COOKIE_KEY.OIDC_CODE_VERIFIER); + + context.res.status(204).end(); +}; + // GoogleOAuth2の認可画面へリダイレクト export const oauth2GoogleAuthorization = async ( context: RouteContext diff --git a/example/nodejs/src/controllers/authconfigs.ts b/example/nodejs/src/controllers/authconfigs.ts index ab628b874..8c70a08c9 100644 --- a/example/nodejs/src/controllers/authconfigs.ts +++ b/example/nodejs/src/controllers/authconfigs.ts @@ -7,8 +7,11 @@ import { SIGNOUT_PATH, OAUTH2_GOOGLE_AUTHORIZATION_PATH, OAUTH2_GOOGLE_CALLBACK_PATH, + OIDC_AUTHORIZATION_PATH, + OIDC_CALLBACK_PATH, } from '@viron/lib'; import { RouteContext } from '../application'; +import { ctx } from '../context'; const { genAuthConfigs } = domainsAuthConfig; @@ -17,30 +20,57 @@ export const listVironAuthconfigs = async ( context: RouteContext ): Promise => { const authConfigDefinitions = [ + // メール認証は必須 { provider: AUTH_CONFIG_PROVIDER.VIRON, type: AUTH_CONFIG_TYPE.EMAIL, method: API_METHOD.POST, path: EMAIL_SIGNIN_PATH, }, - { - provider: AUTH_CONFIG_PROVIDER.GOOGLE, - type: AUTH_CONFIG_TYPE.OAUTH, - method: API_METHOD.GET, - path: OAUTH2_GOOGLE_AUTHORIZATION_PATH, - }, - { - provider: AUTH_CONFIG_PROVIDER.GOOGLE, - type: AUTH_CONFIG_TYPE.OAUTH_CALLBACK, - method: API_METHOD.POST, - path: OAUTH2_GOOGLE_CALLBACK_PATH, - }, + // サインアウトは必須 { provider: AUTH_CONFIG_PROVIDER.SIGNOUT, type: AUTH_CONFIG_TYPE.SIGNOUT, method: API_METHOD.POST, path: SIGNOUT_PATH, }, + // Google認証設定がある場合のみ追加 + ...(ctx.config.auth.googleOAuth2.clientId && + ctx.config.auth.googleOAuth2.clientSecret + ? [ + { + provider: AUTH_CONFIG_PROVIDER.GOOGLE, + type: AUTH_CONFIG_TYPE.OAUTH, + method: API_METHOD.GET, + path: OAUTH2_GOOGLE_AUTHORIZATION_PATH, + }, + { + provider: AUTH_CONFIG_PROVIDER.GOOGLE, + type: AUTH_CONFIG_TYPE.OAUTH_CALLBACK, + method: API_METHOD.POST, + path: OAUTH2_GOOGLE_CALLBACK_PATH, + }, + ] + : []), + // OIDC認証設定がある場合のみ追加 + ...(ctx.config.auth.oidc.clientId && + ctx.config.auth.oidc.clientSecret && + ctx.config.auth.oidc.configurationUrl + ? [ + { + provider: AUTH_CONFIG_PROVIDER.OIDC, + type: AUTH_CONFIG_TYPE.OIDC, + method: API_METHOD.GET, + path: OIDC_AUTHORIZATION_PATH, + }, + { + provider: AUTH_CONFIG_PROVIDER.OIDC, + type: AUTH_CONFIG_TYPE.OIDC_CALLBACK, + method: API_METHOD.POST, + path: OIDC_CALLBACK_PATH, + }, + ] + : []), ]; const result = genAuthConfigs( authConfigDefinitions, diff --git a/example/nodejs/src/controllers/resources.ts b/example/nodejs/src/controllers/resources.ts index 90b7e8ef3..2ebea3739 100644 --- a/example/nodejs/src/controllers/resources.ts +++ b/example/nodejs/src/controllers/resources.ts @@ -8,8 +8,8 @@ export const downloadResources = async ( context: RouteContext ): Promise => { const { resourceName } = context.params.path; - const { format = 'json' } = context.params.query; - const result = await exportResources(resourceName, format); + const { format = 'json', size, page, sort } = context.params.query; + const result = await exportResources(resourceName, format, size, page, sort); context.res.header(HTTP_HEADER.CONTENT_TYPE, contentType(format) || ''); context.res.header( HTTP_HEADER.CONTENT_DISPOSITION, diff --git a/example/nodejs/src/domains/resources.ts b/example/nodejs/src/domains/resources.ts index fc381b995..ea10f893b 100644 --- a/example/nodejs/src/domains/resources.ts +++ b/example/nodejs/src/domains/resources.ts @@ -1,9 +1,13 @@ +import { TABLE_SORT_DELIMITER, TABLE_SORT_ORDER } from '@viron/lib'; import { getRepository, RepositoryNames } from '../repositories'; // データエクスポート export const exportResources = async ( resourceName: string, - format: 'json' | 'csv' + format: 'json' | 'csv', + size?: number, + page?: number, + sort = [`createdAt${TABLE_SORT_DELIMITER}${TABLE_SORT_ORDER.DESC}`] // eslint-disable-next-line @typescript-eslint/ban-types ): Promise => { const repository = getRepository(resourceName as RepositoryNames); @@ -11,15 +15,15 @@ export const exportResources = async ( return format === 'json' ? {} : ''; } - const result = await repository.find(); + const result = await repository.findWithPager({}, size, page, sort); switch (format) { case 'csv': { - if (!result.length) { + if (!result.list.length) { return ''; } - const headers = Object.keys(result[0]); + const headers = Object.keys(result.list[0]); // eslint-disable-next-line @typescript-eslint/no-explicit-any - return result.reduce((ret: string, doc: any) => { + return result.list.reduce((ret: string, doc: any) => { const line: unknown[] = []; Object.entries(doc).forEach(([k, v]) => { line[headers.indexOf(k)] = v; @@ -28,6 +32,6 @@ export const exportResources = async ( }, headers.join(',')); } default: - return result; + return result.list; } }; diff --git a/example/nodejs/src/infrastructures/mysql/models/index.ts b/example/nodejs/src/infrastructures/mysql/models/index.ts index 7990cc47c..29e3b25ca 100644 --- a/example/nodejs/src/infrastructures/mysql/models/index.ts +++ b/example/nodejs/src/infrastructures/mysql/models/index.ts @@ -5,6 +5,7 @@ import * as articles from './articles'; import * as items from './items'; import * as itemDetails from './item_details'; import * as medias from './medias'; +import { mysql } from '@viron/lib'; export interface MysqlModels { [users.name]: users.UserModelStatic; @@ -13,6 +14,12 @@ export interface MysqlModels { [items.name]: items.ItemModelStatic; [itemDetails.name]: itemDetails.ItemDetailModelStatic; [medias.name]: medias.MediaModelStatic; + [mysql.models.adminUsers + .name]: mysql.MysqlModels[typeof mysql.models.adminUsers.name]; + [mysql.models.auditLogs + .name]: mysql.MysqlModels[typeof mysql.models.auditLogs.name]; + [mysql.models.revokedTokens + .name]: mysql.MysqlModels[typeof mysql.models.revokedTokens.name]; } // Get models @@ -24,6 +31,10 @@ export const models = (s: Sequelize): MysqlModels => { [items.name]: items.createModel(s), [itemDetails.name]: itemDetails.createModel(s), [medias.name]: medias.createModel(s), + [mysql.models.adminUsers.name]: mysql.models.adminUsers.createModel(s), + [mysql.models.auditLogs.name]: mysql.models.auditLogs.createModel(s), + [mysql.models.revokedTokens.name]: + mysql.models.revokedTokens.createModel(s), }; mysqlModels[items.name].belongsTo(mysqlModels[itemDetails.name], { diff --git a/example/nodejs/src/middlewares/csrf.ts b/example/nodejs/src/middlewares/csrf.ts new file mode 100644 index 000000000..e987b91cb --- /dev/null +++ b/example/nodejs/src/middlewares/csrf.ts @@ -0,0 +1,71 @@ +import { NextFunction, Request, Response, RequestHandler } from 'express'; +import { ConfigCsrf } from '../config'; +import { logger } from '../context'; +import { CSRF_IGNORE_HTTP_METHODS } from '../constants'; +import { forbidden } from '@viron/lib'; + +export const csrf = (options: ConfigCsrf): RequestHandler => { + logger.info('Use middlwares#csrf. %O', options); + // allowOriginsに *.examle.com のようなワイルドカードを指定可能にするために正規表現を生成 + const regExps = options.allowOrigins.map((allowOrigin) => { + return { + allowOrigin: allowOrigin, + re: new RegExp(`^${allowOrigin.replace(/\*/g, '.*')}$`), + }; + }); + const match = ( + obj: { allowOrigin: string; re: RegExp }, + origin: string + ): boolean => { + return obj.re.test(origin); + }; + + const middleware: RequestHandler = ( + req: Request, + _res: Response, + next: NextFunction + ) => { + const host = req.get('host'); + const origin = req.get('origin'); + + // ignorePathsに含まれていれば無視 + if (!options.ignorePaths || options.ignorePaths.includes(req.path)) { + return next(); + } + + logger.debug('csrf options: %o', options); + logger.debug('csrf host: %s', host); + logger.debug('csrf method: %s', req.method); + logger.debug('csrf headers: %o', req.headers); + logger.debug('csrf origin: %s', origin); + + // CSRF対象外のHTTPメソッドの場合は無視 + if (CSRF_IGNORE_HTTP_METHODS.includes(req.method)) { + return next(); + } + + // originがない場合は403 + if (!origin) { + logger.error('csrf illegal origin. origin: %s', origin); + return next(forbidden()); + } + + // hostが異なる場合は403 + if (options.host !== host) { + logger.error('csrf illegal host . host: %s', host); + return next(forbidden()); + } + + // allowOriginsに含まれていればOK + const isAllow = regExps.find((obj) => { + return match(obj, origin); + }); + if (isAllow) { + return next(); + } + + logger.error('csrf illegal origin. origin: %s', origin); + next(forbidden()); + }; + return middleware; +}; diff --git a/example/nodejs/src/middlewares/errorhandler.ts b/example/nodejs/src/middlewares/errorhandler.ts index 56d0a0671..d72e360d0 100644 --- a/example/nodejs/src/middlewares/errorhandler.ts +++ b/example/nodejs/src/middlewares/errorhandler.ts @@ -2,13 +2,31 @@ import { ErrorRequestHandler } from 'express'; import accepts from 'accepts'; import { HTTP_HEADER } from '@viron/lib'; import { logger } from '../context'; +import sanitizeHtml from 'sanitize-html'; -// eslint-disable-next-line @typescript-eslint/no-explicit-any -const stringify = (val: any): string => { - if (val instanceof Error) { - return String(val.stack ?? val); - } - return JSON.stringify(val); +// 特殊文字をUnicodeエスケープする +const escapeToUnicode = (input: string): string => { + return input.replace(/[<>"'&]/g, (char) => { + switch (char) { + case '<': + return '\\u003C'; + case '>': + return '\\u003E'; + case '&': + return '\\u0026'; + case '"': + return '\\u0022'; + case "'": + return '\\u0027'; + default: + return char; + } + }); +}; + +// サニタイズ +const sanitizeErrorContent = (content: string): string => { + return escapeToUnicode(sanitizeHtml(content)); }; export const middlewareErrorHandler = (): ErrorRequestHandler => { @@ -37,13 +55,31 @@ export const middlewareErrorHandler = (): ErrorRequestHandler => { HTTP_HEADER.CONTENT_TYPE, 'application/json; charset=utf-8' ); - const error = { message: err.message, stack: err.stack }; - res.json(error); + const sanitizedMessage = sanitizeErrorContent(err.message); + // expressデフォルトのエラーハンドラーのみerr.stackが空になるが、独自エラーハンドラーはerr.stackが表示されるので明示的に表示判断する + const sanitizedStack = + process.env.NODE_ENV !== 'production' + ? sanitizeErrorContent(err.stack ?? '') + : undefined; + res.json({ + message: sanitizedMessage, + ...(sanitizedStack ? { stack: sanitizedStack } : {}), + }); break; } default: res.setHeader(HTTP_HEADER.CONTENT_TYPE, 'text/plain; charset=utf-8'); - res.send(stringify(err)); + // expressデフォルトのエラーハンドラーのみerr.stackが空になるが、独自エラーハンドラーはerr.stackが表示されるので明示的に表示判断する + res.send( + sanitizeErrorContent( + JSON.stringify({ + message: err.message, + ...(process.env.NODE_ENV !== 'production' + ? { stack: err.stack } + : {}), + }) + ) + ); break; } }; diff --git a/example/nodejs/src/openapi/components.yaml b/example/nodejs/src/openapi/components.yaml index 31b2d6950..86a1a223f 100644 --- a/example/nodejs/src/openapi/components.yaml +++ b/example/nodejs/src/openapi/components.yaml @@ -18,6 +18,8 @@ components: description: Size of list schema: type: integer + minimum: 1 + maximum: 100 required: false PagerPageQueryParam: name: page @@ -25,6 +27,7 @@ components: description: Page number of list schema: type: integer + minimum: 1 required: false SortQueryParam: name: sort diff --git a/example/nodejs/src/openapi/resources.yaml b/example/nodejs/src/openapi/resources.yaml index c9dab69ae..afcde01d4 100644 --- a/example/nodejs/src/openapi/resources.yaml +++ b/example/nodejs/src/openapi/resources.yaml @@ -18,6 +18,9 @@ paths: parameters: - $ref: '#/components/parameters/ResourceNamePathParam' - $ref: '#/components/parameters/FormatQueryParam' + - $ref: './components.yaml#/components/parameters/PagerSizeQueryParam' + - $ref: './components.yaml#/components/parameters/PagerPageQueryParam' + - $ref: './components.yaml#/components/parameters/SortQueryParam' responses: 200: description: OK diff --git a/example/nodejs/src/security_handlers/jwt.ts b/example/nodejs/src/security_handlers/jwt.ts index 1cf3de130..e624a5412 100644 --- a/example/nodejs/src/security_handlers/jwt.ts +++ b/example/nodejs/src/security_handlers/jwt.ts @@ -29,7 +29,7 @@ const authFailure = (err: VironError): AuthenticationFailure => { }; const authSuccess = ( - user: domainsAdminUser.AdminUserView + user: domainsAdminUser.AdminUserWithCredential ): AuthenticationSuccess => { return { type: AUTHENTICATION_RESULT_TYPE.SUCCESS, user }; }; @@ -73,24 +73,42 @@ export const jwt = async ( return authFailure(forbidden()); } - const user = await domainsAdminUser.findOneById(userId); + // credentialsありでユーザー情報取得 + const user = await domainsAdminUser.findOneById(userId, true); if (user) { - switch (user.authType) { + const adminUserWithCredential = + user as domainsAdminUser.AdminUserWithCredential; + switch (adminUserWithCredential.authType) { case AUTH_TYPE.GOOGLE: { // Google認証の場合はアクセストークンの検証 if ( await domainsAuth.verifyGoogleOAuth2AccessToken( userId, - user, + adminUserWithCredential, ctx.config.auth.googleOAuth2 ) ) { - return authSuccess(user); + return authSuccess(adminUserWithCredential); + } + break; + } + case AUTH_TYPE.OIDC: { + // OIDC認証の場合はアクセストークンの検証 + const client = await domainsAuth.genOidcClient(ctx.config.auth.oidc); + if ( + await domainsAuth.verifyOidcAccessToken( + client, + ctx.config.auth.oidc, + userId, + adminUserWithCredential + ) + ) { + return authSuccess(adminUserWithCredential); } break; } default: - return authSuccess(user); + return authSuccess(adminUserWithCredential); } } } diff --git a/package-lock.json b/package-lock.json index 47b1f8f9b..463f2e1af 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,8 @@ "license": "MIT", "dependencies": { "@aws-sdk/client-s3": "^3.451.0", - "@viron/lib": "^2.0.2", + "@types/sanitize-html": "^2.13.0", + "@viron/lib": "2.4.0-alpha.3", "accepts": "^1.3.7", "compression": "^1.7.4", "cookie-parser": "^1.4.5", @@ -46,8 +47,10 @@ "multer": "^1.4.3", "multer-s3": "^3.0.1", "mysql2": "^2.2.5", + "openid-client": "^4.7.4", "pino": "^7.6.4", "pino-http": "^6.6.0", + "sanitize-html": "^2.14.0", "sequelize": "^6.5.0", "uuid": "^8.3.2" }, @@ -415,37 +418,11 @@ "@types/yargs-parser": "*" } }, - "example/nodejs/node_modules/@viron/lib": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@viron/lib/-/lib-2.1.1.tgz", - "integrity": "sha512-zUJBJftIJgZEUhKEjvkl+Zkx4FVe/waZj6G/1AaPlvAwhlixs6Ylyr13t2c1G38FExvc7oe1Ynax1T7iCA6a0Q==", - "dependencies": { - "@viron/linter": "*", - "casbin": "^5.6.1", - "casbin-mongoose-adapter": "^5.3.0", - "casbin-sequelize-adapter": "^2.2.0", - "cookie": "^0.4.1", - "debug": "^4.3.1", - "deepmerge": "^4.2.2", - "fast-copy": "^2.1.1", - "googleapis": "^92.0.0", - "json-pointer": "^0.6.1", - "json-schema-ref-parser": "^9.0.7", - "json-schema-traverse": "^1.0.0", - "jsonwebtoken": "^8.5.1", - "mongoose": "^7.3.4", - "path-to-regexp": "^6.2.0", - "sequelize": "^6.12.5", - "uuid": "^8.3.2" - }, - "engines": { - "node": ">=14" - } - }, "example/nodejs/node_modules/@viron/lib/node_modules/mongoose": { "version": "7.6.8", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.8.tgz", "integrity": "sha512-q9zAySH+UtOK5yonWyNcLfq3PxrY6s4gdta4qNGKNOE2yTVoY9FP4hQtvWYnv4rkdk7T8QmQMC7bbhJjDxIunw==", + "extraneous": true, "dependencies": { "bson": "^5.5.0", "kareem": "2.5.1", @@ -530,14 +507,6 @@ "@babel/core": "^7.0.0" } }, - "example/nodejs/node_modules/bson": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", - "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", - "engines": { - "node": ">=14.20.1" - } - }, "example/nodejs/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", @@ -1164,126 +1133,59 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "example/nodejs/node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "example/nodejs/node_modules/jose": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", + "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" + "@panva/asn1.js": "^1.0.0" }, "engines": { - "node": ">=4", - "npm": ">=1.4.28" - } - }, - "example/nodejs/node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "bin": { - "semver": "bin/semver" - } - }, - "example/nodejs/node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "example/nodejs/node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "example/nodejs/node_modules/kareem": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", - "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", - "engines": { - "node": ">=12.0.0" + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" } }, - "example/nodejs/node_modules/mongodb": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.1.tgz", - "integrity": "sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q==", + "example/nodejs/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dependencies": { - "bson": "^5.5.0", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=14.20.1" - }, - "optionalDependencies": { - "@mongodb-js/saslprep": "^1.1.0" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.0.0", - "kerberos": "^1.0.0 || ^2.0.0", - "mongodb-client-encryption": ">=2.3.0 <3", - "snappy": "^7.2.2" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - } + "node": ">=10" } }, - "example/nodejs/node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "example/nodejs/node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "engines": { - "node": ">=4.0.0" + "node": ">= 6" } }, - "example/nodejs/node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "example/nodejs/node_modules/openid-client": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.9.1.tgz", + "integrity": "sha512-DYUF07AHjI3QDKqKbn2F7RqozT4hyi4JvmpodLrq0HHoNP7t/AjeG/uqiBK1/N2PZSAQEThVjDLHSmJN4iqu/w==", "dependencies": { - "debug": "4.x" + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" }, "engines": { - "node": ">=14.0.0" + "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" } }, - "example/nodejs/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "example/nodejs/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -1340,11 +1242,6 @@ "node": ">=10" } }, - "example/nodejs/node_modules/sift": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", - "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" - }, "example/nodejs/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1465,6 +1362,11 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "example/nodejs/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "example/nodejs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", @@ -13176,15 +13078,6 @@ "node": ">=12.0.0" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz", - "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==", - "optional": true, - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, "node_modules/@mrmlnc/readdir-enhanced": { "version": "2.2.1", "dev": true, @@ -13350,6 +13243,14 @@ "node": ">=10" } }, + "node_modules/@panva/asn1.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@panva/asn1.js/-/asn1.js-1.0.0.tgz", + "integrity": "sha512-UdkG3mLEqXgnlKsWanWcgb6dOjUzJ+XC5f+aWw30qrtjxeNUSfKX1cd5FBzOaXQumoe9nIqeZUvrRJS03HCCtw==", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@parcel/bundler-default": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.8.3.tgz", @@ -21083,6 +20984,94 @@ "@types/node": "*" } }, + "node_modules/@types/sanitize-html": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/@types/sanitize-html/-/sanitize-html-2.13.0.tgz", + "integrity": "sha512-X31WxbvW9TjIhZZNyNBZ/p5ax4ti7qsNDBDEnH4zAgmEh35YnFD1UiS6z9Cd34kKm0LslFW0KPmTQzu/oGtsqQ==", + "dependencies": { + "htmlparser2": "^8.0.0" + } + }, + "node_modules/@types/sanitize-html/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@types/sanitize-html/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/@types/sanitize-html/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@types/sanitize-html/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@types/sanitize-html/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@types/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, "node_modules/@types/sax": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", @@ -25003,126 +24992,6 @@ "minimatch": "^7.4.2" } }, - "node_modules/casbin-mongoose-adapter": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/casbin-mongoose-adapter/-/casbin-mongoose-adapter-5.3.1.tgz", - "integrity": "sha512-bF7Ff7kTedBrHkqFoBpFe222VzlNHack+3Gy8P/qaShCSBZHoVW2eN3HKK2A5rH4mjyK+NSY0CO7dP0/FsIEfg==", - "dependencies": { - "mongoose": "^7.3.4" - }, - "engines": { - "node": ">=8.0.0" - }, - "peerDependencies": { - "casbin": "^5.13.2" - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/bson": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", - "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", - "engines": { - "node": ">=14.20.1" - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/kareem": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", - "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/mongodb": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.1.tgz", - "integrity": "sha512-NBGA8AfJxGPeB12F73xXwozt8ZpeIPmCUeWRwl9xejozTXFes/3zaep9zhzs1B/nKKsw4P3I4iPfXl3K7s6g+Q==", - "dependencies": { - "bson": "^5.5.0", - "mongodb-connection-string-url": "^2.6.0", - "socks": "^2.7.1" - }, - "engines": { - "node": ">=14.20.1" - }, - "optionalDependencies": { - "@mongodb-js/saslprep": "^1.1.0" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.0.0", - "kerberos": "^1.0.0 || ^2.0.0", - "mongodb-client-encryption": ">=2.3.0 <3", - "snappy": "^7.2.2" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - } - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/mongoose": { - "version": "7.6.8", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.6.8.tgz", - "integrity": "sha512-q9zAySH+UtOK5yonWyNcLfq3PxrY6s4gdta4qNGKNOE2yTVoY9FP4hQtvWYnv4rkdk7T8QmQMC7bbhJjDxIunw==", - "dependencies": { - "bson": "^5.5.0", - "kareem": "2.5.1", - "mongodb": "5.9.1", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "16.0.1" - }, - "engines": { - "node": ">=14.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/casbin-mongoose-adapter/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/casbin-mongoose-adapter/node_modules/sift": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", - "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" - }, "node_modules/casbin-sequelize-adapter": { "version": "2.7.0", "dependencies": { @@ -27190,8 +27059,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -39970,14 +39840,20 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", - "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -40990,7 +40866,6 @@ }, "node_modules/make-error": { "version": "1.3.6", - "devOptional": true, "license": "ISC" }, "node_modules/makeerror": { @@ -45853,6 +45728,14 @@ "version": "1.1.2", "license": "MIT" }, + "node_modules/oidc-token-hash": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz", + "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==", + "engines": { + "node": "^10.13.0 || >=12.0.0" + } + }, "node_modules/on-exit-leak-free": { "version": "0.2.0", "license": "MIT" @@ -46425,6 +46308,11 @@ "protocols": "^2.0.0" } }, + "node_modules/parse-srcset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz", + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==" + }, "node_modules/parse-url": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", @@ -51962,6 +51850,107 @@ "which": "bin/which" } }, + "node_modules/sanitize-html": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.14.0.tgz", + "integrity": "sha512-CafX+IUPxZshXqqRaG9ZClSlfPVjSxI0td7n07hk8QO2oO+9JDnlcL8iM8TWeOXOIBFgIOx6zioTzM53AOMn3g==", + "dependencies": { + "deepmerge": "^4.2.2", + "escape-string-regexp": "^4.0.0", + "htmlparser2": "^8.0.0", + "is-plain-object": "^5.0.0", + "parse-srcset": "^1.0.2", + "postcss": "^8.3.11" + } + }, + "node_modules/sanitize-html/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/sanitize-html/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/sanitize-html/node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/sanitize-html/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/saslprep": { "version": "1.0.3", "license": "MIT", @@ -58761,7 +58750,7 @@ }, "packages/nodejs": { "name": "@viron/lib", - "version": "2.3.1", + "version": "2.4.0-alpha.3", "license": "MIT", "dependencies": { "@apidevtools/json-schema-ref-parser": "^11.1.0", @@ -58777,8 +58766,9 @@ "json-pointer": "^0.6.1", "json-schema-ref-parser": "^9.0.7", "json-schema-traverse": "^1.0.0", - "jsonwebtoken": "^9.0.0", + "jsonwebtoken": "^9.0.2", "mongoose": "^7.3.4", + "openid-client": "^4.7.4", "path-to-regexp": "^6.2.0", "sequelize": "^6.12.5", "uuid": "^8.3.2" @@ -59902,6 +59892,20 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "packages/nodejs/node_modules/jose": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/jose/-/jose-2.0.7.tgz", + "integrity": "sha512-5hFWIigKqC+e/lRyQhfnirrAqUdIPMB7SJRqflJaO29dW7q5DFvH1XCSTmv6PQ6pb++0k6MJlLRoS0Wv4s38Wg==", + "dependencies": { + "@panva/asn1.js": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0 < 13 || >=13.7.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "packages/nodejs/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -59921,6 +59925,17 @@ "node": ">=12.0.0" } }, + "packages/nodejs/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "packages/nodejs/node_modules/mongodb": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.6.0.tgz", @@ -59998,6 +60013,34 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "packages/nodejs/node_modules/object-hash": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } + }, + "packages/nodejs/node_modules/openid-client": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-4.7.4.tgz", + "integrity": "sha512-n+RURXYuR0bBZo9i0pn+CXZSyg5JYQ1nbwEwPQvLE7EcJt/vMZ2iIMjLehl5DvCN53XUoPVZs9KAE5r6d9fxsw==", + "dependencies": { + "aggregate-error": "^3.1.0", + "got": "^11.8.0", + "jose": "^2.0.5", + "lru-cache": "^6.0.0", + "make-error": "^1.3.6", + "object-hash": "^2.0.1", + "oidc-token-hash": "^5.0.1" + }, + "engines": { + "node": "^10.19.0 || >=12.0.0 < 13 || >=13.7.0 < 14 || >= 14.2.0" + }, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "packages/nodejs/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -60179,6 +60222,11 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "packages/nodejs/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "packages/nodejs/node_modules/yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 4665c08ca..d824e6d36 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,15 @@ # @viron/app +## 2.15.0 + +### Minor Changes + +- Added OpenId Connect to app, viron/lib(nodejs) and example(nodejs). + +### Patch Changes + +- de428228: Add a mode prop to AuthConfig to determine how to opening the OAuth endpoint. + ## 2.14.0 ### Minor Changes diff --git a/packages/app/package.json b/packages/app/package.json index b754127b3..6592149eb 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "@viron/app", - "version": "2.14.0", + "version": "2.15.0", "engines": { "node": ">=18.14.0", "npm": ">=9.3.1" diff --git a/packages/app/src/components/Skelton/index.tsx b/packages/app/src/components/Skelton/index.tsx index 613340c58..32fa372ef 100644 --- a/packages/app/src/components/Skelton/index.tsx +++ b/packages/app/src/components/Skelton/index.tsx @@ -16,7 +16,7 @@ const Skelton: React.FC = ({ 'rounded-full': variant === 'circular', rounded: variant === 'rounded', // For variant="text", adjust the height via font-size - "h-auto rounded before:content-['\\00a0']": variant === 'text', + "h-auto rounded before:content-['\\200B']": variant === 'text', }, `bg-thm-on-${on}-slight animate-pulse`, className diff --git a/packages/app/src/components/button/index.tsx b/packages/app/src/components/button/index.tsx index d18e16f8d..428705126 100644 --- a/packages/app/src/components/button/index.tsx +++ b/packages/app/src/components/button/index.tsx @@ -55,7 +55,7 @@ const Button = function ({ size = SIZE.SM, data, onClick, - rounded = variant === 'text' ? false : true, + rounded = variant !== 'text', }: React.PropsWithChildren>): JSX.Element { return (