Update dependencies.

This commit is contained in:
Orne Brocaar 2024-03-19 12:41:18 +00:00
parent c426e48b8d
commit 56336fa685
11 changed files with 219 additions and 105 deletions

230
Cargo.lock generated
View File

@ -620,6 +620,12 @@ version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
version = "0.22.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9475866fec1451be56a3c2400fd081ff546538961565ccb5b7142cbd22bc7a51"
[[package]] [[package]]
name = "base64ct" name = "base64ct"
version = "1.6.0" version = "1.6.0"
@ -662,11 +668,11 @@ dependencies = [
[[package]] [[package]]
name = "bindgen" name = "bindgen"
version = "0.65.1" version = "0.66.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5" checksum = "f2b84e06fc203107bfbad243f4aba2af864eb7db3b1cf46ea0a023b0b433d2a7"
dependencies = [ dependencies = [
"bitflags 1.3.2", "bitflags 2.5.0",
"cexpr", "cexpr",
"clang-sys", "clang-sys",
"lazy_static", "lazy_static",
@ -680,7 +686,7 @@ dependencies = [
"rustc-hash", "rustc-hash",
"shlex", "shlex",
"syn 2.0.53", "syn 2.0.53",
"which", "which 4.4.2",
] ]
[[package]] [[package]]
@ -802,7 +808,7 @@ dependencies = [
"async-trait", "async-trait",
"aws-sign-v4", "aws-sign-v4",
"backend", "backend",
"base64 0.21.7", "base64 0.22.0",
"bigdecimal", "bigdecimal",
"bytes", "bytes",
"chirpstack_api", "chirpstack_api",
@ -813,6 +819,7 @@ dependencies = [
"diesel-async", "diesel-async",
"diesel_migrations", "diesel_migrations",
"dotenv", "dotenv",
"email_address",
"futures", "futures",
"futures-util", "futures-util",
"gcp_auth", "gcp_auth",
@ -865,7 +872,7 @@ dependencies = [
"tokio-postgres-rustls", "tokio-postgres-rustls",
"tokio-reactor-trait", "tokio-reactor-trait",
"tokio-stream", "tokio-stream",
"toml", "toml 0.8.12",
"tonic", "tonic",
"tonic-reflection", "tonic-reflection",
"tonic-web", "tonic-web",
@ -875,7 +882,6 @@ dependencies = [
"tracing-subscriber", "tracing-subscriber",
"urlencoding", "urlencoding",
"uuid", "uuid",
"validator",
"warp", "warp",
] ]
@ -909,7 +915,7 @@ dependencies = [
"serde", "serde",
"serde_json", "serde_json",
"tokio", "tokio",
"toml", "toml 0.8.12",
"tracing", "tracing",
"tracing-subscriber", "tracing-subscriber",
] ]
@ -1058,6 +1064,15 @@ version = "0.9.6"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
[[package]]
name = "convert_case"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca"
dependencies = [
"unicode-segmentation",
]
[[package]] [[package]]
name = "cookie-factory" name = "cookie-factory"
version = "0.3.2" version = "0.3.2"
@ -1506,6 +1521,15 @@ dependencies = [
"zeroize", "zeroize",
] ]
[[package]]
name = "email_address"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2153bd83ebc09db15bcbdc3e2194d901804952e3dc96967e1cd3b0c5c32d112"
dependencies = [
"serde",
]
[[package]] [[package]]
name = "ena" name = "ena"
version = "0.14.2" version = "0.14.2"
@ -1820,27 +1844,27 @@ dependencies = [
[[package]] [[package]]
name = "gcp_auth" name = "gcp_auth"
version = "0.9.0" version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d3b20d3058763d26d88e6e7a49998841e5296735b00dbfb064ff7cb142933dd" checksum = "0945a7cceec112dc8a4a0cfa10d1c3b7bc227652d09f7edcab42ef51cbfc46e3"
dependencies = [ dependencies = [
"async-trait", "async-trait",
"base64 0.21.7", "base64 0.22.0",
"dirs-next", "chrono",
"home",
"hyper", "hyper",
"hyper-rustls", "hyper-rustls 0.25.0",
"ring 0.16.20", "ring 0.17.8",
"rustls 0.21.10", "rustls 0.22.2",
"rustls-pemfile 1.0.4", "rustls-pemfile 2.1.1",
"serde", "serde",
"serde_json", "serde_json",
"thiserror", "thiserror",
"time",
"tokio", "tokio",
"tracing", "tracing",
"tracing-futures", "tracing-futures",
"url", "url",
"which", "which 6.0.0",
] ]
[[package]] [[package]]
@ -1944,9 +1968,9 @@ dependencies = [
[[package]] [[package]]
name = "handlebars" name = "handlebars"
version = "4.5.0" version = "5.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" checksum = "ab283476b99e66691dee3f1640fea91487a8d81f50fb5ecc75538f8f8879a1e4"
dependencies = [ dependencies = [
"log", "log",
"pest", "pest",
@ -2161,11 +2185,26 @@ dependencies = [
"http", "http",
"hyper", "hyper",
"rustls 0.21.10", "rustls 0.21.10",
"rustls-native-certs 0.6.3",
"tokio", "tokio",
"tokio-rustls 0.24.1", "tokio-rustls 0.24.1",
] ]
[[package]]
name = "hyper-rustls"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "399c78f9338483cb7e630c8474b07268983c6bd5acee012e4211f9f7bb21b070"
dependencies = [
"futures-util",
"http",
"hyper",
"rustls 0.22.2",
"rustls-native-certs 0.7.0",
"rustls-pki-types",
"tokio",
"tokio-rustls 0.25.0",
]
[[package]] [[package]]
name = "hyper-timeout" name = "hyper-timeout"
version = "0.4.1" version = "0.4.1"
@ -2207,16 +2246,6 @@ version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
[[package]]
name = "idna"
version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
dependencies = [
"unicode-bidi",
"unicode-normalization",
]
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.5.0" version = "0.5.0"
@ -2533,7 +2562,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada" checksum = "0f23f71580015254b020e856feac3df5878c2c7a8812297edd6c0a485ac9dada"
dependencies = [ dependencies = [
"serde", "serde",
"toml", "toml 0.7.8",
] ]
[[package]] [[package]]
@ -3253,7 +3282,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"toml_edit", "toml_edit 0.19.15",
]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c"
dependencies = [
"proc-macro-error-attr",
"proc-macro2",
"quote",
"syn 1.0.109",
"version_check",
]
[[package]]
name = "proc-macro-error-attr"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869"
dependencies = [
"proc-macro2",
"quote",
"version_check",
] ]
[[package]] [[package]]
@ -3317,7 +3370,7 @@ dependencies = [
"regex", "regex",
"syn 2.0.53", "syn 2.0.53",
"tempfile", "tempfile",
"which", "which 4.4.2",
] ]
[[package]] [[package]]
@ -3544,7 +3597,7 @@ dependencies = [
"http", "http",
"http-body", "http-body",
"hyper", "hyper",
"hyper-rustls", "hyper-rustls 0.24.2",
"ipnet", "ipnet",
"js-sys", "js-sys",
"log", "log",
@ -3613,18 +3666,19 @@ dependencies = [
[[package]] [[package]]
name = "rquickjs" name = "rquickjs"
version = "0.3.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db7788c2818f4546daabe9ae2d1ee2f4db61ab1998d4b483494c4193cc38dab" checksum = "ad7f63201fa6f2ff8173e4758ea552549d687d8f63003361a8b5c50f7c446ded"
dependencies = [ dependencies = [
"rquickjs-core", "rquickjs-core",
"rquickjs-macro",
] ]
[[package]] [[package]]
name = "rquickjs-core" name = "rquickjs-core"
version = "0.3.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b12cf8646fe0af5bcff2822ccd162990f0679a1f9287c7257f4f4193a9d31ea9" checksum = "cad00eeddc0f88af54ee202c8385fb214fe0423897c056a7df8369fb482e3695"
dependencies = [ dependencies = [
"chrono", "chrono",
"relative-path", "relative-path",
@ -3632,10 +3686,28 @@ dependencies = [
] ]
[[package]] [[package]]
name = "rquickjs-sys" name = "rquickjs-macro"
version = "0.3.1" version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b747058afd4d988d056e4972ec8516a5a86fdfc103c1c1485bfee8966a0743ae" checksum = "f27b39e889cc951e3e5f6b74012f943e642fa0fac51a8552948751f19a9b62f8"
dependencies = [
"convert_case",
"fnv",
"ident_case",
"indexmap 2.2.5",
"proc-macro-crate",
"proc-macro-error",
"proc-macro2",
"quote",
"rquickjs-core",
"syn 2.0.53",
]
[[package]]
name = "rquickjs-sys"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "120dbbc3296de9b96de8890091635d46f3506cd38b4e8f21800c386c035d64fa"
dependencies = [ dependencies = [
"bindgen", "bindgen",
"cc", "cc",
@ -4661,7 +4733,19 @@ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"toml_edit", "toml_edit 0.19.15",
]
[[package]]
name = "toml"
version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e9dd1545e8208b4a5af1aa9bbd0b4cf7e9ea08fabc5d0a5c67fcaafa17433aa3"
dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit 0.22.8",
] ]
[[package]] [[package]]
@ -4683,7 +4767,20 @@ dependencies = [
"serde", "serde",
"serde_spanned", "serde_spanned",
"toml_datetime", "toml_datetime",
"winnow", "winnow 0.5.40",
]
[[package]]
name = "toml_edit"
version = "0.22.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c12219811e0c1ba077867254e5ad62ee2c9c190b0d957110750ac0cda1ae96cd"
dependencies = [
"indexmap 2.2.5",
"serde",
"serde_spanned",
"toml_datetime",
"winnow 0.6.5",
] ]
[[package]] [[package]]
@ -4941,6 +5038,12 @@ dependencies = [
"tinyvec", "tinyvec",
] ]
[[package]]
name = "unicode-segmentation"
version = "1.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202"
[[package]] [[package]]
name = "unicode-width" name = "unicode-width"
version = "0.1.11" version = "0.1.11"
@ -4978,7 +5081,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
dependencies = [ dependencies = [
"form_urlencoded", "form_urlencoded",
"idna 0.5.0", "idna",
"percent-encoding", "percent-encoding",
"serde", "serde",
] ]
@ -5005,21 +5108,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "validator"
version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b92f40481c04ff1f4f61f304d61793c7b56ff76ac1469f1beb199b1445b253bd"
dependencies = [
"idna 0.4.0",
"lazy_static",
"regex",
"serde",
"serde_derive",
"serde_json",
"url",
]
[[package]] [[package]]
name = "valuable" name = "valuable"
version = "0.1.0" version = "0.1.0"
@ -5199,6 +5287,19 @@ dependencies = [
"rustix 0.38.31", "rustix 0.38.31",
] ]
[[package]]
name = "which"
version = "6.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fa5e0c10bf77f44aac573e498d1a82d5fbd5e91f6fc0a99e7be4b38e85e101c"
dependencies = [
"either",
"home",
"once_cell",
"rustix 0.38.31",
"windows-sys 0.52.0",
]
[[package]] [[package]]
name = "whoami" name = "whoami"
version = "1.5.1" version = "1.5.1"
@ -5391,6 +5492,15 @@ dependencies = [
"memchr", "memchr",
] ]
[[package]]
name = "winnow"
version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dffa400e67ed5a4dd237983829e66475f0a4a26938c4b04c21baede6262215b8"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "winreg" name = "winreg"
version = "0.50.0" version = "0.50.0"

View File

@ -16,7 +16,7 @@ rand = "0.8"
aes-kw = "0.2" aes-kw = "0.2"
reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features = false } reqwest = { version = "0.11", features = ["json", "rustls-tls"], default-features = false }
chrono = { version = "0.4", features = ["serde"] } chrono = { version = "0.4", features = ["serde"] }
tokio = { version = "1.32", features = ["macros" ] } tokio = { version = "1.36", features = ["macros" ] }
chirpstack_api = { path = "../api/rust", default-features = false, features = ["json"] } chirpstack_api = { path = "../api/rust", default-features = false, features = ["json"] }
# Development and testing # Development and testing

View File

@ -23,7 +23,7 @@
], default-features = true } ], default-features = true }
async-trait = "0.1.73" async-trait = "0.1.73"
serde = { version = "1.0", features = ["derive"] } serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.32", features = ["macros", "rt-multi-thread"] } tokio = { version = "1.36", features = ["macros", "rt-multi-thread"] }
lazy_static = "1.4" lazy_static = "1.4"
serde_json = "1.0" serde_json = "1.0"
toml = "0.7" toml = "0.8"

View File

@ -467,7 +467,10 @@ mod test {
sleep(Duration::from_millis(100)).await; sleep(Duration::from_millis(100)).await;
let redis_client = redis::Client::open(redis_url).unwrap(); let redis_client = redis::Client::open(redis_url).unwrap();
let mut redis_conn = redis_client.get_async_connection().await.unwrap(); let mut redis_conn = redis_client
.get_multiplexed_async_connection()
.await
.unwrap();
println!("Uplink"); println!("Uplink");

View File

@ -11,7 +11,7 @@ license = "MIT"
[dependencies] [dependencies]
# CLI interface # CLI interface
clap = { version = "4.4", features = ["derive"] } clap = { version = "4.5", features = ["derive"] }
# Configuration # Configuration
serde = { version = "1.0", features = ["derive", "rc"] } serde = { version = "1.0", features = ["derive", "rc"] }
@ -19,11 +19,11 @@ serde_yaml = "0.9"
serde_json = "1.0" serde_json = "1.0"
serde_urlencoded = "0.7" serde_urlencoded = "0.7"
humantime-serde = "1.1" humantime-serde = "1.1"
toml = "0.7" toml = "0.8"
handlebars = "4.4" handlebars = "5.1"
# Database # Database
validator = "0.16" email_address = "0.2"
diesel = { version = "2.1", features = [ diesel = { version = "2.1", features = [
"chrono", "chrono",
"uuid", "uuid",
@ -65,7 +65,7 @@ hmac = "0.12"
sha2 = "0.10" sha2 = "0.10"
urlencoding = "2.1" urlencoding = "2.1"
geohash = "0.13" geohash = "0.13"
gcp_auth = "0.9" gcp_auth = "0.11"
lapin = "2.3" lapin = "2.3"
tokio-executor-trait = "2.1" tokio-executor-trait = "2.1"
tokio-reactor-trait = "1.1" tokio-reactor-trait = "1.1"
@ -89,7 +89,7 @@ futures = "0.3"
futures-util = "0.3" futures-util = "0.3"
http = "0.2" http = "0.2"
http-body = "0.4" http-body = "0.4"
rust-embed = "8.1" rust-embed = "8.3"
mime_guess = "2.0" mime_guess = "2.0"
tower-http = { version = "0.4", features = ["trace", "auth"] } tower-http = { version = "0.4", features = ["trace", "auth"] }
@ -103,10 +103,10 @@ rand_core = { version = "0.6", features = ["std"] }
jsonwebtoken = "9.2" jsonwebtoken = "9.2"
rustls = "0.22" rustls = "0.22"
rustls-native-certs = "0.7" rustls-native-certs = "0.7"
rustls-pemfile = "2.0" rustls-pemfile = "2.1"
rsa = "0.9" rsa = "0.9"
rcgen = { version = "0.12", features = [ "x509-parser" ] } rcgen = { version = "0.12", features = [ "x509-parser" ] }
openidconnect = { version = "3.3", features = ["accept-rfc3339-timestamps"] } openidconnect = { version = "3.5", features = ["accept-rfc3339-timestamps"] }
oauth2 = "4.4" oauth2 = "4.4"
# MQTT # MQTT
@ -114,7 +114,7 @@ rumqttc = { version = "0.24", features = ["url"] }
hex = "0.4" hex = "0.4"
# Codecs # Codecs
rquickjs = { version = "0.3", features = [ rquickjs = { version = "0.5", features = [
"bindgen", "bindgen",
"loader", "loader",
"array-buffer", "array-buffer",
@ -123,14 +123,14 @@ rquickjs = { version = "0.3", features = [
# Misc # Misc
lazy_static = "1.4" lazy_static = "1.4"
uuid = { version = "1.4", features = ["v4", "serde"] } uuid = { version = "1.8", features = ["v4", "serde"] }
chrono = "0.4" chrono = "0.4"
async-trait = "0.1" async-trait = "0.1"
aes = "0.8" aes = "0.8"
rand = "0.8" rand = "0.8"
base64 = "0.21" base64 = "0.22"
async-recursion = "1.0" async-recursion = "1.0"
regex = "1.9" regex = "1.10"
petgraph = "0.6" petgraph = "0.6"
prometheus-client = "0.22" prometheus-client = "0.22"
pin-project = "1.1" pin-project = "1.1"
@ -138,7 +138,7 @@ pin-project = "1.1"
# Development and testing # Development and testing
[dev-dependencies] [dev-dependencies]
httpmock = "0.7.0" httpmock = "0.7.0"
bytes = "1.4" bytes = "1.5"
dotenv = "0.15" dotenv = "0.15"
[features] [features]

View File

@ -52,16 +52,17 @@ impl Handler for Plugin {
ctx.with::<_, Result<Response>>(|ctx| { ctx.with::<_, Result<Response>>(|ctx| {
let m = ctx let m = ctx
.clone()
.compile("script", self.script.clone()) .compile("script", self.script.clone())
.context("Compile script")?; .context("Compile script")?;
let func: rquickjs::Function = m.get("handle").context("Get handle function")?; let func: rquickjs::Function = m.get("handle").context("Get handle function")?;
let device_variables = rquickjs::Object::new(ctx)?; let device_variables = rquickjs::Object::new(ctx.clone())?;
for (k, v) in &req.device_variables { for (k, v) in &req.device_variables {
device_variables.set(k, v)?; device_variables.set(k, v)?;
} }
let input = rquickjs::Object::new(ctx)?; let input = rquickjs::Object::new(ctx.clone())?;
input.set("regionConfigId", req.region_config_id.clone())?; input.set("regionConfigId", req.region_config_id.clone())?;
input.set("regionCommonName", req.region_common_name.to_string())?; input.set("regionCommonName", req.region_common_name.to_string())?;
input.set("devEui", req.dev_eui.to_string())?; input.set("devEui", req.dev_eui.to_string())?;
@ -81,7 +82,7 @@ impl Handler for Plugin {
let mut uplink_history: Vec<rquickjs::Object> = Vec::new(); let mut uplink_history: Vec<rquickjs::Object> = Vec::new();
for uh in &req.uplink_history { for uh in &req.uplink_history {
let obj = rquickjs::Object::new(ctx)?; let obj = rquickjs::Object::new(ctx.clone())?;
obj.set("fCnt", uh.f_cnt)?; obj.set("fCnt", uh.f_cnt)?;
obj.set("maxSnr", uh.max_snr)?; obj.set("maxSnr", uh.max_snr)?;
obj.set("maxRssi", uh.max_rssi)?; obj.set("maxRssi", uh.max_rssi)?;

View File

@ -249,7 +249,7 @@ pub fn ul_meta_data_to_rx_info(ul_meta_data: &ULMetaData) -> Result<Vec<gw::Upli
fine_time_since_gps_epoch: if gw_info.fine_recv_time.is_some() { fine_time_since_gps_epoch: if gw_info.fine_recv_time.is_some() {
let ts = ul_meta_data let ts = ul_meta_data
.recv_time .recv_time
.duration_round(Duration::try_seconds(1).unwrap_or_default())?; .duration_round(Duration::try_seconds(1).unwrap())?;
let ts = ts + Duration::nanoseconds(gw_info.fine_recv_time.unwrap() as i64); let ts = ts + Duration::nanoseconds(gw_info.fine_recv_time.unwrap() as i64);
Some(ts.to_gps_time().to_std()?.into()) Some(ts.to_gps_time().to_std()?.into())

View File

@ -62,10 +62,10 @@ fn _rquickjs_to_struct_val(val: &rquickjs::Value) -> Option<pbjson_types::value:
} }
pub fn struct_to_rquickjs<'js>( pub fn struct_to_rquickjs<'js>(
ctx: rquickjs::Ctx<'js>, ctx: &rquickjs::Ctx<'js>,
obj: &prost_types::Struct, obj: &prost_types::Struct,
) -> rquickjs::Object<'js> { ) -> rquickjs::Object<'js> {
let out = rquickjs::Object::new(ctx).unwrap(); let out = rquickjs::Object::new(ctx.clone()).unwrap();
for (k, v) in &obj.fields { for (k, v) in &obj.fields {
out.set(k, _struct_to_rquickjs(ctx, v)).unwrap(); out.set(k, _struct_to_rquickjs(ctx, v)).unwrap();
@ -75,27 +75,27 @@ pub fn struct_to_rquickjs<'js>(
} }
fn _struct_to_rquickjs<'js>( fn _struct_to_rquickjs<'js>(
ctx: rquickjs::Ctx<'js>, ctx: &rquickjs::Ctx<'js>,
val: &prost_types::Value, val: &prost_types::Value,
) -> rquickjs::Value<'js> { ) -> rquickjs::Value<'js> {
match &val.kind { match &val.kind {
None => rquickjs::Value::new_null(ctx), None => rquickjs::Value::new_null(ctx.clone()),
Some(val) => match val { Some(val) => match val {
prost_types::value::Kind::NullValue(_) => rquickjs::Value::new_null(ctx), prost_types::value::Kind::NullValue(_) => rquickjs::Value::new_null(ctx.clone()),
prost_types::value::Kind::NumberValue(v) => rquickjs::Value::new_float(ctx, *v), prost_types::value::Kind::NumberValue(v) => rquickjs::Value::new_float(ctx.clone(), *v),
prost_types::value::Kind::StringValue(v) => { prost_types::value::Kind::StringValue(v) => {
rquickjs::Value::from_string(rquickjs::String::from_str(ctx, v).unwrap()) rquickjs::Value::from_string(rquickjs::String::from_str(ctx.clone(), v).unwrap())
} }
prost_types::value::Kind::BoolValue(v) => rquickjs::Value::new_bool(ctx, *v), prost_types::value::Kind::BoolValue(v) => rquickjs::Value::new_bool(ctx.clone(), *v),
prost_types::value::Kind::StructValue(v) => { prost_types::value::Kind::StructValue(v) => {
let out = rquickjs::Object::new(ctx).unwrap(); let out = rquickjs::Object::new(ctx.clone()).unwrap();
for (k, v) in &v.fields { for (k, v) in &v.fields {
out.set(k, _struct_to_rquickjs(ctx, v)).unwrap(); out.set(k, _struct_to_rquickjs(ctx, v)).unwrap();
} }
rquickjs::Value::from_object(out) rquickjs::Value::from_object(out)
} }
prost_types::value::Kind::ListValue(v) => { prost_types::value::Kind::ListValue(v) => {
let out = rquickjs::Array::new(ctx).unwrap(); let out = rquickjs::Array::new(ctx.clone()).unwrap();
for (i, v) in v.values.iter().enumerate() { for (i, v) in v.values.iter().enumerate() {
out.set(i, _struct_to_rquickjs(ctx, v)).unwrap(); out.set(i, _struct_to_rquickjs(ctx, v)).unwrap();
} }

View File

@ -50,7 +50,7 @@ pub async fn decode(
let out = ctx.with(|ctx| -> Result<pbjson_types::Struct> { let out = ctx.with(|ctx| -> Result<pbjson_types::Struct> {
// We need to export the Buffer class, as eval / eval_with_options // We need to export the Buffer class, as eval / eval_with_options
// does not allow using import statement. // does not allow using import statement.
let buff: rquickjs::Module = ctx.compile( let buff: rquickjs::Module = ctx.clone().compile(
"b", "b",
r#" r#"
import { Buffer } from "buffer"; import { Buffer } from "buffer";
@ -59,11 +59,11 @@ pub async fn decode(
)?; )?;
let buff: rquickjs::Function = buff.get("Buffer")?; let buff: rquickjs::Function = buff.get("Buffer")?;
let input = rquickjs::Object::new(ctx)?; let input = rquickjs::Object::new(ctx.clone())?;
input.set("bytes", b.into_js(ctx)?)?; input.set("bytes", b.into_js(&ctx)?)?;
input.set("fPort", f_port.into_js(ctx)?)?; input.set("fPort", f_port.into_js(&ctx)?)?;
input.set("recvTime", recv_time.into_js(ctx)?)?; input.set("recvTime", recv_time.into_js(&ctx)?)?;
input.set("variables", variables.into_js(ctx)?)?; input.set("variables", variables.into_js(&ctx)?)?;
let globals = ctx.globals(); let globals = ctx.globals();
globals.set("chirpstack_input", input)?; globals.set("chirpstack_input", input)?;
@ -134,7 +134,7 @@ pub async fn encode(
ctx.with(|ctx| { ctx.with(|ctx| {
// We need to export the Buffer class, as eval / eval_with_options // We need to export the Buffer class, as eval / eval_with_options
// does not allow using import statement. // does not allow using import statement.
let buff: rquickjs::Module = ctx.compile( let buff: rquickjs::Module = ctx.clone().compile(
"b", "b",
r#" r#"
import { Buffer } from "buffer"; import { Buffer } from "buffer";
@ -143,10 +143,10 @@ pub async fn encode(
)?; )?;
let buff: rquickjs::Function = buff.get("Buffer")?; let buff: rquickjs::Function = buff.get("Buffer")?;
let input = rquickjs::Object::new(ctx)?; let input = rquickjs::Object::new(ctx.clone())?;
input.set("fPort", f_port.into_js(ctx)?)?; input.set("fPort", f_port.into_js(&ctx)?)?;
input.set("variables", variables.into_js(ctx)?)?; input.set("variables", variables.into_js(&ctx)?)?;
input.set("data", convert::struct_to_rquickjs(ctx, s))?; input.set("data", convert::struct_to_rquickjs(&ctx, s))?;
let globals = ctx.globals(); let globals = ctx.globals();
globals.set("chirpstack_input", input)?; globals.set("chirpstack_input", input)?;

View File

@ -46,7 +46,7 @@ impl Integration {
pub async fn new(conf: &GcpPubSubConfiguration) -> Result<Integration> { pub async fn new(conf: &GcpPubSubConfiguration) -> Result<Integration> {
trace!("Initializing GCP Pub-Sub integration"); trace!("Initializing GCP Pub-Sub integration");
let service_account = CustomServiceAccount::from_json(&conf.credentials_file)?; let service_account = CustomServiceAccount::from_json(&conf.credentials_file)?;
let auth_manager = AuthenticationManager::from(service_account); let auth_manager = AuthenticationManager::try_from(service_account)?;
Ok(Integration { Ok(Integration {
json: match Encoding::try_from(conf.encoding) json: match Encoding::try_from(conf.encoding)

View File

@ -2,6 +2,7 @@ use anyhow::Result;
use chrono::{DateTime, Utc}; use chrono::{DateTime, Utc};
use diesel::{dsl, prelude::*}; use diesel::{dsl, prelude::*};
use diesel_async::RunQueryDsl; use diesel_async::RunQueryDsl;
use email_address::EmailAddress;
use pbkdf2::{ use pbkdf2::{
password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString}, password_hash::{PasswordHash, PasswordHasher, PasswordVerifier, SaltString},
Algorithm, Pbkdf2, Algorithm, Pbkdf2,
@ -9,7 +10,6 @@ use pbkdf2::{
use rand_core::OsRng; use rand_core::OsRng;
use tracing::info; use tracing::info;
use uuid::Uuid; use uuid::Uuid;
use validator::validate_email;
use super::error::Error; use super::error::Error;
use super::get_async_db_conn; use super::get_async_db_conn;
@ -51,7 +51,7 @@ impl Default for User {
impl User { impl User {
pub fn validate(&self) -> Result<(), Error> { pub fn validate(&self) -> Result<(), Error> {
if self.email != "admin" && !validate_email(&self.email) { if self.email != "admin" && !EmailAddress::is_valid(&self.email) {
return Err(Error::InvalidEmail); return Err(Error::InvalidEmail);
} }