mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-02-22 18:22:37 +00:00
Use fixed copy of JWT library until upstream merges
This commit is contained in:
parent
3cb24410a8
commit
1300cf23c5
3
zeroidc/Cargo.lock
generated
3
zeroidc/Cargo.lock
generated
@ -478,8 +478,7 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "jwt"
|
||||
version = "0.16.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f"
|
||||
source = "git+https://github.com/glimberg/rust-jwt#61a9291fdeec747c6edf14f4fa0caf235136c168"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"crypto-common",
|
||||
|
@ -13,7 +13,7 @@ openidconnect = { version = "2.2", default-features = false, features = ["reqwes
|
||||
base64 = "0.13"
|
||||
url = "2.2"
|
||||
reqwest = "0.11"
|
||||
jwt = "0.16"
|
||||
jwt = {version = "0.16", git = "https://github.com/glimberg/rust-jwt"}
|
||||
serde = "1.0"
|
||||
time = { version = "0.3", features = ["formatting"] }
|
||||
bytes = "1.1"
|
||||
|
2
zeroidc/vendor/jwt/.cargo-checksum.json
vendored
2
zeroidc/vendor/jwt/.cargo-checksum.json
vendored
@ -1 +1 @@
|
||||
{"files":{"Cargo.lock":"a2f539608f97d8f98e5b296c19d06515481949b1f031517dcf1c62cb38c70ea2","Cargo.toml":"a0f66e02db1107ce5f882d63cd0b48241f39f31988a8b59d61f9c2f15e0c7634","LICENSE":"6863634a792d36121f9e9c5ad6093c26520c97fb3e6396b354545c3f58969d4e","README.md":"f7b0fc2ad58d744d4dad9d149fe4ba89f2ae48091ebbaf691237405040e16dbd","examples/custom_claims.rs":"54afdafdd6eb9d014ffa574386dda173cd5bb064aae66d41411fd18df9a26265","examples/hs256.rs":"62a847c9d455f0d0d5c9ad95be06707ae40496c94a669e37d33adaf01f5fcf0c","src/algorithm/mod.rs":"83d779fabf3e5c8b1dd507d51c7b1abc0e6724eae4bf2b9341b9f1321d361108","src/algorithm/openssl.rs":"45d5252a5a02d9a6e6198e682d59bcdd7624f2d6dc9d16ede5f9774e17deb74d","src/algorithm/rust_crypto.rs":"e518c754d19d3f4cb62fe5c78d3fa673699d8501cf0225cecb49fe4ead68138c","src/algorithm/store.rs":"da6af6dafb6f223020dece153d69d985a9061480e6170b6bb155a2d59bbdf73e","src/claims.rs":"2ab2ac2341a33068e6fb0d5ee57db315caf85cef2eff7fabc91a095a9e5411da","src/error.rs":"ff3f5eda3390d0e53d5241961808fce7fa154d319d7f0bfde6a279ce87865a1f","src/header.rs":"bc542f3355da24d49443b6a82f843a0af78c6bfe236a8ed1c0e0659a4b44eeef","src/lib.rs":"fb17cbadb6c1fc2d4897edc289521ced9c07e6055c373177727067ce7ba384cd","src/token/mod.rs":"afaf57a53d317b026ab0ff9bccede79962a7ac26f06840bbda6b4a5b56e1185e","src/token/signed.rs":"48cba5ae1fae99ba369dfc0414c0d3a8f9c7ad489f0c1875959e6b8dc962c8e4","src/token/verified.rs":"88258dec2a31b5edf1e76d6d985ca5324e1b04ed31033966ea3f203937d69723","test/es256-private.pem":"e78044d6a7e87ebfd6e929e435ffe260bd728a1397b9d7906c8316b08a2bcd91","test/es256-public.pem":"4aa69dafd976d669e58e08734621e84d5248611b61dcdea8c2301f13a897d632","test/rs256-private.pem":"9f0b1cde761836bade73e1dcacc7f59abf361a5a9077c2495549dd78d93827fd","test/rs256-public-2.pem":"1c350b92548ade1a0696678257f95b0f5e96ae006fa794d9781627e92283bb4b","test/rs256-public.pem":"2d2f53a127944dc169e102ef0bf077808211fa26cb750d1272235cdac78aa8c4"},"package":"6204285f77fe7d9784db3fdc449ecce1a0114927a51d5a41c4c7a292011c015f"}
|
||||
{"files":{".github/workflows/rust.yml":"f394411995c12d93808e11341fde58c291f108a881d02402d5bca4d69aefac9d","Cargo.toml":"b699e7776ebbb660db912772734135a4f05a0ad02e09e69b04d08c85301f5c7e","LICENSE":"6863634a792d36121f9e9c5ad6093c26520c97fb3e6396b354545c3f58969d4e","README.md":"f7b0fc2ad58d744d4dad9d149fe4ba89f2ae48091ebbaf691237405040e16dbd","examples/custom_claims.rs":"54afdafdd6eb9d014ffa574386dda173cd5bb064aae66d41411fd18df9a26265","examples/hs256.rs":"62a847c9d455f0d0d5c9ad95be06707ae40496c94a669e37d33adaf01f5fcf0c","src/algorithm/mod.rs":"83d779fabf3e5c8b1dd507d51c7b1abc0e6724eae4bf2b9341b9f1321d361108","src/algorithm/openssl.rs":"45d5252a5a02d9a6e6198e682d59bcdd7624f2d6dc9d16ede5f9774e17deb74d","src/algorithm/rust_crypto.rs":"e518c754d19d3f4cb62fe5c78d3fa673699d8501cf0225cecb49fe4ead68138c","src/algorithm/store.rs":"da6af6dafb6f223020dece153d69d985a9061480e6170b6bb155a2d59bbdf73e","src/claims.rs":"c944cc7631faa9e4943dc127b252149631a15eb9c84e005d55ac0e8600c08ab5","src/error.rs":"ff3f5eda3390d0e53d5241961808fce7fa154d319d7f0bfde6a279ce87865a1f","src/header.rs":"bc542f3355da24d49443b6a82f843a0af78c6bfe236a8ed1c0e0659a4b44eeef","src/lib.rs":"fb17cbadb6c1fc2d4897edc289521ced9c07e6055c373177727067ce7ba384cd","src/token/mod.rs":"afaf57a53d317b026ab0ff9bccede79962a7ac26f06840bbda6b4a5b56e1185e","src/token/signed.rs":"48cba5ae1fae99ba369dfc0414c0d3a8f9c7ad489f0c1875959e6b8dc962c8e4","src/token/verified.rs":"88258dec2a31b5edf1e76d6d985ca5324e1b04ed31033966ea3f203937d69723","test/es256-private.pem":"e78044d6a7e87ebfd6e929e435ffe260bd728a1397b9d7906c8316b08a2bcd91","test/es256-public.pem":"4aa69dafd976d669e58e08734621e84d5248611b61dcdea8c2301f13a897d632","test/rs256-private.pem":"9f0b1cde761836bade73e1dcacc7f59abf361a5a9077c2495549dd78d93827fd","test/rs256-public-2.pem":"1c350b92548ade1a0696678257f95b0f5e96ae006fa794d9781627e92283bb4b","test/rs256-public.pem":"2d2f53a127944dc169e102ef0bf077808211fa26cb750d1272235cdac78aa8c4"},"package":null}
|
22
zeroidc/vendor/jwt/.github/workflows/rust.yml
vendored
Normal file
22
zeroidc/vendor/jwt/.github/workflows/rust.yml
vendored
Normal file
@ -0,0 +1,22 @@
|
||||
name: Rust
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ master ]
|
||||
pull_request:
|
||||
branches: [ master ]
|
||||
|
||||
env:
|
||||
CARGO_TERM_COLOR: always
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Build
|
||||
run: cargo build --verbose
|
||||
- name: Run tests
|
||||
run: cargo test --verbose
|
283
zeroidc/vendor/jwt/Cargo.lock
generated
vendored
283
zeroidc/vendor/jwt/Cargo.lock
generated
vendored
@ -1,283 +0,0 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.0.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
|
||||
|
||||
[[package]]
|
||||
name = "base64"
|
||||
version = "0.13.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "block-buffer"
|
||||
version = "0.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.70"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d26a6ce4b6a484fa3edb70f7efa6fc430fd2b87285fe8b84304fd0936faa0dc0"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b"
|
||||
dependencies = [
|
||||
"block-buffer",
|
||||
"crypto-common",
|
||||
"generic-array",
|
||||
"subtle",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "doc-comment"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types"
|
||||
version = "0.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
|
||||
dependencies = [
|
||||
"foreign-types-shared",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "foreign-types-shared"
|
||||
version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hmac"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ddca131f3e7f2ce2df364b57949a9d47915cfbd35e46cfee355ccebbf794d6a2"
|
||||
dependencies = [
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "itoa"
|
||||
version = "0.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
|
||||
|
||||
[[package]]
|
||||
name = "jwt"
|
||||
version = "0.16.0"
|
||||
dependencies = [
|
||||
"base64",
|
||||
"crypto-common",
|
||||
"digest",
|
||||
"doc-comment",
|
||||
"hmac",
|
||||
"openssl",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sha2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.101"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3cb00336871be5ed2c8ed44b60ae9959dc5b9f08539422ed43f09e34ecaeba21"
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
|
||||
|
||||
[[package]]
|
||||
name = "openssl"
|
||||
version = "0.10.36"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d9facdb76fec0b73c406f125d44d86fdad818d66fef0531eec9233ca425ff4a"
|
||||
dependencies = [
|
||||
"bitflags",
|
||||
"cfg-if",
|
||||
"foreign-types",
|
||||
"libc",
|
||||
"once_cell",
|
||||
"openssl-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "openssl-sys"
|
||||
version = "0.9.66"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1996d2d305e561b70d1ee0c53f1542833f4e1ac6ce9a6708b6ff2738ca67dc82"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cc",
|
||||
"libc",
|
||||
"pkg-config",
|
||||
"vcpkg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pkg-config"
|
||||
version = "0.3.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.29"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9f5105d4fdaab20335ca9565e106a5d9b82b6219b5ba735731124ac6711d23d"
|
||||
dependencies = [
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c3d0b9745dc2debf507c8422de05d7226cc1f0644216dfdfead988f9b1ab32a7"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ryu"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
|
||||
|
||||
[[package]]
|
||||
name = "serde"
|
||||
version = "1.0.130"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
|
||||
dependencies = [
|
||||
"serde_derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_derive"
|
||||
version = "1.0.130"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.67"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a7f9e390c27c3c0ce8bc5d725f6e4d30a29d26659494aa4b17535f7522c5c950"
|
||||
dependencies = [
|
||||
"itoa",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "sha2"
|
||||
version = "0.10.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "99c3bd8169c58782adad9290a9af5939994036b76187f7b4f0e6de91dbbfc0ec"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cpufeatures",
|
||||
"digest",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "subtle"
|
||||
version = "2.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "1.0.76"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c6f107db402c2c2055242dbf4d2af0e69197202e9faacbef9571bbe47f5a1b84"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-xid",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.14.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b63708a265f51345575b27fe43f9500ad611579e764c79edbc2037b1121959ec"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
|
51
zeroidc/vendor/jwt/Cargo.toml
vendored
51
zeroidc/vendor/jwt/Cargo.toml
vendored
@ -1,54 +1,31 @@
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies
|
||||
#
|
||||
# If you believe there's an error in this file please file an
|
||||
# issue against the rust-lang/cargo repository. If you're
|
||||
# editing this file be aware that the upstream Cargo.toml
|
||||
# will likely look very different (and much more reasonable)
|
||||
|
||||
[package]
|
||||
edition = "2018"
|
||||
name = "jwt"
|
||||
version = "0.16.0"
|
||||
authors = ["Michael Yang <mikkyangg@gmail.com>"]
|
||||
description = "JSON Web Token library"
|
||||
homepage = "http://github.com/mikkyang/rust-jwt"
|
||||
documentation = "https://docs.rs/jwt"
|
||||
homepage = "http://github.com/mikkyang/rust-jwt"
|
||||
repository = "http://github.com/mikkyang/rust-jwt"
|
||||
readme = "README.md"
|
||||
keywords = ["JWT", "token", "web"]
|
||||
license = "MIT"
|
||||
repository = "http://github.com/mikkyang/rust-jwt"
|
||||
edition = "2018"
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
features = ["openssl"]
|
||||
[dependencies.base64]
|
||||
version = "0.13"
|
||||
|
||||
[dependencies.crypto-common]
|
||||
version = "0.1"
|
||||
|
||||
[dependencies.digest]
|
||||
version = "0.10"
|
||||
|
||||
[dependencies.hmac]
|
||||
version = "0.12"
|
||||
features = ["reset"]
|
||||
[dependencies]
|
||||
base64 = "0.13"
|
||||
crypto-common = "0.1"
|
||||
digest = "0.10"
|
||||
hmac = { version = "0.12", features = ["reset"] }
|
||||
sha2 = "0.10"
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
|
||||
[dependencies.openssl]
|
||||
version = "0.10"
|
||||
optional = true
|
||||
|
||||
[dependencies.serde]
|
||||
version = "1.0"
|
||||
features = ["derive"]
|
||||
|
||||
[dependencies.serde_json]
|
||||
version = "1.0"
|
||||
|
||||
[dependencies.sha2]
|
||||
version = "0.10"
|
||||
[dev-dependencies.doc-comment]
|
||||
version = "0.3"
|
||||
[dev-dependencies]
|
||||
doc-comment = "0.3"
|
||||
|
111
zeroidc/vendor/jwt/src/claims.rs
vendored
111
zeroidc/vendor/jwt/src/claims.rs
vendored
@ -2,7 +2,9 @@
|
||||
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serde::de::{value, Error, SeqAccess, Visitor};
|
||||
use serde::ser::SerializeSeq;
|
||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||
|
||||
/// Generic [JWT claims](https://tools.ietf.org/html/rfc7519#page-8) with
|
||||
/// defined fields for registered and private claims.
|
||||
@ -36,7 +38,7 @@ pub struct RegisteredClaims {
|
||||
pub subject: Option<String>,
|
||||
|
||||
#[serde(rename = "aud", skip_serializing_if = "Option::is_none")]
|
||||
pub audience: Option<String>,
|
||||
pub audience: Option<StringOrVec>,
|
||||
|
||||
#[serde(rename = "exp", skip_serializing_if = "Option::is_none")]
|
||||
pub expiration: Option<SecondsSinceEpoch>,
|
||||
@ -51,6 +53,76 @@ pub struct RegisteredClaims {
|
||||
pub json_web_token_id: Option<String>,
|
||||
}
|
||||
|
||||
/// Struct to handle the `aud` field because the JWT spec says that
|
||||
/// it can be either a string or an array of strings.
|
||||
/// [Audience Claim Specificatgion](https://datatracker.ietf.org/doc/html/rfc7519#section-4.1.3).
|
||||
#[derive(Clone, Debug, Default, PartialEq)]
|
||||
pub struct StringOrVec {
|
||||
one: Option<String>,
|
||||
multi: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
struct StringOrVecVisitor;
|
||||
|
||||
impl<'de> Visitor<'de> for StringOrVecVisitor {
|
||||
type Value = StringOrVec;
|
||||
|
||||
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
formatter.write_str("a string or an array of strings")
|
||||
}
|
||||
|
||||
fn visit_str<E>(self, value: &str) -> Result<StringOrVec, E>
|
||||
where
|
||||
E: Error,
|
||||
{
|
||||
Ok(StringOrVec {
|
||||
one: Some(value.to_string()),
|
||||
multi: None,
|
||||
})
|
||||
}
|
||||
|
||||
fn visit_seq<S>(self, seq: S) -> Result<StringOrVec, S::Error>
|
||||
where
|
||||
S: SeqAccess<'de>,
|
||||
{
|
||||
match Deserialize::deserialize(value::SeqAccessDeserializer::new(seq)) {
|
||||
Ok(r) => Ok(StringOrVec {
|
||||
one: None,
|
||||
multi: Some(r),
|
||||
}),
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> Deserialize<'de> for StringOrVec {
|
||||
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
deserializer.deserialize_any(StringOrVecVisitor)
|
||||
}
|
||||
}
|
||||
|
||||
impl Serialize for StringOrVec {
|
||||
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
if let Some(o) = &self.one {
|
||||
serializer.serialize_str(&o)
|
||||
} else if let Some(multi) = &self.multi {
|
||||
let mut seq = serializer.serialize_seq(Some(multi.len()))?;
|
||||
for e in multi {
|
||||
seq.serialize_element(&e)?;
|
||||
}
|
||||
seq.end()
|
||||
} else {
|
||||
serializer.serialize_none()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::claims::Claims;
|
||||
@ -89,4 +161,39 @@ mod tests {
|
||||
assert_eq!(claims, Claims::from_base64(&*enc)?);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn aud_single() -> Result<(), Error> {
|
||||
// {"iss": "mikkyang.com", "exp": 1302319100, "custom_claim": true, "aud": "test", "alg": "HS256" }
|
||||
let payload = "eyJpc3MiOiJtaWtreWFuZy5jb20iLCJleHAiOjEzMDIzMTkxMDAsImN1c3RvbV9jbGFpbSI6dHJ1ZSwiYXVkIjoidGVzdCIsImFsZyI6IkhTMjU2In0";
|
||||
|
||||
let claims = Claims::from_base64(payload)?;
|
||||
|
||||
assert_ne!(claims.registered.audience, None);
|
||||
|
||||
let aud = &claims.registered.audience.unwrap();
|
||||
|
||||
assert_eq!(aud.one, Some("test".to_string()));
|
||||
assert_eq!(aud.multi, None);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn aud_multi() -> Result<(), Error> {
|
||||
// {"iss": "mikkyang.com", "exp": 1302319100, "custom_claim": true, "aud": ["test1", "test2"], "alg": "HS256" }
|
||||
let payload = "eyJpc3MiOiJtaWtreWFuZy5jb20iLCJleHAiOjEzMDIzMTkxMDAsImN1c3RvbV9jbGFpbSI6dHJ1ZSwiYXVkIjpbInRlc3QxIiwidGVzdDIiXSwiYWxnIjoiSFMyNTYifQ";
|
||||
|
||||
let claims = Claims::from_base64(payload)?;
|
||||
|
||||
assert_ne!(claims.registered.audience, None);
|
||||
|
||||
let aud = &claims.registered.audience.unwrap();
|
||||
|
||||
assert_eq!(aud.one, None);
|
||||
assert_eq!(aud.multi.as_ref().unwrap().len(), 2);
|
||||
assert_eq!(aud.multi.as_ref().unwrap()[0], "test1".to_string());
|
||||
assert_eq!(aud.multi.as_ref().unwrap()[1], "test2".to_string());
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user