diff --git a/fixtures/datagen/fakerize.py b/fixtures/datagen/fakerize.py index 1c38cc3b7..95d31da4e 100644 --- a/fixtures/datagen/fakerize.py +++ b/fixtures/datagen/fakerize.py @@ -20,6 +20,7 @@ import secrets import tarfile import datetime +import argparse import lorem from faker import Faker @@ -66,6 +67,22 @@ "Romeo Montague Labs LLC": "VERIFIED", "Oscar Inc": "PENDING_REVIEW", } +FAKE_LEIS = { + "CharlieBank": "OOT900L1XDRRL7PSIP77", + "Delta Assets": "C4TU00ZTL5Y0MHUGRJ57", + "Echo Funds": "9RLH00AZEPZAD6YPEJ97", + "Foxtrot LLC": "TVHN00DQZFMKWP8BA330", + "GolfBucks": "7BAX00RUVOVV6RPULO23", + "Hotel Corp": "JQOO00QREPQRMSXLXL26", + "IndiaCoin": "B7PE00JRMVNOWAZDYQ28", + "Juliet Capulet LLC": "WHWT00YHWLAZCX3M6D83", + "KiloVASP": "BWUN00NLE0NL2DH1UK77", + "Lima Beancounters": "BWUN00NLE0NL2DH1UK77", + "Mikes Official VASP": "XKDW00MRCXBAQJPW8A40", + "NovemberCash": "C5AR00MDD8NPUZRV2J68", + "Romeo Montague Labs LLC": "RVTZ00KDM2NIREGCLV45", + "Oscar Inc": "VZQC00XDUW7OBYGX0W22", +} VASP_STATE_CHANGES = { "SUBMITTED": { "previous_state": "NO_VERIFICATION", @@ -243,6 +260,13 @@ def fake_legal_name(vasp): } +def fake_lei(vasp): + return { + "national_identifier": FAKE_LEIS[vasp], + "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", + } + + def fake_address(country): """ Given a string representing the 2-letter country code for a VASP, return a @@ -450,6 +474,7 @@ def replace_fixtures(): tar.add(OUTPUT_DIRECTORY, arcname="synthetic") shutil.move("fakes.tgz", os.path.join("pkg", "gds", "testdata", "fakes.tgz")) + ########################################################################## # Contact Creation Functions ########################################################################## @@ -502,11 +527,7 @@ def make_verified(vasp, idx, template="fixtures/datagen/templates/verified.json" record["id"] = idx record["entity"]["name"] = fake_legal_name(vasp) record["entity"]["geographic_addresses"] = [fake_address(country)] - record["entity"]["national_identification"][ - "national_identifier" - ] = secrets.token_urlsafe(24) - # Due to IVMS101 validation constraint C9, the country of issue should not be - # filled in for a legal person. + record["entity"]["national_identification"] = fake_lei(vasp) record["entity"]["country_of_registration"] = country rng_person = random.Random(vasp+"person") record["contacts"]["legal"] = make_person(vasp, token="legal_token", rng=rng_person) @@ -558,11 +579,7 @@ def make_unverified( record["id"] = idx record["entity"]["name"] = fake_legal_name(vasp) record["entity"]["geographic_addresses"] = [fake_address(country)] - record["entity"]["national_identification"][ - "national_identifier" - ] = secrets.token_urlsafe(24) - # Due to IVMS101 validation constraint C9, the country of issue should not be - # filled in for a legal person. + record["entity"]["national_identification"] = fake_lei(vasp) record["entity"]["country_of_registration"] = country rng_person = random.Random(vasp+"person") record["contacts"]["legal"] = make_person(vasp, verified=email_verified, token="legal_token", rng=rng_person) @@ -592,7 +609,6 @@ def make_unverified( else: record["extra"]["admin_verification_token"] = "" - return record @@ -957,18 +973,25 @@ def add_vasp_cert_relationships(vasps, certreqs, certs): vasps[vasp_name]["extra"]["certificates"] = cert_ids if __name__ == "__main__": - replace = False - if len(sys.argv) > 1: - if sys.argv[1] == "--help": - print("Usage: python fixtures/datagen/fakerize.py [--help|--replace]") - print(" --help: print this message") - print(" --replace: generate and replace existing fixtures in pkg/gds/testdata") - sys.exit(0) - elif sys.argv[1] == "--replace": - replace = True - else: - print("Unknown argument: %s", sys.argv[1]) - sys.exit(1) + parser = argparse.ArgumentParser( + description="generate fake data for testing purposes", + epilog="make sure to run this in the root of the repository", + ) + + parser.add_argument( + "-r", + "--replace", + action="store_true", + default=False, + help="generate and replace existing fixtures in pkg/gds/testdata", + ) + + if not os.path.exists("fixtures") or not os.path.exists("pkg"): + print("ensure you're running this from the root of the repository:") + print(" python3 fixtures/datagen/fakerize.py") + sys.exit(1) + + args = parser.parse_args() if os.path.exists(OUTPUT_DIRECTORY): shutil.rmtree(OUTPUT_DIRECTORY) @@ -983,6 +1006,6 @@ def add_vasp_cert_relationships(vasps, certreqs, certs): store(fake_certreqs, kind="certreqs") store(fake_certs, kind="certs") - if replace: + if args.replace: replace_fixtures() print("Successfully replaced pkg/gds/testdata/fakes.tgz") diff --git a/go.mod b/go.mod index bb669a37a..64a804549 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/trisacrypto/directory -go 1.22 +go 1.22.1 toolchain go1.22.3 require ( - cloud.google.com/go/secretmanager v1.13.4 - github.com/auth0/go-jwt-middleware/v2 v2.2.1 + cloud.google.com/go/secretmanager v1.14.0 + github.com/auth0/go-jwt-middleware/v2 v2.2.2 github.com/getsentry/sentry-go v0.28.1 github.com/ghodss/yaml v1.0.0 github.com/gin-contrib/cors v1.7.2 @@ -21,15 +21,15 @@ require ( github.com/kelseyhightower/envconfig v1.4.0 github.com/mroth/weightedrand v1.0.0 github.com/oklog/ulid/v2 v2.1.0 - github.com/prometheus/client_golang v1.19.1 - github.com/rotationalio/confire v1.0.0 + github.com/prometheus/client_golang v1.20.3 + github.com/rotationalio/confire v1.1.0 github.com/rotationalio/go-ensign v0.12.0 github.com/rotationalio/honu v0.4.0 github.com/rotationalio/whisper v1.2.1 github.com/rs/zerolog v1.33.0 github.com/segmentio/ksuid v1.0.4 github.com/sendgrid/rest v2.6.9+incompatible - github.com/sendgrid/sendgrid-go v3.14.0+incompatible + github.com/sendgrid/sendgrid-go v3.16.0+incompatible github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 github.com/stretchr/testify v1.9.0 github.com/swaggo/files v1.0.1 @@ -37,33 +37,33 @@ require ( github.com/swaggo/swag v1.16.3 github.com/syndtr/goleveldb v1.0.0 github.com/trisacrypto/courier v1.0.0 - github.com/trisacrypto/trisa v1.3.0 + github.com/trisacrypto/trisa v1.4.1 github.com/urfave/cli v1.22.15 - github.com/urfave/cli/v2 v2.27.2 + github.com/urfave/cli/v2 v2.27.4 github.com/vmihailenco/msgpack/v5 v5.4.1 - golang.org/x/net v0.27.0 - google.golang.org/api v0.189.0 - google.golang.org/grpc v1.65.0 + golang.org/x/net v0.29.0 + google.golang.org/api v0.196.0 + google.golang.org/grpc v1.66.0 google.golang.org/protobuf v1.34.2 gopkg.in/square/go-jose.v2 v2.6.0 gopkg.in/yaml.v2 v2.4.0 ) require ( - cloud.google.com/go/auth v0.7.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.3 // indirect + cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect cloud.google.com/go/compute/metadata v0.5.0 // indirect - cloud.google.com/go/iam v1.1.11 // indirect + cloud.google.com/go/iam v1.2.0 // indirect github.com/KyleBanks/depth v1.2.1 // indirect github.com/PuerkitoBio/rehttp v1.4.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bytedance/sonic v1.11.9 // indirect - github.com/bytedance/sonic/loader v0.1.1 // indirect + github.com/bytedance/sonic v1.12.2 // indirect + github.com/bytedance/sonic/loader v0.2.0 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cloudwego/base64x v0.1.4 // indirect github.com/cloudwego/iasm v0.2.0 // indirect - github.com/cockroachdb/fifo v0.0.0-20240616162244-4768e80dfb9a // indirect + github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect @@ -71,7 +71,7 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.4 // indirect + github.com/gabriel-vasile/mimetype v1.4.5 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect @@ -84,8 +84,8 @@ require ( github.com/goccy/go-json v0.10.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect + github.com/google/s2a-go v0.1.8 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect github.com/googleapis/gax-go/v2 v2.13.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -102,7 +102,7 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/onsi/ginkgo v1.16.5 // indirect github.com/onsi/gomega v1.27.8 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect @@ -110,46 +110,47 @@ require ( github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/trisacrypto/lei v1.0.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect - go.opentelemetry.io/otel v1.28.0 // indirect - go.opentelemetry.io/otel/metric v1.28.0 // indirect - go.opentelemetry.io/otel/trace v1.28.0 // indirect - golang.org/x/arch v0.8.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect + go.opentelemetry.io/otel v1.29.0 // indirect + go.opentelemetry.io/otel/metric v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect + golang.org/x/arch v0.10.0 // indirect golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect - golang.org/x/mod v0.19.0 // indirect - golang.org/x/oauth2 v0.21.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/text v0.16.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.23.0 // indirect - google.golang.org/genproto v0.0.0-20240722135656-d784300faade // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240722135656-d784300faade // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade // indirect + golang.org/x/mod v0.21.0 // indirect + golang.org/x/oauth2 v0.23.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/text v0.18.0 // indirect + golang.org/x/time v0.6.0 // indirect + golang.org/x/tools v0.24.0 // indirect + google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) require ( - github.com/BurntSushi/toml v1.4.0 // indirect - github.com/DataDog/zstd v1.5.5 // indirect - github.com/auth0/go-auth0 v1.8.0 + github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect + github.com/DataDog/zstd v1.5.6 // indirect + github.com/auth0/go-auth0 v1.10.0 github.com/cockroachdb/errors v1.11.3 // indirect - github.com/cockroachdb/pebble v1.1.1 // indirect - github.com/go-playground/validator/v10 v10.22.0 // indirect + github.com/cockroachdb/pebble v1.1.2 // indirect + github.com/go-playground/validator/v10 v10.22.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/snappy v0.0.4 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect - github.com/prometheus/common v0.55.0 // indirect - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 - golang.org/x/exp/typeparams v0.0.0-20240719175910-8a7402abbf56 // indirect - golang.org/x/sys v0.22.0 // indirect - honnef.co/go/tools v0.4.7 // indirect - software.sslmate.com/src/go-pkcs12 v0.4.0 // indirect + github.com/prometheus/common v0.59.1 // indirect + golang.org/x/crypto v0.27.0 // indirect + golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e + golang.org/x/exp/typeparams v0.0.0-20240904232852-e7e105dedf7e // indirect + golang.org/x/sys v0.25.0 // indirect + honnef.co/go/tools v0.5.1 // indirect + software.sslmate.com/src/go-pkcs12 v0.5.0 // indirect ) diff --git a/go.sum b/go.sum index 90cb44ff2..1683a96f9 100644 --- a/go.sum +++ b/go.sum @@ -1,40 +1,41 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.115.0 h1:CnFSK6Xo3lDYRoBKEcAtia6VSC837/ZkJuRduSFnr14= -cloud.google.com/go v0.115.0/go.mod h1:8jIM5vVgoAEoiVxQ/O4BFTfHqulPZgs/ufEzMcFMdWU= -cloud.google.com/go/auth v0.7.2 h1:uiha352VrCDMXg+yoBtaD0tUF4Kv9vrtrWPYXwutnDE= -cloud.google.com/go/auth v0.7.2/go.mod h1:VEc4p5NNxycWQTMQEDQF0bd6aTMb6VgYDXEwiJJQAbs= -cloud.google.com/go/auth/oauth2adapt v0.2.3 h1:MlxF+Pd3OmSudg/b1yZ5lJwoXCEaeedAguodky1PcKI= -cloud.google.com/go/auth/oauth2adapt v0.2.3/go.mod h1:tMQXOfZzFuNuUxOypHlQEXgdfX5cuhwU+ffUuXRJE8I= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= +cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= +cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= +cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= -cloud.google.com/go/iam v1.1.11 h1:0mQ8UKSfdHLut6pH9FM3bI55KWR46ketn0PuXleDyxw= -cloud.google.com/go/iam v1.1.11/go.mod h1:biXoiLWYIKntto2joP+62sd9uW5EpkZmKIvfNcTWlnQ= -cloud.google.com/go/secretmanager v1.13.4 h1:pizLSVUkZ8RdeQL5Vswj/3ujVC4kSY5eTxAWyMwQ1uc= -cloud.google.com/go/secretmanager v1.13.4/go.mod h1:SjKHs6rx0ELUqfbRWrWq4e7SiNKV7QMWZtvZsQm3k5w= +cloud.google.com/go/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8= +cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q= +cloud.google.com/go/secretmanager v1.14.0 h1:P2RRu2NEsQyOjplhUPvWKqzDXUKzwejHLuSUBHI8c4w= +cloud.google.com/go/secretmanager v1.14.0/go.mod h1:q0hSFHzoW7eRgyYFH8trqEFavgrMeiJI4FETNN78vhM= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= -github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= +github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= +github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/PuerkitoBio/rehttp v1.4.0 h1:rIN7A2s+O9fmHUM1vUcInvlHj9Ysql4hE+Y0wcl/xk8= github.com/PuerkitoBio/rehttp v1.4.0/go.mod h1:LUwKPoDbDIA2RL5wYZCNsQ90cx4OJ4AWBmq6KzWZL1s= -github.com/auth0/go-auth0 v1.8.0 h1:3aawDXl446+ok8HVmrH4FBTG+ZzgS8qHaJaOGoQdg4k= -github.com/auth0/go-auth0 v1.8.0/go.mod h1:J/t2M/i8XraHTRi9hX6VcMX2wiyWzKnUD04nigFwtfk= -github.com/auth0/go-jwt-middleware/v2 v2.2.1 h1:pqxEIwlCztD0T9ZygGfOrw4NK/F9iotnCnPJVADKbkE= -github.com/auth0/go-jwt-middleware/v2 v2.2.1/go.mod h1:CSi0tuu0QrALbWdiQZwqFL8SbBhj4e2MJzkvNfjY0Us= +github.com/auth0/go-auth0 v1.10.0 h1:7fjcuVjtTET5NEg8RPl3uYadGto7WZnBl31LcnXANWc= +github.com/auth0/go-auth0 v1.10.0/go.mod h1:VMTiemb4rn2TUPiH9obD2FoHS2FoTALTsnKU0NUXLxk= +github.com/auth0/go-jwt-middleware/v2 v2.2.2 h1:vrvkFZf72r3Qbt45KLjBG3/6Xq2r3NTixWKu2e8de9I= +github.com/auth0/go-jwt-middleware/v2 v2.2.2/go.mod h1:4vwxpVtu/Kl4c4HskT+gFLjq0dra8F1joxzamrje6J0= github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0 h1:0NmehRCgyk5rljDQLKUO+cRJCnduDyn11+zGZIc9Z48= github.com/aybabtme/iocontrol v0.0.0-20150809002002-ad15bcfc95a0/go.mod h1:6L7zgvqo0idzI7IO8de6ZC051AfXb5ipkIJ7bIA2tGA= github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bytedance/sonic v1.11.9 h1:LFHENlIY/SLzDWverzdOvgMztTxcfcF+cqNsz9pK5zg= -github.com/bytedance/sonic v1.11.9/go.mod h1:LysEHSvpvDySVdC2f87zGWf6CIKJcAvqab1ZaiQtds4= -github.com/bytedance/sonic/loader v0.1.1 h1:c+e5Pt1k/cy5wMveRDyk2X4B9hF4g7an8N3zCYjJFNM= +github.com/bytedance/sonic v1.12.2 h1:oaMFuRTpMHYLpCntGca65YWt5ny+wAceDERTkT2L9lg= +github.com/bytedance/sonic v1.12.2/go.mod h1:B8Gt/XvtZ3Fqj+iSKMypzymZxw/FVwgIGKzMzT9r/rk= github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= +github.com/bytedance/sonic/loader v0.2.0 h1:zNprn+lsIP06C/IqCHs3gPQIvnvpKbbxyXQP1iU4kWM= +github.com/bytedance/sonic/loader v0.2.0/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -50,12 +51,12 @@ github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaY github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I= github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8= -github.com/cockroachdb/fifo v0.0.0-20240616162244-4768e80dfb9a h1:f52TdbU4D5nozMAhO9TvTJ2ZMCXtN4VIAmfrrZ0JXQ4= -github.com/cockroachdb/fifo v0.0.0-20240616162244-4768e80dfb9a/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 h1:pU88SPhIFid6/k0egdR5V6eALQYq2qbSmukrkgIh/0A= +github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0/go.mod h1:9/y3cnZ5GKakj/H4y9r9GTjCvAFta7KLgSHPJJYc52M= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= -github.com/cockroachdb/pebble v1.1.1 h1:XnKU22oiCLy2Xn8vp1re67cXg4SAasg/WDt1NtcRFaw= -github.com/cockroachdb/pebble v1.1.1/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= +github.com/cockroachdb/pebble v1.1.2 h1:CUh2IPtR4swHlEj48Rhfzw6l/d0qA31fItcIszQVIsA= +github.com/cockroachdb/pebble v1.1.2/go.mod h1:4exszw1r40423ZsmkG/09AFEG83I0uDgfujJdbL6kYU= github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= @@ -78,8 +79,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I= -github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s= +github.com/gabriel-vasile/mimetype v1.4.5 h1:J7wGKdGu33ocBOhGy0z653k/lFKLFDPJMG8Gql0kxn4= +github.com/gabriel-vasile/mimetype v1.4.5/go.mod h1:ibHel+/kbxn9x2407k1izTA1S81ku1z/DlgOW2QE0M4= github.com/getsentry/sentry-go v0.28.1 h1:zzaSm/vHmGllRM6Tpx1492r0YDzauArdBfkJRtY6P5k= github.com/getsentry/sentry-go v0.28.1/go.mod h1:1fQZ+7l7eeJ3wYi82q5Hg8GqAPgefRq+FP/QhafYVgg= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= @@ -113,8 +114,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.22.0 h1:k6HsTZ0sTnROkhS//R0O+55JgM8C4Bx7ia+JlgcnOao= -github.com/go-playground/validator/v10 v10.22.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.22.1 h1:40JcKH+bBNGFczGuoBYgX4I6m/i27HYW8P9FDk5PbgA= +github.com/go-playground/validator/v10 v10.22.1/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= @@ -157,13 +158,13 @@ github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= +github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= +github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0= +github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go v1.0.3 h1:9dMLqhaibYONnDRcnHdUs9P8Mw64jLlZTYlDe3leBtQ= github.com/googleapis/gax-go v1.0.3/go.mod h1:QyXYajJFdARxGzjwUfbDFIse7Spkw81SJ4LrBJXtlQ8= github.com/googleapis/gax-go/v2 v2.0.2/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= @@ -197,6 +198,8 @@ github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= @@ -216,8 +219,6 @@ github.com/mroth/weightedrand v1.0.0 h1:V8JeHChvl2MP1sAoXq4brElOcza+jxLkRuwvtQu8 github.com/mroth/weightedrand v1.0.0/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1 h1:dOYG7LS/WK00RWZc8XGgcUTlTxpp3mKhdR2Q9z9HbXM= -github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1/go.mod h1:mpRZBD8SJ55OIICQ3iWH0Yz3cjzA61JdqMLoWXeB2+8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/nxadm/tail v1.4.11 h1:8feyoE3OzPrcshW5/MJ4sGESc5cqmGkGCWlco4l0bqY= @@ -235,8 +236,8 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.27.8 h1:gegWiwZjBsf2DgiSbf5hpokZ98JVDMcWkUiigk6/KXc= github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= -github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= +github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -244,20 +245,20 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= -github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_golang v1.20.3 h1:oPksm4K8B+Vt35tUhw6GbSNSgVlVSBH0qELP/7u83l4= +github.com/prometheus/client_golang v1.20.3/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.59.1 h1:LXb1quJHWm1P6wq/U824uxYi4Sg0oGvNeUm1z5dJoX0= +github.com/prometheus/common v0.59.1/go.mod h1:GpWM7dewqmVYcd7SmRaiWVe9SSqjf0UrwnYnpEZNuT0= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= -github.com/rotationalio/confire v1.0.0 h1:Ex1jtwVyvuMhFY0EXfgbMsvd9MPO5V9LvJZ0q740M9k= -github.com/rotationalio/confire v1.0.0/go.mod h1:ug7pBDiZZl/4JjXJ2Effmj+L+0T2DBbG+Us1qQcRex0= +github.com/rotationalio/confire v1.1.0 h1:h10RDxiO/XH6UStfxY+oMJOVxt3Elqociilb7fIfANs= +github.com/rotationalio/confire v1.1.0/go.mod h1:ug7pBDiZZl/4JjXJ2Effmj+L+0T2DBbG+Us1qQcRex0= github.com/rotationalio/go-ensign v0.12.0 h1:Sks3QfMrL1nMJYnfTF+WLcHvMHKdNLEA3UoED7YHoIM= github.com/rotationalio/go-ensign v0.12.0/go.mod h1://SkPpSs3SLoeUt2NAzaUtGOpIccbnPoNc64MJpu9Dc= github.com/rotationalio/honu v0.4.0 h1:6cCuzyP5KFkDI5qMS9EOmZGwsQjr9a744J6olueE96I= @@ -273,8 +274,8 @@ github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= github.com/sendgrid/rest v2.6.9+incompatible h1:1EyIcsNdn9KIisLW50MKwmSRSK+ekueiEMJ7NEoxJo0= github.com/sendgrid/rest v2.6.9+incompatible/go.mod h1:kXX7q3jZtJXK5c5qK83bSGMdV6tsOE70KbHoqJls4lE= -github.com/sendgrid/sendgrid-go v3.14.0+incompatible h1:KDSasSTktAqMJCYClHVE94Fcif2i7P7wzISv1sU6DUA= -github.com/sendgrid/sendgrid-go v3.14.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= +github.com/sendgrid/sendgrid-go v3.16.0+incompatible h1:i8eE6IMkiCy7vusSdacHHSBUpXyTcTXy/Rl9N9aZ/Qw= +github.com/sendgrid/sendgrid-go v3.16.0+incompatible/go.mod h1:QRQt+LX/NmgVEvmdRw0VT/QgUn499+iza2FnDca9fg8= github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0 h1:Xuk8ma/ibJ1fOy4Ee11vHhUFHQNpHhrBneOCNHVXS5w= github.com/shibukawa/configdir v0.0.0-20170330084843-e180dbdc8da0/go.mod h1:7AwjWCpdPhkSmNAgUv5C7EJ4AbmjEB3r047r3DXWu3Y= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= @@ -302,16 +303,18 @@ github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFd github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= github.com/trisacrypto/courier v1.0.0 h1:BaOWbDMA89D0peM4/ggztAUmT5ZVtzkJrq6SvDFiwlE= github.com/trisacrypto/courier v1.0.0/go.mod h1:v3Orq6Me90J/SXEf6e6C3wGZchmTM58OnUNGpCzGK1Q= -github.com/trisacrypto/trisa v1.3.0 h1:/qDF8auTvuJczE+zsC+GWUZGQXbbk4D7sjcjr0n2tLA= -github.com/trisacrypto/trisa v1.3.0/go.mod h1:Mo/uCxu5iKrQXwkkQhvtGbkMBbWC80MxnqMWRZjy6Ws= +github.com/trisacrypto/lei v1.0.0 h1:LKrwOgYjW+ljzBmN6hGgBbGFAktoRmovyY7ZYZB5/uI= +github.com/trisacrypto/lei v1.0.0/go.mod h1:OsJZIYPShoSETOphRXAIlHwwesIsvo5PPpEemp/wGZI= +github.com/trisacrypto/trisa v1.4.1 h1:n28FfqNklHvHpGT00NSqNyMHklWBRJD8QV9PbBWYRQY= +github.com/trisacrypto/trisa v1.4.1/go.mod h1:zZCYwaoipb7nvSbKiJDjDf9gPNJKYWMk1WoPXcVkERY= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli v1.22.15 h1:nuqt+pdC/KqswQKhETJjo7pvn/k4xMUxgW6liI7XpnM= github.com/urfave/cli v1.22.15/go.mod h1:wSan1hmo5zeyLGBjRJbzRTNk8gwoYa2B9n4q9dmRIc0= -github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI= -github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM= +github.com/urfave/cli/v2 v2.27.4 h1:o1owoI+02Eb+K107p27wEX9Bb8eqIoZCfLXloLUSWJ8= +github.com/urfave/cli/v2 v2.27.4/go.mod h1:m4QzxcD2qpra4z7WhzEGn74WZLViBnMpb1ToCAKdGRQ= github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= @@ -323,33 +326,32 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0 h1:9G6E0TXzGFVfTnawRzrPl83iHOAV7L8NJiR8RSGYV1g= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0/go.mod h1:azvtTADFQJA8mX80jIH/akaE7h+dbm/sVuaHqN13w74= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 h1:4K4tsIXefpVJtvA/8srF4V4y0akAoPHkIslgAkjixJA= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0/go.mod h1:jjdQuTGVsXV4vSs+CJ2qYDeDPf9yIJV23qlIzBm73Vg= -go.opentelemetry.io/otel v1.28.0 h1:/SqNcYk+idO0CxKEUOtKQClMK/MimZihKYMruSMViUo= -go.opentelemetry.io/otel v1.28.0/go.mod h1:q68ijF8Fc8CnMHKyzqL6akLO46ePnjkgfIMIjUIX9z4= -go.opentelemetry.io/otel/metric v1.28.0 h1:f0HGvSl1KRAU1DLgLGFjrwVyismPlnuU6JD6bOeuA5Q= -go.opentelemetry.io/otel/metric v1.28.0/go.mod h1:Fb1eVBFZmLVTMb6PPohq3TO9IIhUisDsbJoL/+uQW4s= -go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw= -go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg= -go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+lkx9g= -go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.8.0 h1:3wRIsP3pM4yUptoR96otTUOXI367OS0+c9eeRi9doIc= -golang.org/x/arch v0.8.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= +go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= +go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +golang.org/x/arch v0.10.0 h1:S3huipmSclq3PJMNe76NGwkBR504WFkQ5dhzWzP8ZW8= +golang.org/x/arch v0.10.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= +golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190221220918-438050ddec5e/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8= -golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= -golang.org/x/exp/typeparams v0.0.0-20240719175910-8a7402abbf56 h1:i+QrZdyNyfLEnWjd5T6LQZvQP3xk2XiNs3sQgN7QDGE= -golang.org/x/exp/typeparams v0.0.0-20240719175910-8a7402abbf56/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e h1:I88y4caeGeuDQxgdoFPUq097j7kNfw6uvuiNxUBfcBk= +golang.org/x/exp v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/exp/typeparams v0.0.0-20240904232852-e7e105dedf7e h1:0DK6kA0DeobCIe4QIvfGMq0iDFRbeg0kN8E9Ln77SbY= +golang.org/x/exp/typeparams v0.0.0-20240904232852-e7e105dedf7e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -360,8 +362,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0= +golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -377,19 +379,19 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= +golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.21.0 h1:tsimM75w1tF/uws5rbeHzIWxEqElMehnc+iW793zsZs= -golang.org/x/oauth2 v0.21.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= +golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -410,8 +412,8 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -420,10 +422,10 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= +golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -436,33 +438,33 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= -golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= +golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= +golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= 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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.189.0 h1:equMo30LypAkdkLMBqfeIqtyAnlyig1JSZArl4XPwdI= -google.golang.org/api v0.189.0/go.mod h1:FLWGJKb0hb+pU2j+rJqwbnsF+ym+fQs73rbJ+KAUgy8= +google.golang.org/api v0.196.0 h1:k/RafYqebaIJBO3+SMnfEGtFVlvp5vSgqTUF54UN/zg= +google.golang.org/api v0.196.0/go.mod h1:g9IL21uGkYgvQ5BZg6BAtoGJQIm8r6EgaAbpNey5wBE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20240722135656-d784300faade h1:lKFsS7wpngDgSCeFn7MoLy+wBDQZ1UQIJD4UNM1Qvkg= -google.golang.org/genproto v0.0.0-20240722135656-d784300faade/go.mod h1:FfBgJBJg9GcpPvKIuHSZ/aE1g2ecGL74upMzGZjiGEY= -google.golang.org/genproto/googleapis/api v0.0.0-20240722135656-d784300faade h1:WxZOF2yayUHpHSbUE6NMzumUzBxYc3YGwo0YHnbzsJY= -google.golang.org/genproto/googleapis/api v0.0.0-20240722135656-d784300faade/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade h1:oCRSWfwGXQsqlVdErcyTt4A93Y8fo0/9D4b1gnI++qo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade/go.mod h1:Ue6ibwXGpU+dqIcODieyLOcgj7z8+IcskoNIgZxtrFY= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc= -google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ= +google.golang.org/grpc v1.66.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= +google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -498,9 +500,8 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.4.7 h1:9MDAWxMoSnB6QoSqiVr7P5mtkT9pOc1kSxchzPCnqJs= -honnef.co/go/tools v0.4.7/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= +honnef.co/go/tools v0.5.1 h1:4bH5o3b5ZULQ4UrBmP+63W9r7qIkqJClEA9ko5YKx+I= +honnef.co/go/tools v0.5.1/go.mod h1:e9irvo83WDG9/irijV44wr3tbhcFeRnfpVlRqVwpzMs= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= -software.sslmate.com/src/go-pkcs12 v0.4.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= +software.sslmate.com/src/go-pkcs12 v0.5.0 h1:EC6R394xgENTpZ4RltKydeDUjtlM5drOYIG9c6TVj2M= +software.sslmate.com/src/go-pkcs12 v0.5.0/go.mod h1:Qiz0EyvDRJjjxGyUQa2cCNZn/wMyzrRJ/qcDXOQazLI= diff --git a/pkg/bff/api/v1/api.go b/pkg/bff/api/v1/api.go index e59df478f..feebf1aea 100644 --- a/pkg/bff/api/v1/api.go +++ b/pkg/bff/api/v1/api.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "errors" + "fmt" "github.com/gin-gonic/gin" "github.com/trisacrypto/directory/pkg/bff/models/v1" @@ -98,6 +99,10 @@ type FieldValidationError struct { Index int `json:"index"` } +func (f *FieldValidationError) String() string { + return fmt.Sprintf("%s: %s", f.Field, f.Error) +} + func NewFieldValidationError(err error) *FieldValidationError { var verr *models.ValidationError if errors.As(err, &verr) { diff --git a/pkg/bff/config/config_test.go b/pkg/bff/config/config_test.go index 1704edb7b..31932b152 100644 --- a/pkg/bff/config/config_test.go +++ b/pkg/bff/config/config_test.go @@ -73,6 +73,7 @@ var testEnv = map[string]string{ "GDS_BFF_USER_CACHE_SIZE": "1000", "GDS_BFF_ACTIVITY_ENABLED": "true", "GDS_BFF_ACTIVITY_TOPIC": "network-activity", + "GDS_BFF_ACTIVITY_NETWORK": "testnet", "GDS_BFF_ACTIVITY_ENSIGN_CLIENT_ID": "client-id", "GDS_BFF_ACTIVITY_ENSIGN_CLIENT_SECRET": "client-secret", "GDS_BFF_ACTIVITY_ENSIGN_ENDPOINT": "api.ensign.world:443", diff --git a/pkg/bff/gds_test.go b/pkg/bff/gds_test.go index 987738fa8..5066d72ae 100644 --- a/pkg/bff/gds_test.go +++ b/pkg/bff/gds_test.go @@ -18,7 +18,6 @@ import ( models "github.com/trisacrypto/directory/pkg/models/v1" storeerrors "github.com/trisacrypto/directory/pkg/store/errors" "github.com/trisacrypto/directory/pkg/utils/wire" - "github.com/trisacrypto/trisa/pkg/ivms101" gds "github.com/trisacrypto/trisa/pkg/trisa/gds/api/v1beta1" pb "github.com/trisacrypto/trisa/pkg/trisa/gds/models/v1beta1" "google.golang.org/grpc/codes" @@ -239,6 +238,7 @@ func (s *bffTestSuite) TestLoadRegisterForm() { out, err = s.client.LoadRegistrationForm(context.Background(), params) require.NoError(err, "expected no error when form data is available") require.Equal(params.Step, out.Step, "expected returned step to be the same as the requested step") + require.Nil(out.Errors, "expected no validation errors for legal person step") require.NotNil(out.Form, "expected returned form to not be nil") require.Equal(full.State, out.Form.State, "expected returned form to have the same state as the full form") @@ -307,8 +307,8 @@ func (s *bffTestSuite) TestLoadRegisterForm() { verrs := map[api.RegistrationFormStep][]*api.FieldValidationError{ api.StepBasicDetails: {{Field: records.FieldWebsite, Error: records.ErrMissingField.Error()}}, api.StepLegalPerson: { - {Field: records.FieldEntityNameIdentifiers, Error: records.ErrMissingField.Error()}, - {Field: records.FieldEntity, Error: ivms101.ErrInvalidLegalPersonName.Error()}, + {Field: "entity.name.nameIdentifier[0].legalPersonName", Error: "ivms101: missing name.nameIdentifier[0].legalPersonName: this field is required"}, + {Field: "entity.nationalIdentification.nationalIdentifier", Error: "ivms101: invalid field nationalIdentification.nationalIdentifier: invalid LEIX: invalid checksum"}, }, api.StepContacts: {{Field: records.FieldContactsTechnicalEmail, Error: records.ErrMissingField.Error()}}, api.StepTRIXO: {{Field: records.FieldTRIXOPrimaryNationalJurisdiction, Error: records.ErrMissingField.Error()}}, @@ -525,8 +525,14 @@ func (s *bffTestSuite) TestSaveRegisterForm() { verrs := map[api.RegistrationFormStep][]*api.FieldValidationError{ api.StepBasicDetails: {{Field: records.FieldWebsite, Error: records.ErrMissingField.Error()}}, api.StepLegalPerson: { - {Field: records.FieldEntityNameIdentifiers, Error: records.ErrMissingField.Error()}, - {Field: records.FieldEntity, Error: ivms101.ErrInvalidLegalPersonName.Error()}, + { + Field: "entity.name.nameIdentifier[0].legalPersonName", + Error: "ivms101: missing name.nameIdentifier[0].legalPersonName: this field is required", + }, + { + Field: "entity.nationalIdentification.nationalIdentifier", + Error: "ivms101: invalid field nationalIdentification.nationalIdentifier: invalid LEIX: invalid checksum", + }, }, api.StepContacts: {{Field: records.FieldContactsTechnicalEmail, Error: records.ErrMissingField.Error()}}, api.StepTRIXO: {{Field: records.FieldTRIXOPrimaryNationalJurisdiction, Error: records.ErrMissingField.Error()}}, @@ -548,8 +554,8 @@ func (s *bffTestSuite) TestSaveRegisterForm() { }, []*api.FieldValidationError{{Field: records.FieldWebsite, Error: records.ErrMissingField.Error()}}}, {api.StepLegalPerson, &records.RegistrationForm{ Entity: form.Form.Entity, - }, []*api.FieldValidationError{{Field: records.FieldEntityNameIdentifiers, Error: records.ErrMissingField.Error()}, - {Field: records.FieldEntity, Error: ivms101.ErrInvalidLegalPersonName.Error()}}}, + }, []*api.FieldValidationError{{Field: "", Error: records.ErrMissingField.Error()}, + {Field: records.FieldEntity, Error: ""}}}, {api.StepContacts, &records.RegistrationForm{ Contacts: form.Form.Contacts, }, []*api.FieldValidationError{{Field: records.FieldContactsTechnicalEmail, Error: records.ErrMissingField.Error()}}}, diff --git a/pkg/bff/models/v1/registration.go b/pkg/bff/models/v1/registration.go index e9b047472..fcb2a55cb 100644 --- a/pkg/bff/models/v1/registration.go +++ b/pkg/bff/models/v1/registration.go @@ -25,21 +25,10 @@ const ( FieldOrganizationName = "organization_name" // Legal Person Entity Fields - FieldEntity = "entity" - FieldEntityName = "entity.name" - FieldEntityNameIdentifiers = "entity.name.name_identifiers" - FieldEntityLocalNameIdentifiers = "entity.name.local_name_identifiers" - FieldEntityPhoneticNameIdentifiers = "entity.name.phonetic_name_identifiers" - FieldEntityGeographicAddresses = "entity.geographic_addresses" - FieldEntityGeographicAddressLines = "entity.geographic_addresses.address_line" - FieldEntityGeographicAddressCountry = "entity.geographic_addresses.country" - FieldEntityCustomerNumber = "entity.customer_number" - FieldEntityNationalIdentification = "entity.national_identification" - FieldEntityNationalIdentificationID = "entity.national_identification.national_identifier" - FieldEntityNationalIdentificationType = "entity.national_identification.national_identifier_type" - FieldEntityNationalIdentificationCountry = "entity.national_identification.country_of_issue" - FieldEntityNationalIdentificationRA = "entity.national_identification.registration_authority" - FieldEntityCountryOfRegistration = "entity.country_of_registration" + FieldEntity = "entity" + FieldEntityGeographicAddresses = "entity.geographic_addresses" + FieldEntityNationalIdentification = "entity.national_identification" + FieldEntityCountryOfRegistration = "entity.country_of_registration" // Contacts Fields FieldContacts = "contacts" @@ -235,261 +224,54 @@ func (r *RegistrationForm) ValidateLegalPerson() error { }) } - // Validate name identifiers - if r.Entity.Name == nil { - err = append(err, &ValidationError{ - Field: FieldEntityName, - Err: ErrMissingField.Error(), - }) - } else { - // Ensure there is at least one legal name identifier - var legalNames uint32 - for i, name := range r.Entity.Name.NameIdentifiers { - if name.LegalPersonNameIdentifierType == ivms101.LegalPersonLegal { - legalNames++ - } - - if verr := ValidateLegalPersonName(name); verr != nil { + // Validate the IVMS101 specification for legal person. + if verr := r.Entity.Validate(); verr != nil { + switch v := verr.(type) { + case ivms101.ValidationErrors: + for _, fe := range v { err = append(err, &ValidationError{ - Field: FieldEntityNameIdentifiers, - Err: verr.Error(), - Index: i, + Field: FieldEntity + "." + fe.Field(), + Err: fe.Error(), }) } - } - - if legalNames == 0 { + case *ivms101.FieldError: err = append(err, &ValidationError{ - Field: FieldEntityNameIdentifiers, - Err: ErrNoLegalNameIdentifier.Error(), + Field: FieldEntity + "." + v.Field(), + Err: v.Error(), }) - } - - // Validate local name identifiers - for i, name := range r.Entity.Name.LocalNameIdentifiers { - if verr := ValidateLegalPersonLocalName(name); verr != nil { - err = append(err, &ValidationError{ - Field: FieldEntityLocalNameIdentifiers, - Err: verr.Error(), - Index: i, - }) - } - } - - // Validate phonetic name identifiers - for i, name := range r.Entity.Name.PhoneticNameIdentifiers { - if verr := ValidateLegalPersonLocalName(name); verr != nil { - err = append(err, &ValidationError{ - Field: FieldEntityPhoneticNameIdentifiers, - Err: verr.Error(), - Index: i, - }) - } + default: + return verr } } - // Validate Geographic Addresses + // Perform additional validation for BFF requirements if len(r.Entity.GeographicAddresses) == 0 { err = append(err, &ValidationError{ Field: FieldEntityGeographicAddresses, Err: ErrNoGeographicAddress.Error(), }) - } else { - for i, addr := range r.Entity.GeographicAddresses { - // TODO: do we need to validate address type code? - - // There can be at most 7 address lines - if len(addr.AddressLine) > 7 { - err = append(err, &ValidationError{ - Field: FieldEntityGeographicAddressLines, - Err: ErrTooManyAddressLines.Error(), - Index: i, - }) - } - - // Valid address is either address lines or street name + building number. - if len(addr.AddressLine) == 0 && (addr.StreetName == "" && (addr.BuildingName == "" || addr.BuildingNumber == "")) { - err = append(err, &ValidationError{ - Field: FieldEntityGeographicAddresses, - Err: ErrInvalidAddress.Error(), - Index: i, - }) - } - - // Address lines cannot all be blank - var validAddrLines uint16 - for i, line := range addr.AddressLine { - addr.AddressLine[i] = strings.TrimSpace(line) - if strings.TrimSpace(line) != "" { - validAddrLines++ - } - } - - if validAddrLines == 0 { - err = append(err, &ValidationError{ - Field: FieldEntityGeographicAddressLines, - Err: ErrNoAddressLines.Error(), - Index: i, - }) - } - - // Country must be an alpha-2 country code - addr.Country = strings.TrimSpace(addr.Country) - if addr.Country == "" { - err = append(err, &ValidationError{ - Field: FieldEntityGeographicAddressCountry, - Err: ErrMissingField.Error(), - Index: i, - }) - } else if len(addr.Country) != 2 { - err = append(err, &ValidationError{ - Field: FieldEntityGeographicAddressCountry, - Err: ErrInvalidCountry.Error(), - Index: i, - }) - } - } - } - - // Customer number must not be greater than 50 chars - r.Entity.CustomerNumber = strings.TrimSpace(r.Entity.CustomerNumber) - if r.Entity.CustomerNumber != "" && len(r.Entity.CustomerNumber) > 50 { - err = append(err, &ValidationError{ - Field: FieldEntityCustomerNumber, - Err: ErrInvalidCustomerNumber.Error(), - }) } - // Validate National Identification - if r.Entity.NationalIdentification != nil { - // Validate National Identification - r.Entity.NationalIdentification.NationalIdentifier = strings.TrimSpace(r.Entity.NationalIdentification.NationalIdentifier) - if r.Entity.NationalIdentification.NationalIdentifier == "" { - err = append(err, &ValidationError{ - Field: FieldEntityNationalIdentificationID, - Err: ErrMissingField.Error(), - }) - } - - // Validate National Identification Type Code - if !(r.Entity.NationalIdentification.NationalIdentifierType == ivms101.NationalIdentifierRAID || - r.Entity.NationalIdentification.NationalIdentifierType == ivms101.NationalIdentifierMISC || - r.Entity.NationalIdentification.NationalIdentifierType == ivms101.NationalIdentifierLEIX || - r.Entity.NationalIdentification.NationalIdentifierType == ivms101.NationalIdentifierTXID) { - err = append(err, &ValidationError{ - Field: FieldEntityNationalIdentificationType, - Err: ErrInvalidLegalNatID.Error(), - }) - } - - // TODO: validate LEI with checksum - if r.Entity.NationalIdentification.NationalIdentifierType == ivms101.NationalIdentifierLEIX { - if len(r.Entity.NationalIdentification.NationalIdentifier) > 35 { - err = append(err, &ValidationError{ - Field: FieldEntityNationalIdentificationID, - Err: ErrInvalidLEI.Error(), - }) - } - } - - // Country of issue is only used for natural persons - r.Entity.NationalIdentification.CountryOfIssue = strings.TrimSpace(r.Entity.NationalIdentification.CountryOfIssue) - if r.Entity.NationalIdentification.CountryOfIssue != "" { - err = append(err, &ValidationError{ - Field: FieldEntityNationalIdentificationCountry, - Err: ErrNoCountryNatID.Error(), - }) - } - - // If the ID is an LEIX then registration authority must be empty and vice-versa. - r.Entity.NationalIdentification.RegistrationAuthority = strings.TrimSpace(r.Entity.NationalIdentification.RegistrationAuthority) - if r.Entity.NationalIdentification.NationalIdentifierType != ivms101.NationalIdentifierLEIX { - if r.Entity.NationalIdentification.RegistrationAuthority == "" { - err = append(err, &ValidationError{ - Field: FieldEntityNationalIdentificationRA, - Err: ErrRARequired.Error(), - }) - } - } else { - // If the ID is an LEIX, Registration Authority must be empty - if r.Entity.NationalIdentification.RegistrationAuthority != "" { - err = append(err, &ValidationError{ - Field: FieldEntityNationalIdentificationRA, - Err: ErrNoRAForLEIX.Error(), - }) - } - } - } else { + if r.Entity.NationalIdentification == nil { err = append(err, &ValidationError{ Field: FieldEntityNationalIdentification, Err: ErrLegalNatIDRequired.Error(), }) } - // Country Code Constratint - r.Entity.CountryOfRegistration = strings.TrimSpace(r.Entity.CountryOfRegistration) - if r.Entity.CountryOfRegistration != "" { - // TODO: ensure the country code is valid? - if len(r.Entity.CountryOfRegistration) != 2 { - err = append(err, &ValidationError{ - Field: FieldEntityCountryOfRegistration, - Err: ErrInvalidCountry.Error(), - }) - } - } else { + if r.Entity.CountryOfRegistration == "" { err = append(err, &ValidationError{ Field: FieldEntityCountryOfRegistration, Err: ErrMissingField.Error(), }) } - // Final validation just to check and make sure we didn't miss anything - if verr := r.Entity.Validate(); verr != nil { - // C9 constraint errors are ignored because they are also ignored in GDS - if verr.Error() != ivms101.ErrCompleteNationalIdentifierCountry.Error() { - err = append(err, &ValidationError{ - Field: FieldEntity, - Err: verr.Error(), - }) - } - } - if len(err) == 0 { return nil } return err } -func ValidateLegalPersonName(name *ivms101.LegalPersonNameId) error { - // Validate the name identifier - name.LegalPersonName = strings.TrimSpace(name.LegalPersonName) - if name.LegalPersonName == "" { - return ErrMissingField - } - - if len(name.LegalPersonName) > 100 { - return ErrLegalPersonNameLength - } - - // TODO: does the legal person name type code need to be validated? - return nil -} - -func ValidateLegalPersonLocalName(name *ivms101.LocalLegalPersonNameId) error { - // Validate the name identifier - name.LegalPersonName = strings.TrimSpace(name.LegalPersonName) - if name.LegalPersonName == "" { - return ErrMissingField - } - - if len(name.LegalPersonName) > 100 { - return ErrLegalPersonNameLength - } - - // TODO: does the legal person name type code need to be validated? - return nil -} - // Validate only the fields in the contacts step. func (r *RegistrationForm) ValidateContacts() error { err := make(ValidationErrors, 0) diff --git a/pkg/bff/models/v1/registration_test.go b/pkg/bff/models/v1/registration_test.go index 356cafb0b..8e518776f 100644 --- a/pkg/bff/models/v1/registration_test.go +++ b/pkg/bff/models/v1/registration_test.go @@ -131,11 +131,10 @@ func TestValidateLegalPerson(t *testing.T) { { &ivms101.LegalPerson{}, ValidationErrors{ - {Field: FieldEntityName, Err: ErrMissingField.Error()}, + {Field: "entity.name", Err: "ivms101: missing name: this field is required"}, {Field: FieldEntityGeographicAddresses, Err: ErrNoGeographicAddress.Error()}, {Field: FieldEntityNationalIdentification, Err: ErrLegalNatIDRequired.Error()}, {Field: FieldEntityCountryOfRegistration, Err: ErrMissingField.Error()}, - {Field: FieldEntity, Err: "one or more legal person name identifiers is required"}, }, }, // Test C9 constraint is ignored but still return an error for missing RA @@ -167,8 +166,9 @@ func TestValidateLegalPerson(t *testing.T) { CountryOfRegistration: "US", }, ValidationErrors{ - {Field: FieldEntityNationalIdentificationRA, Err: ErrNoRAForLEIX.Error()}, - {Field: FieldEntity, Err: ivms101.ErrCompleteNationalIdentifierAuthority.Error()}, + { + Field: "entity.nationalIdentification.registrationAuthority", + Err: "ivms101: invalid field nationalIdentification.registrationAuthority: registration authority not allowed for national identifier type code LEIX"}, }, }, { @@ -691,7 +691,9 @@ func TestUpdateRegistrationFormErrors(t *testing.T) { {Field: FieldBusinessCategory, Err: ErrMissingField.Error()}, }, StepLegalPerson: { - {Field: FieldEntityCountryOfRegistration, Err: ErrMissingField.Error()}, + { + Field: "entity.country_of_registration", + Err: ErrMissingField.Error()}, }, StepContacts: { {Field: FieldContacts, Err: ErrMissingContact.Error()}, diff --git a/pkg/bff/models/v1/testdata/bad_registration_form.json b/pkg/bff/models/v1/testdata/bad_registration_form.json index 56665e625..5123543bf 100644 --- a/pkg/bff/models/v1/testdata/bad_registration_form.json +++ b/pkg/bff/models/v1/testdata/bad_registration_form.json @@ -49,7 +49,7 @@ ], "customer_number": "", "national_identification": { - "national_identifier": "42312342123122", + "national_identifier": "GSMB00PHIJOVEATTDL98", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", "country_of_issue": "" } diff --git a/pkg/bff/models/v1/testdata/registration_form.json b/pkg/bff/models/v1/testdata/registration_form.json index c28a06b4b..00b21f692 100644 --- a/pkg/bff/models/v1/testdata/registration_form.json +++ b/pkg/bff/models/v1/testdata/registration_form.json @@ -49,7 +49,7 @@ ], "customer_number": "", "national_identification": { - "national_identifier": "42312342123122", + "national_identifier": "GSMB00PHIJOVEATTDL98", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", "country_of_issue": "" }, diff --git a/pkg/bff/testdata/mainnet/details_reply.json b/pkg/bff/testdata/mainnet/details_reply.json index fdedf09c0..c41b4a9c4 100644 --- a/pkg/bff/testdata/mainnet/details_reply.json +++ b/pkg/bff/testdata/mainnet/details_reply.json @@ -51,7 +51,7 @@ ], "customer_number": "", "national_identification": { - "national_identifier": "213800AQUAUP6I215N33", + "national_identifier": "T1NE00KS7KFIWYSVE374", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", "country_of_issue": "GB", "registration_authority": "RA000589" diff --git a/pkg/bff/testdata/mainnet/vasp.json b/pkg/bff/testdata/mainnet/vasp.json index 9d97fec4e..faa748fb2 100644 --- a/pkg/bff/testdata/mainnet/vasp.json +++ b/pkg/bff/testdata/mainnet/vasp.json @@ -73,7 +73,7 @@ }, "national_identification": { "country_of_issue": "CA", - "national_identifier": "P7b0y_u-R51uZ8RLZRGh5wagzUi3w3Ng", + "national_identifier": "KNIC000HDKL0STME0M42", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", "registration_authority": "" } diff --git a/pkg/bff/testdata/registration_form.pb.json b/pkg/bff/testdata/registration_form.pb.json index 5663c8e9b..323844148 100644 --- a/pkg/bff/testdata/registration_form.pb.json +++ b/pkg/bff/testdata/registration_form.pb.json @@ -24,7 +24,7 @@ }], "customer_number": "", "national_identification": { - "national_identifier": "629900T8BM49AUKSDO56", + "national_identifier": "YXAK00OCPOQ2D1GZ0Z36", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX" }, diff --git a/pkg/bff/testdata/testnet/details_reply.json b/pkg/bff/testdata/testnet/details_reply.json index 87e3a4a2d..fc50f869b 100644 --- a/pkg/bff/testdata/testnet/details_reply.json +++ b/pkg/bff/testdata/testnet/details_reply.json @@ -55,7 +55,7 @@ ], "customer_number": "", "national_identification": { - "national_identifier": "5493004YBI24IF4TIP92", + "national_identifier": "L9TW00ECS2U5AI8KOJ44", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", "country_of_issue": "US", "registration_authority": "RA000744" diff --git a/pkg/bff/testdata/testnet/vasp.json b/pkg/bff/testdata/testnet/vasp.json index d235e2677..654cb180a 100644 --- a/pkg/bff/testdata/testnet/vasp.json +++ b/pkg/bff/testdata/testnet/vasp.json @@ -73,7 +73,7 @@ }, "national_identification": { "country_of_issue": "CA", - "national_identifier": "P7b0y_u-R51uZ8RLZRGh5wagzUi3w3Ng", + "national_identifier": "BLEL000GRBUTMDK6XS72", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX", "registration_authority": "" } diff --git a/pkg/gds/config/config_test.go b/pkg/gds/config/config_test.go index 18b30b3ff..4fd5f2e62 100644 --- a/pkg/gds/config/config_test.go +++ b/pkg/gds/config/config_test.go @@ -70,6 +70,7 @@ var testEnv = map[string]string{ "GDS_SENTRY_SAMPLE_RATE": "0.2", "GDS_ACTIVITY_ENABLED": "true", "GDS_ACTIVITY_TOPIC": "gds-activity", + "GDS_ACTIVITY_NETWORK": "testnet", "GDS_ACTIVITY_AGGREGATION_WINDOW": "10m", "GDS_ACTIVITY_ENSIGN_CLIENT_ID": "client-id", "GDS_ACTIVITY_ENSIGN_CLIENT_SECRET": "client-secret", diff --git a/pkg/gds/testdata/fakes.tgz b/pkg/gds/testdata/fakes.tgz index 92a4a1231..6e91c40f0 100644 Binary files a/pkg/gds/testdata/fakes.tgz and b/pkg/gds/testdata/fakes.tgz differ diff --git a/pkg/models/v1/models.go b/pkg/models/v1/models.go index f71850410..46d6cd584 100644 --- a/pkg/models/v1/models.go +++ b/pkg/models/v1/models.go @@ -11,7 +11,6 @@ import ( "github.com/rs/zerolog/log" "github.com/trisacrypto/directory/pkg/sectigo" "github.com/trisacrypto/directory/pkg/utils/sentry" - "github.com/trisacrypto/trisa/pkg/ivms101" pb "github.com/trisacrypto/trisa/pkg/trisa/gds/models/v1beta1" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/types/known/anypb" @@ -679,7 +678,7 @@ func ValidateVASP(vasp *pb.VASP, partial bool) (err error) { switch { case err == nil: return nil - case errors.Is(err, ivms101.ErrCompleteNationalIdentifierCountry): + case err.Error() == "": // TODO: ErrCompleteNationalIdentifierLegalPerson must be ignored to support older // VASP records, see issue #34 sentry.Warn(nil).Str("vasp_id", vasp.Id).Err(err).Msg("ignoring ErrCompleteNationalIdentifierLegalPerson validation error") diff --git a/pkg/models/v1/models_test.go b/pkg/models/v1/models_test.go index 29aa599bd..9e33abb70 100644 --- a/pkg/models/v1/models_test.go +++ b/pkg/models/v1/models_test.go @@ -785,7 +785,7 @@ func TestValidateVASP(t *testing.T) { }, }, NationalIdentification: &ivms101.NationalIdentification{ - NationalIdentifier: "123456789", + NationalIdentifier: "LKSW00FJKAMWLG6MAQ18", NationalIdentifierType: ivms101.NationalIdentifierLEIX, }, }, @@ -799,10 +799,6 @@ func TestValidateVASP(t *testing.T) { vasp.LastUpdated = time.Now().Format(time.RFC3339) vasp.Signature = []byte("abc123") require.NoError(t, ValidateVASP(vasp, false), "expected successful validation when partial is false") - - // Verify that the validation helper ignores C9 constraint errors - vasp.Entity.NationalIdentification.CountryOfIssue = "CA" - require.NoError(t, ValidateVASP(vasp, false), "expected successful validation even when C9 constraint is violated") } func TestUpdateVerificationStatus(t *testing.T) { diff --git a/pkg/store/testdata/vasp.json b/pkg/store/testdata/vasp.json index acccbbd4a..50d24a9d7 100644 --- a/pkg/store/testdata/vasp.json +++ b/pkg/store/testdata/vasp.json @@ -29,7 +29,7 @@ } ], "national_identification": { - "national_identifier": "5493004YBI24IF4TIP92", + "national_identifier": "KNND00GQEONPUPDAJE27", "national_identifier_type": 9 }, "country_of_registration": "US" diff --git a/pkg/utils/wire/testdata/vasps/838b1f57-1646-488d-a231-d71d88681cfa.json b/pkg/utils/wire/testdata/vasps/838b1f57-1646-488d-a231-d71d88681cfa.json index 3cee31b58..cf7927893 100644 --- a/pkg/utils/wire/testdata/vasps/838b1f57-1646-488d-a231-d71d88681cfa.json +++ b/pkg/utils/wire/testdata/vasps/838b1f57-1646-488d-a231-d71d88681cfa.json @@ -38,7 +38,7 @@ ], "customer_number": "", "national_identification": { - "national_identifier": "213800AQUAUP6I215N33", + "national_identifier": "GIVU00BIYKUEMNOTGV15", "national_identifier_type": "NATIONAL_IDENTIFIER_TYPE_CODE_LEIX" }, "country_of_registration": "GB"