diff --git a/Cargo.lock b/Cargo.lock index 01d522b13..bdd681a16 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "account-for-display" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "derive_more", @@ -49,10 +49,10 @@ dependencies = [ [[package]] name = "addresses" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", - "bytes 1.1.134", + "bytes 1.1.136", "cap26-models", "core-utils", "derive_more", @@ -246,7 +246,7 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "assert-json" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json-diff", "error", @@ -546,7 +546,7 @@ dependencies = [ [[package]] name = "build-info" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "cargo_toml", @@ -573,7 +573,7 @@ checksum = "5ce89b21cab1437276d2650d57e971f9d548a2d9037cc231abdc0562b97498ce" [[package]] name = "bytes" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "delegate", @@ -607,7 +607,7 @@ dependencies = [ [[package]] name = "cap26-models" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "derive_more", @@ -748,7 +748,7 @@ checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" [[package]] name = "clients" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "async-trait", @@ -808,7 +808,7 @@ checksum = "0d8a42181e0652c2997ae4d217f25b63c5337a52fd2279736e97b832fa0a3cff" [[package]] name = "core-collections" -version = "1.1.134" +version = "1.1.136" dependencies = [ "has-sample-values", "indexmap 2.7.0", @@ -835,7 +835,7 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "core-misc" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "core-utils", @@ -855,7 +855,7 @@ dependencies = [ [[package]] name = "core-utils" -version = "1.1.134" +version = "1.1.136" dependencies = [ "error", "iso8601-timestamp", @@ -1084,7 +1084,7 @@ checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" [[package]] name = "drivers" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -1108,10 +1108,10 @@ dependencies = [ [[package]] name = "ecc" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", - "bytes 1.1.134", + "bytes 1.1.136", "derive_more", "enum-as-inner", "error", @@ -1210,11 +1210,11 @@ dependencies = [ [[package]] name = "encryption" -version = "1.1.134" +version = "1.1.136" dependencies = [ "aes-gcm", "assert-json", - "bytes 1.1.134", + "bytes 1.1.136", "derive_more", "error", "has-sample-values", @@ -1231,7 +1231,7 @@ dependencies = [ [[package]] name = "entity-by-address" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "error", @@ -1243,7 +1243,7 @@ dependencies = [ [[package]] name = "entity-foundation" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "derive_more", @@ -1318,7 +1318,7 @@ dependencies = [ [[package]] name = "error" -version = "1.1.134" +version = "1.1.136" dependencies = [ "derive_more", "log", @@ -1377,7 +1377,7 @@ dependencies = [ [[package]] name = "factor-instances-provider" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -1403,9 +1403,9 @@ dependencies = [ [[package]] name = "factors" -version = "1.1.134" +version = "1.1.136" dependencies = [ - "bytes 1.1.134", + "bytes 1.1.136", "cap26-models", "core-collections", "core-misc", @@ -1440,7 +1440,7 @@ dependencies = [ [[package]] name = "factors-supporting-types" -version = "1.1.134" +version = "1.1.136" dependencies = [ "async-trait", "error", @@ -1593,7 +1593,7 @@ dependencies = [ [[package]] name = "gateway-client-and-api" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -1613,7 +1613,7 @@ dependencies = [ [[package]] name = "gateway-models" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "assert-json", @@ -1718,7 +1718,7 @@ dependencies = [ [[package]] name = "has-sample-values" -version = "1.1.134" +version = "1.1.136" dependencies = [ "error", "indexmap 2.7.0", @@ -1729,9 +1729,9 @@ dependencies = [ [[package]] name = "hash" -version = "1.1.134" +version = "1.1.136" dependencies = [ - "bytes 1.1.134", + "bytes 1.1.136", "derive_more", "prelude", "radix-common", @@ -1795,11 +1795,11 @@ dependencies = [ [[package]] name = "hierarchical-deterministic" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "bip39", - "bytes 1.1.134", + "bytes 1.1.136", "cap26-models", "derive_more", "ecc", @@ -1842,13 +1842,13 @@ dependencies = [ [[package]] name = "home-cards" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", "async-trait", "base64", - "bytes 1.1.134", + "bytes 1.1.136", "core-utils", "derive_more", "drivers", @@ -1868,7 +1868,7 @@ dependencies = [ [[package]] name = "host-info" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "derive_more", @@ -1915,10 +1915,10 @@ dependencies = [ [[package]] name = "http-client" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", - "bytes 1.1.134", + "bytes 1.1.136", "core-utils", "drivers", "error", @@ -2143,7 +2143,7 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "identified-vec-of" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "derive_more", @@ -2216,7 +2216,7 @@ dependencies = [ [[package]] name = "interactors" -version = "1.1.134" +version = "1.1.136" dependencies = [ "async-trait", "derive_more", @@ -2336,7 +2336,7 @@ dependencies = [ [[package]] name = "key-derivation-traits" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "async-trait", @@ -2354,7 +2354,7 @@ dependencies = [ [[package]] name = "keys-collector" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -2443,7 +2443,7 @@ dependencies = [ [[package]] name = "manifests" -version = "1.1.134" +version = "1.1.136" dependencies = [ "account-for-display", "addresses", @@ -2485,7 +2485,7 @@ checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" [[package]] name = "metadata" -version = "1.1.134" +version = "1.1.136" dependencies = [ "derive_more", "has-sample-values", @@ -2585,7 +2585,7 @@ dependencies = [ [[package]] name = "network" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", "enum-iterator", @@ -2601,7 +2601,7 @@ dependencies = [ [[package]] name = "next-derivation-index-ephemeral" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "assert-json", @@ -2677,9 +2677,9 @@ dependencies = [ [[package]] name = "numeric" -version = "1.1.134" +version = "1.1.136" dependencies = [ - "bytes 1.1.134", + "bytes 1.1.136", "delegate", "derive_more", "enum-iterator", @@ -2899,7 +2899,7 @@ dependencies = [ [[package]] name = "prelude" -version = "1.1.134" +version = "1.1.136" dependencies = [ "radix-engine", "radix-engine-toolkit", @@ -2936,7 +2936,7 @@ dependencies = [ [[package]] name = "profile" -version = "1.1.134" +version = "1.1.136" dependencies = [ "account-for-display", "addresses", @@ -2980,7 +2980,7 @@ dependencies = [ [[package]] name = "profile-account" -version = "1.1.134" +version = "1.1.136" dependencies = [ "account-for-display", "addresses", @@ -3000,7 +3000,7 @@ dependencies = [ [[package]] name = "profile-account-or-persona" -version = "1.1.134" +version = "1.1.136" dependencies = [ "cap26-models", "derive_more", @@ -3017,7 +3017,7 @@ dependencies = [ [[package]] name = "profile-app-preferences" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "core-misc", @@ -3040,7 +3040,7 @@ dependencies = [ [[package]] name = "profile-base-entity" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "derive_more", @@ -3063,7 +3063,7 @@ dependencies = [ [[package]] name = "profile-gateway" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "assert-json", @@ -3087,7 +3087,7 @@ dependencies = [ [[package]] name = "profile-logic" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "derive_more", @@ -3109,7 +3109,7 @@ dependencies = [ [[package]] name = "profile-persona" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "cap26-models", @@ -3130,7 +3130,7 @@ dependencies = [ [[package]] name = "profile-persona-data" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "assert-json", @@ -3149,7 +3149,7 @@ dependencies = [ [[package]] name = "profile-security-structures" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "cap26-models", @@ -3177,7 +3177,7 @@ dependencies = [ [[package]] name = "profile-state-holder" -version = "1.1.134" +version = "1.1.136" dependencies = [ "derive_more", "error", @@ -3192,7 +3192,7 @@ dependencies = [ [[package]] name = "profile-supporting-types" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "derive_more", @@ -3281,14 +3281,14 @@ dependencies = [ [[package]] name = "radix-connect" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", "assert-json", "async-trait", "base64", - "bytes 1.1.134", + "bytes 1.1.136", "core-misc", "core-utils", "derive_more", @@ -3317,10 +3317,10 @@ dependencies = [ [[package]] name = "radix-connect-models" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", - "bytes 1.1.134", + "bytes 1.1.136", "core-misc", "derive_more", "error", @@ -3762,7 +3762,7 @@ dependencies = [ [[package]] name = "sargon" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -3827,7 +3827,7 @@ dependencies = [ [[package]] name = "sargon-os" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "async-trait", @@ -3854,7 +3854,7 @@ dependencies = [ [[package]] name = "sargon-os-accounts" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -3877,7 +3877,7 @@ dependencies = [ [[package]] name = "sargon-os-derive-public-keys" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "async-trait", @@ -3896,7 +3896,7 @@ dependencies = [ [[package]] name = "sargon-os-factors" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "async-trait", @@ -3906,6 +3906,7 @@ dependencies = [ "enum-as-inner", "error", "factor-instances-provider", + "futures", "interactors", "key-derivation-traits", "log", @@ -3924,7 +3925,7 @@ dependencies = [ [[package]] name = "sargon-os-security-center" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "derive_more", @@ -3940,7 +3941,7 @@ dependencies = [ [[package]] name = "sargon-os-signing" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "async-trait", @@ -3966,7 +3967,7 @@ dependencies = [ [[package]] name = "sargon-os-transaction" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "async-std", @@ -3995,7 +3996,7 @@ dependencies = [ [[package]] name = "sargon-uniffi" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", @@ -4052,7 +4053,7 @@ dependencies = [ [[package]] name = "sargon-uniffi-conversion-macros" -version = "1.1.134" +version = "1.1.136" dependencies = [ "proc-macro2", "quote", @@ -4225,7 +4226,7 @@ dependencies = [ [[package]] name = "security-center" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", "assert-json", @@ -4393,7 +4394,7 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "short-string" -version = "1.1.134" +version = "1.1.136" dependencies = [ "arraystring", "assert-json", @@ -4428,13 +4429,13 @@ dependencies = [ [[package]] name = "signatures-collector" -version = "1.1.134" +version = "1.1.136" dependencies = [ "actix-rt", "addresses", "assert-json", "async-trait", - "bytes 1.1.134", + "bytes 1.1.136", "cap26-models", "core-collections", "core-misc", @@ -4466,10 +4467,10 @@ dependencies = [ [[package]] name = "signing-traits" -version = "1.1.134" +version = "1.1.136" dependencies = [ "async-trait", - "bytes 1.1.134", + "bytes 1.1.136", "core-collections", "derive_more", "ecc", @@ -4634,7 +4635,7 @@ dependencies = [ [[package]] name = "sub-systems" -version = "1.1.134" +version = "1.1.136" dependencies = [ "derive_more", "drivers", @@ -4793,7 +4794,7 @@ dependencies = [ [[package]] name = "time-utils" -version = "1.1.134" +version = "1.1.136" dependencies = [ "iso8601-timestamp", "prelude", @@ -4943,10 +4944,10 @@ dependencies = [ [[package]] name = "transaction-foundation" -version = "1.1.134" +version = "1.1.136" dependencies = [ "assert-json", - "bytes 1.1.134", + "bytes 1.1.136", "derive_more", "has-sample-values", "paste", @@ -4958,10 +4959,10 @@ dependencies = [ [[package]] name = "transaction-models" -version = "1.1.134" +version = "1.1.136" dependencies = [ "addresses", - "bytes 1.1.134", + "bytes 1.1.136", "cargo_toml", "core-collections", "core-misc", diff --git a/crates/app/home-cards/Cargo.toml b/crates/app/home-cards/Cargo.toml index a01042746..ecaa302db 100644 --- a/crates/app/home-cards/Cargo.toml +++ b/crates/app/home-cards/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "home-cards" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/app/key-derivation-traits/Cargo.toml b/crates/app/key-derivation-traits/Cargo.toml index 69a4db93a..f1fa7aa03 100644 --- a/crates/app/key-derivation-traits/Cargo.toml +++ b/crates/app/key-derivation-traits/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "key-derivation-traits" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/app/radix-connect-models/Cargo.toml b/crates/app/radix-connect-models/Cargo.toml index 4e2f18867..c42d03903 100644 --- a/crates/app/radix-connect-models/Cargo.toml +++ b/crates/app/radix-connect-models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "radix-connect-models" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/app/radix-connect/Cargo.toml b/crates/app/radix-connect/Cargo.toml index e3c85553d..811cfb837 100644 --- a/crates/app/radix-connect/Cargo.toml +++ b/crates/app/radix-connect/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "radix-connect" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/app/security-center/Cargo.toml b/crates/app/security-center/Cargo.toml index d3d777398..310a0d8d1 100644 --- a/crates/app/security-center/Cargo.toml +++ b/crates/app/security-center/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "security-center" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/app/signing-traits/Cargo.toml b/crates/app/signing-traits/Cargo.toml index 8088e06bb..5b8d4037e 100644 --- a/crates/app/signing-traits/Cargo.toml +++ b/crates/app/signing-traits/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signing-traits" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/build-info/Cargo.toml b/crates/common/build-info/Cargo.toml index 40f1163ed..c22224bc8 100644 --- a/crates/common/build-info/Cargo.toml +++ b/crates/common/build-info/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "build-info" -version = "1.1.134" +version = "1.1.136" edition = "2021" build = "build.rs" diff --git a/crates/common/bytes/Cargo.toml b/crates/common/bytes/Cargo.toml index c9f6dc2e5..75803849d 100644 --- a/crates/common/bytes/Cargo.toml +++ b/crates/common/bytes/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bytes" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/entity-foundation/Cargo.toml b/crates/common/entity-foundation/Cargo.toml index 22f888488..a7e10f0b9 100644 --- a/crates/common/entity-foundation/Cargo.toml +++ b/crates/common/entity-foundation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "entity-foundation" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/host-info/Cargo.toml b/crates/common/host-info/Cargo.toml index 3bd231074..e37abfac1 100644 --- a/crates/common/host-info/Cargo.toml +++ b/crates/common/host-info/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "host-info" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/identified-vec-of/Cargo.toml b/crates/common/identified-vec-of/Cargo.toml index 1bec42cbe..a6173c28d 100644 --- a/crates/common/identified-vec-of/Cargo.toml +++ b/crates/common/identified-vec-of/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "identified-vec-of" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/metadata/Cargo.toml b/crates/common/metadata/Cargo.toml index b4845a62a..32a3e0567 100644 --- a/crates/common/metadata/Cargo.toml +++ b/crates/common/metadata/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "metadata" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/network/Cargo.toml b/crates/common/network/Cargo.toml index c47367861..234d900de 100644 --- a/crates/common/network/Cargo.toml +++ b/crates/common/network/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "network" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/numeric/Cargo.toml b/crates/common/numeric/Cargo.toml index 68b4df1da..9da2c4f3b 100644 --- a/crates/common/numeric/Cargo.toml +++ b/crates/common/numeric/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "numeric" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/common/short-string/Cargo.toml b/crates/common/short-string/Cargo.toml index 644832d4e..e58501ca7 100644 --- a/crates/common/short-string/Cargo.toml +++ b/crates/common/short-string/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "short-string" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/assert-json/Cargo.toml b/crates/core/assert-json/Cargo.toml index 4b9be0c13..65ba791cc 100644 --- a/crates/core/assert-json/Cargo.toml +++ b/crates/core/assert-json/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "assert-json" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/collections/Cargo.toml b/crates/core/collections/Cargo.toml index d47af1efc..d5b843038 100644 --- a/crates/core/collections/Cargo.toml +++ b/crates/core/collections/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "core-collections" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/error/Cargo.toml b/crates/core/error/Cargo.toml index 3981e7dca..8aecda5b3 100644 --- a/crates/core/error/Cargo.toml +++ b/crates/core/error/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "error" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/has-sample-values/Cargo.toml b/crates/core/has-sample-values/Cargo.toml index 8da2a0c28..9e9658b3a 100644 --- a/crates/core/has-sample-values/Cargo.toml +++ b/crates/core/has-sample-values/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "has-sample-values" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/misc/Cargo.toml b/crates/core/misc/Cargo.toml index ca691e286..b0ce2c9ac 100644 --- a/crates/core/misc/Cargo.toml +++ b/crates/core/misc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "core-misc" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/prelude/Cargo.toml b/crates/core/prelude/Cargo.toml index bd4399c57..0f20f5466 100644 --- a/crates/core/prelude/Cargo.toml +++ b/crates/core/prelude/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "prelude" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/time-utils/Cargo.toml b/crates/core/time-utils/Cargo.toml index 04bca3bff..cf64f2d15 100644 --- a/crates/core/time-utils/Cargo.toml +++ b/crates/core/time-utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "time-utils" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/core/utils/Cargo.toml b/crates/core/utils/Cargo.toml index 5b6b73a02..ca75d9c14 100644 --- a/crates/core/utils/Cargo.toml +++ b/crates/core/utils/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "core-utils" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/crypto/addresses/Cargo.toml b/crates/crypto/addresses/Cargo.toml index 86c29207b..6dea0646a 100644 --- a/crates/crypto/addresses/Cargo.toml +++ b/crates/crypto/addresses/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "addresses" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/crypto/cap26-models/Cargo.toml b/crates/crypto/cap26-models/Cargo.toml index e6dfef466..142d2f687 100644 --- a/crates/crypto/cap26-models/Cargo.toml +++ b/crates/crypto/cap26-models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cap26-models" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/crypto/ecc/Cargo.toml b/crates/crypto/ecc/Cargo.toml index eec35265c..8c49b252c 100644 --- a/crates/crypto/ecc/Cargo.toml +++ b/crates/crypto/ecc/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ecc" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/crypto/encryption/Cargo.toml b/crates/crypto/encryption/Cargo.toml index 84150f863..a44a65a9f 100644 --- a/crates/crypto/encryption/Cargo.toml +++ b/crates/crypto/encryption/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "encryption" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/crypto/hash/Cargo.toml b/crates/crypto/hash/Cargo.toml index e3a00a775..ccedc11b6 100644 --- a/crates/crypto/hash/Cargo.toml +++ b/crates/crypto/hash/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hash" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/crypto/hd/Cargo.toml b/crates/crypto/hd/Cargo.toml index 54b4a8a20..9056d161c 100644 --- a/crates/crypto/hd/Cargo.toml +++ b/crates/crypto/hd/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hierarchical-deterministic" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/factors/factors/Cargo.toml b/crates/factors/factors/Cargo.toml index 396b471f9..a854b4185 100644 --- a/crates/factors/factors/Cargo.toml +++ b/crates/factors/factors/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "factors" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/factors/instances-provider/Cargo.toml b/crates/factors/instances-provider/Cargo.toml index e73e151e5..a72f93dc4 100644 --- a/crates/factors/instances-provider/Cargo.toml +++ b/crates/factors/instances-provider/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "factor-instances-provider" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/factors/keys-collector/Cargo.toml b/crates/factors/keys-collector/Cargo.toml index 441388fa7..7a796c99c 100644 --- a/crates/factors/keys-collector/Cargo.toml +++ b/crates/factors/keys-collector/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "keys-collector" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/factors/next-derivation-index-ephemeral/Cargo.toml b/crates/factors/next-derivation-index-ephemeral/Cargo.toml index b80fda8a7..8ca6d0788 100644 --- a/crates/factors/next-derivation-index-ephemeral/Cargo.toml +++ b/crates/factors/next-derivation-index-ephemeral/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "next-derivation-index-ephemeral" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/factors/signatures-collector/Cargo.toml b/crates/factors/signatures-collector/Cargo.toml index 75e7e2920..74db5e93a 100644 --- a/crates/factors/signatures-collector/Cargo.toml +++ b/crates/factors/signatures-collector/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "signatures-collector" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/factors/supporting-types/Cargo.toml b/crates/factors/supporting-types/Cargo.toml index c36958c98..5c120e64f 100644 --- a/crates/factors/supporting-types/Cargo.toml +++ b/crates/factors/supporting-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "factors-supporting-types" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/gateway/client-and-api/Cargo.toml b/crates/gateway/client-and-api/Cargo.toml index e809e37bc..fe4bbc90f 100644 --- a/crates/gateway/client-and-api/Cargo.toml +++ b/crates/gateway/client-and-api/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gateway-client-and-api" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/gateway/models/Cargo.toml b/crates/gateway/models/Cargo.toml index 26b5a0f7b..f0c938d94 100644 --- a/crates/gateway/models/Cargo.toml +++ b/crates/gateway/models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "gateway-models" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/profile/logic/logic_SPLIT_ME/Cargo.toml b/crates/profile/logic/logic_SPLIT_ME/Cargo.toml index f5e2bcda9..6e6578931 100644 --- a/crates/profile/logic/logic_SPLIT_ME/Cargo.toml +++ b/crates/profile/logic/logic_SPLIT_ME/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-logic" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/account/mod.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/account/mod.rs index 7190065b7..bf0dd61aa 100644 --- a/crates/profile/logic/logic_SPLIT_ME/src/logic/account/mod.rs +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/account/mod.rs @@ -3,10 +3,8 @@ mod account_is_unsecured_ledger_controlled; mod account_visibility; mod accounts_visibility; mod query_accounts; -mod query_security_structures; pub use account_is_legacy::*; pub use account_is_unsecured_ledger_controlled::*; pub use account_visibility::*; pub use query_accounts::*; -pub use query_security_structures::*; diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/mod.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/mod.rs index 70c4d39af..93129c2b5 100644 --- a/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/mod.rs +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/mod.rs @@ -1,5 +1,5 @@ mod query_app_preferences; -mod security_structures_update; +mod security_structures; pub use query_app_preferences::*; -pub use security_structures_update::*; +pub use security_structures::*; diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/entities_linked_to_security_structure.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/entities_linked_to_security_structure.rs new file mode 100644 index 000000000..ea9d4d0d3 --- /dev/null +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/entities_linked_to_security_structure.rs @@ -0,0 +1,79 @@ +use crate::prelude::*; + +/// This is the result of checking what entities are linked to a given `SecurityStructure`. +#[derive(Clone, Debug, PartialEq)] +pub struct EntitiesLinkedToSecurityStructure { + /// The metadata of the linked security structure. + pub metadata: SecurityStructureMetadata, + + /// The visible accounts linked to the security structure. + pub accounts: Accounts, + + /// The hidden accounts linked to the security structure. + pub hidden_accounts: Accounts, + + /// The visible personas linked to the security structure. + pub personas: Personas, + + /// The hidden personas linked to the security structure. + pub hidden_personas: Personas, +} + +impl EntitiesLinkedToSecurityStructure { + pub fn new( + metadata: SecurityStructureMetadata, + accounts: Accounts, + hidden_accounts: Accounts, + personas: Personas, + hidden_personas: Personas, + ) -> Self { + Self { + metadata, + accounts, + hidden_accounts, + personas, + hidden_personas, + } + } +} + +impl HasSampleValues for EntitiesLinkedToSecurityStructure { + fn sample() -> Self { + Self::new( + SecurityStructureMetadata::sample(), + Accounts::sample(), + Accounts::new(), + Personas::sample(), + Personas::new(), + ) + } + + fn sample_other() -> Self { + Self::new( + SecurityStructureMetadata::sample_other(), + Accounts::sample_other(), + Accounts::new(), + Personas::sample_other(), + Personas::new(), + ) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[allow(clippy::upper_case_acronyms)] + type SUT = EntitiesLinkedToSecurityStructure; + + #[test] + fn equality() { + assert_eq!(SUT::sample(), SUT::sample()); + assert_eq!(SUT::sample_other(), SUT::sample_other()); + } + + #[test] + fn inequality() { + assert_ne!(SUT::sample(), SUT::sample_other()); + } +} diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/mod.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/mod.rs new file mode 100644 index 000000000..219bdc80a --- /dev/null +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/mod.rs @@ -0,0 +1,9 @@ +mod entities_linked_to_security_structure; +pub mod query_security_structures; +mod security_structures_update; +mod shield_for_display; + +pub use entities_linked_to_security_structure::*; +pub use query_security_structures::*; +pub use security_structures_update::*; +pub use shield_for_display::*; diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/account/query_security_structures.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/query_security_structures.rs similarity index 54% rename from crates/profile/logic/logic_SPLIT_ME/src/logic/account/query_security_structures.rs rename to crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/query_security_structures.rs index 363d32585..7ea0ae9ca 100644 --- a/crates/profile/logic/logic_SPLIT_ME/src/logic/account/query_security_structures.rs +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/query_security_structures.rs @@ -69,6 +69,53 @@ impl ProfileSecurityShieldPrerequisitesStatus for Profile { } } +pub trait LinkedToSecurityStructure { + fn is_currently_or_provisionally_securified_with( + &self, + shield_id: SecurityStructureID, + ) -> bool; + + fn is_currently_securified_with( + &self, + shield_id: SecurityStructureID, + ) -> bool; + + fn is_provisionally_securified_with( + &self, + shield_id: SecurityStructureID, + ) -> bool; +} + +impl LinkedToSecurityStructure for EntitySecurityState { + fn is_currently_or_provisionally_securified_with( + &self, + shield_id: SecurityStructureID, + ) -> bool { + self.is_currently_securified_with(shield_id) + || self.is_provisionally_securified_with(shield_id) + } + + fn is_currently_securified_with( + &self, + shield_id: SecurityStructureID, + ) -> bool { + self.as_securified() + .map(|s| s.security_structure.security_structure_id == shield_id) + .unwrap_or(false) + } + + fn is_provisionally_securified_with( + &self, + shield_id: SecurityStructureID, + ) -> bool { + self.get_provisional() + .as_ref() + .and_then(|p| p.as_factor_instances_derived()) + .map(|s| s.security_structure_id == shield_id) + .unwrap_or(false) + } +} + #[cfg(test)] mod tests { use super::*; @@ -76,6 +123,97 @@ mod tests { #[allow(clippy::upper_case_acronyms)] type SUT = Profile; + #[test] + fn test_account_is_currently_securified() { + let mut sut = SUT::sample(); + let security_structure_sample = + SecurityStructureOfFactorSourceIDs::sample(); + + let accounts = sut.accounts_on_current_network().unwrap(); + let account = accounts.first().unwrap(); + let account_secured_control = SecuredEntityControl::new( + account + .security_state() + .as_unsecured() + .unwrap() + .transaction_signing + .clone(), + AccessControllerAddress::sample_mainnet(), + SecurityStructureOfFactorInstances::sample(), + ) + .unwrap(); + + let mut securify_account = account.clone(); + securify_account + .set_security_state(EntitySecurityState::Securified { + value: account_secured_control, + }) + .unwrap(); + + sut.update_entities_erased( + vec![AccountOrPersona::from(securify_account)].into(), + ) + .unwrap(); + + let updated_accounts = sut.accounts_on_current_network().unwrap(); + let updated_account = updated_accounts.first().unwrap(); + + let account_security_state = updated_account.security_state(); + + let is_currently_securified = account_security_state + .is_currently_securified_with(security_structure_sample.id()); + assert!(is_currently_securified); + + let is_provisionally_securified = account_security_state + .is_provisionally_securified_with(security_structure_sample.id()); + assert!(!is_provisionally_securified); + } + + #[test] + fn test_account_is_provisionally_securified() { + let mut sut = SUT::sample(); + let security_structure_sample = + SecurityStructureOfFactorSourceIDs::sample(); + + let accounts = sut.accounts_on_current_network().unwrap(); + let account = accounts.first().unwrap(); + let account_secured_control = UnsecuredEntityControl::new( + account + .security_state() + .as_unsecured() + .unwrap() + .transaction_signing + .clone(), + ProvisionalSecurifiedConfig::sample(), + ) + .unwrap(); + + let mut securify_account = account.clone(); + securify_account + .set_security_state(EntitySecurityState::Unsecured { + value: account_secured_control, + }) + .unwrap(); + + sut.update_entities_erased( + vec![AccountOrPersona::from(securify_account)].into(), + ) + .unwrap(); + + let updated_accounts = sut.accounts_on_current_network().unwrap(); + let updated_account = updated_accounts.first().unwrap(); + + let account_security_state = updated_account.security_state(); + + let is_currently_securified = account_security_state + .is_currently_securified_with(security_structure_sample.id()); + assert!(!is_currently_securified); + + let is_provisionally_securified = account_security_state + .is_provisionally_securified_with(security_structure_sample.id()); + assert!(is_provisionally_securified); + } + #[test] fn security_shield_prerequisites_status_hardware_required() { let mut sut = SUT::sample(); diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures_update.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/security_structures_update.rs similarity index 100% rename from crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures_update.rs rename to crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/security_structures_update.rs diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/shield_for_display.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/shield_for_display.rs new file mode 100644 index 000000000..e8efe2331 --- /dev/null +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/app_preferences/security_structures/shield_for_display.rs @@ -0,0 +1,112 @@ +use crate::prelude::*; + +decl_identified_vec_of!( + /// A collection of [`ShieldForDisplay`] + ShieldsForDisplay, + ShieldForDisplay +); + +impl Identifiable for ShieldForDisplay { + type ID = SecurityStructureID; + + fn id(&self) -> Self::ID { + self.metadata.id + } +} + +impl HasSampleValues for ShieldsForDisplay { + fn sample() -> Self { + Self::from_iter([ + ShieldForDisplay::sample(), + ShieldForDisplay::sample_other(), + ]) + } + + fn sample_other() -> Self { + Self::from_iter([ShieldForDisplay::sample_other()]) + } +} + +/// A minimal version of a Security Structure meant for display purposes within wallet +#[derive( + Serialize, + Deserialize, + Debug, + PartialEq, + Eq, + Clone, + Hash, + derive_more::Display, +)] +#[serde(rename_all = "camelCase")] +#[display("{}", self.metadata.display_name)] +pub struct ShieldForDisplay { + pub metadata: SecurityStructureMetadata, + pub number_of_linked_accounts: usize, + pub number_of_linked_hidden_accounts: usize, + pub number_of_linked_personas: usize, + pub number_of_linked_hidden_personas: usize, +} + +impl ShieldForDisplay { + pub fn new( + metadata: SecurityStructureMetadata, + number_of_linked_accounts: usize, + number_of_linked_hidden_accounts: usize, + number_of_linked_personas: usize, + number_of_linked_hidden_personas: usize, + ) -> Self { + Self { + metadata, + number_of_linked_accounts, + number_of_linked_hidden_accounts, + number_of_linked_personas, + number_of_linked_hidden_personas, + } + } + + pub fn with_linked( + linked_entities: EntitiesLinkedToSecurityStructure, + ) -> Self { + Self { + metadata: linked_entities.metadata, + number_of_linked_accounts: linked_entities.accounts.len(), + number_of_linked_hidden_accounts: linked_entities + .hidden_accounts + .len(), + number_of_linked_personas: linked_entities.personas.len(), + number_of_linked_hidden_personas: linked_entities + .hidden_personas + .len(), + } + } +} + +impl HasSampleValues for ShieldForDisplay { + fn sample() -> Self { + Self::new(SecurityStructureMetadata::sample(), 2, 1, 3, 1) + } + + fn sample_other() -> Self { + Self::new(SecurityStructureMetadata::sample_other(), 0, 1, 3, 0) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[allow(clippy::upper_case_acronyms)] + type SUT = ShieldForDisplay; + + #[test] + fn equality() { + assert_eq!(SUT::sample(), SUT::sample()); + assert_eq!(SUT::sample_other(), SUT::sample_other()); + } + + #[test] + fn inequality() { + assert_ne!(SUT::sample(), SUT::sample_other()); + } +} diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/mod.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/mod.rs index 6424e1311..8a47f7769 100644 --- a/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/mod.rs +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/mod.rs @@ -1,5 +1,7 @@ mod profile_network_details; mod profile_network_entities_linked_to_factor_source; +mod profile_network_entities_linked_to_security_structure; pub use profile_network_details::*; pub use profile_network_entities_linked_to_factor_source::*; +pub use profile_network_entities_linked_to_security_structure::*; diff --git a/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/profile_network_entities_linked_to_security_structure.rs b/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/profile_network_entities_linked_to_security_structure.rs new file mode 100644 index 000000000..78f89f43f --- /dev/null +++ b/crates/profile/logic/logic_SPLIT_ME/src/logic/profile_network/profile_network_entities_linked_to_security_structure.rs @@ -0,0 +1,53 @@ +use crate::prelude::*; + +pub trait ProfileNetworkQueryEntitiesLinkedToSecurityStructure { + fn entities_linked_to_security_structure( + &self, + metadata: SecurityStructureMetadata, + ) -> Result; +} + +impl ProfileNetworkQueryEntitiesLinkedToSecurityStructure for ProfileNetwork { + /// Returns the entities linked to a given `SecurityStructure` on the current `ProfileNetwork`. + fn entities_linked_to_security_structure( + &self, + metadata: SecurityStructureMetadata, + ) -> Result { + fn filter( + e: &impl HasSecurityState, + metadata: SecurityStructureMetadata, + ) -> bool { + e.security_state() + .is_currently_or_provisionally_securified_with(metadata.id) + } + + let accounts = self + .accounts_non_hidden() + .iter() + .filter(|a| filter(a, metadata.clone())) + .collect::(); + let hidden_accounts = self + .accounts_hidden() + .iter() + .filter(|a| filter(a, metadata.clone())) + .collect::(); + let personas = self + .personas_non_hidden() + .iter() + .filter(|p| filter(p, metadata.clone())) + .collect::(); + let hidden_personas = self + .personas_hidden() + .iter() + .filter(|p| filter(p, metadata.clone())) + .collect::(); + + Ok(EntitiesLinkedToSecurityStructure::new( + metadata, + accounts, + hidden_accounts, + personas, + hidden_personas, + )) + } +} diff --git a/crates/profile/models/account-for-display/Cargo.toml b/crates/profile/models/account-for-display/Cargo.toml index 1b7fee8fc..ed6e863b3 100644 --- a/crates/profile/models/account-for-display/Cargo.toml +++ b/crates/profile/models/account-for-display/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "account-for-display" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/account-or-persona/Cargo.toml b/crates/profile/models/account-or-persona/Cargo.toml index 259077d21..043b9b96b 100644 --- a/crates/profile/models/account-or-persona/Cargo.toml +++ b/crates/profile/models/account-or-persona/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-account-or-persona" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/account/Cargo.toml b/crates/profile/models/account/Cargo.toml index c1890df6b..fb4c8c405 100644 --- a/crates/profile/models/account/Cargo.toml +++ b/crates/profile/models/account/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-account" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/app-preferences/Cargo.toml b/crates/profile/models/app-preferences/Cargo.toml index 133782ed4..d81d99572 100644 --- a/crates/profile/models/app-preferences/Cargo.toml +++ b/crates/profile/models/app-preferences/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-app-preferences" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/base-entity/Cargo.toml b/crates/profile/models/base-entity/Cargo.toml index 6fb16135c..ac47fc496 100644 --- a/crates/profile/models/base-entity/Cargo.toml +++ b/crates/profile/models/base-entity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-base-entity" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/gateway/Cargo.toml b/crates/profile/models/gateway/Cargo.toml index 1bc7aec76..bfc9cfa3d 100644 --- a/crates/profile/models/gateway/Cargo.toml +++ b/crates/profile/models/gateway/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-gateway" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/persona-data/Cargo.toml b/crates/profile/models/persona-data/Cargo.toml index 0cf710041..cd3a7329f 100644 --- a/crates/profile/models/persona-data/Cargo.toml +++ b/crates/profile/models/persona-data/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-persona-data" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/persona/Cargo.toml b/crates/profile/models/persona/Cargo.toml index 554aeb7ce..7c497ed07 100644 --- a/crates/profile/models/persona/Cargo.toml +++ b/crates/profile/models/persona/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-persona" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/profile_SPLIT_ME/Cargo.toml b/crates/profile/models/profile_SPLIT_ME/Cargo.toml index da8d04bf2..c891ff023 100644 --- a/crates/profile/models/profile_SPLIT_ME/Cargo.toml +++ b/crates/profile/models/profile_SPLIT_ME/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/profile/models/security-structures/Cargo.toml b/crates/profile/models/security-structures/Cargo.toml index fb5f26f1c..7b2313e57 100644 --- a/crates/profile/models/security-structures/Cargo.toml +++ b/crates/profile/models/security-structures/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-security-structures" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/models/supporting-types/Cargo.toml b/crates/profile/models/supporting-types/Cargo.toml index a5f7ae6d6..73c8c9e46 100644 --- a/crates/profile/models/supporting-types/Cargo.toml +++ b/crates/profile/models/supporting-types/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-supporting-types" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/profile/traits/entity-by-address/Cargo.toml b/crates/profile/traits/entity-by-address/Cargo.toml index 175eb86c3..7e7141615 100644 --- a/crates/profile/traits/entity-by-address/Cargo.toml +++ b/crates/profile/traits/entity-by-address/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "entity-by-address" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/sargon/Cargo.toml b/crates/sargon/Cargo.toml index f75742301..87eb37bf6 100644 --- a/crates/sargon/Cargo.toml +++ b/crates/sargon/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon" -version = "1.1.134" +version = "1.1.136" edition = "2021" resolver = "2" # features enabled in integration test diff --git a/crates/system/clients/clients/Cargo.toml b/crates/system/clients/clients/Cargo.toml index 6cf4cceae..4c4989fee 100644 --- a/crates/system/clients/clients/Cargo.toml +++ b/crates/system/clients/clients/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "clients" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/system/clients/http/Cargo.toml b/crates/system/clients/http/Cargo.toml index 971a96443..2aa5b466c 100644 --- a/crates/system/clients/http/Cargo.toml +++ b/crates/system/clients/http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "http-client" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/drivers/Cargo.toml b/crates/system/drivers/Cargo.toml index 82bbf21d3..79365d7aa 100644 --- a/crates/system/drivers/Cargo.toml +++ b/crates/system/drivers/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "drivers" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/system/interactors/Cargo.toml b/crates/system/interactors/Cargo.toml index b228c4aed..36cc7b492 100644 --- a/crates/system/interactors/Cargo.toml +++ b/crates/system/interactors/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "interactors" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/os/accounts/Cargo.toml b/crates/system/os/accounts/Cargo.toml index fdf08c02b..8b701de2a 100644 --- a/crates/system/os/accounts/Cargo.toml +++ b/crates/system/os/accounts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os-accounts" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/os/derive-public-keys/Cargo.toml b/crates/system/os/derive-public-keys/Cargo.toml index 48f84e94d..eda998f0d 100644 --- a/crates/system/os/derive-public-keys/Cargo.toml +++ b/crates/system/os/derive-public-keys/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os-derive-public-keys" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/os/factors/Cargo.toml b/crates/system/os/factors/Cargo.toml index 9f23e8a8b..051a0df2b 100644 --- a/crates/system/os/factors/Cargo.toml +++ b/crates/system/os/factors/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os-factors" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] @@ -32,3 +32,4 @@ preinterpret = { workspace = true } pretty_assertions = { workspace = true } serde = { workspace = true } serde_json = { workspace = true } +futures = { workspace = true } diff --git a/crates/system/os/factors/src/sargon_os_security_structures.rs b/crates/system/os/factors/src/sargon_os_security_structures.rs index d2efde48c..9c115781b 100644 --- a/crates/system/os/factors/src/sargon_os_security_structures.rs +++ b/crates/system/os/factors/src/sargon_os_security_structures.rs @@ -1,4 +1,5 @@ use crate::prelude::*; +use futures::future::join_all; #[async_trait::async_trait] pub trait OsSecurityStructuresQuerying { @@ -40,6 +41,14 @@ pub trait OsSecurityStructuresQuerying { &self, shield_id: SecurityStructureID, ) -> Result<()>; + + async fn entities_linked_to_security_structure( + &self, + shield_id: SecurityStructureID, + profile_to_check: ProfileToCheck, + ) -> Result; + + async fn get_shields_for_display(&self) -> Result; } #[async_trait::async_trait] @@ -185,6 +194,56 @@ impl OsSecurityStructuresQuerying for SargonOS { Ok(()) } + + async fn entities_linked_to_security_structure( + &self, + shield_id: SecurityStructureID, + profile_to_check: ProfileToCheck, + ) -> Result { + let metadata = self + .security_structure_of_factor_source_ids_by_security_structure_id( + shield_id, + )? + .metadata; + match profile_to_check { + ProfileToCheck::Current => self + .profile()? + .current_network()? + .entities_linked_to_security_structure(metadata), + ProfileToCheck::Specific(specific_profile) => { + let profile_network = specific_profile + .networks + .get_id(NetworkID::Mainnet) + .ok_or(CommonError::Unknown)?; + profile_network.entities_linked_to_security_structure(metadata) + } + } + } + + /// Returns all the Security Shields along with the number of entities linked to each Security Shield, + /// either provisionally or currently securified. + async fn get_shields_for_display(&self) -> Result { + let security_structures = + self.security_structures_of_factor_source_ids()?; + + let get_all_entities_linked_to_security_structures = + security_structures.iter().map(|shield| { + self.entities_linked_to_security_structure( + shield.metadata.id, + ProfileToCheck::Current, + ) + }); + + join_all(get_all_entities_linked_to_security_structures) + .await + .into_iter() + .collect::>>() + .map(|entities| { + ShieldsForDisplay::from_iter( + entities.into_iter().map(ShieldForDisplay::with_linked), + ) + }) + } } pub trait OsSecurityShieldPrerequisiteStatus { @@ -655,4 +714,409 @@ mod tests { let result = os.security_shield_prerequisites_status().unwrap(); assert_eq!(result, SecurityShieldPrerequisitesStatus::HardwareRequired); } + + #[actix_rt::test] + async fn get_entities_only_provisionally_securified_to_secure_structure() { + // ARRANGE + let os = SargonOS::fast_boot().await; + let shield_id = add_unsafe_shield(&os).await.unwrap(); + + // Two visible accounts + let accounts = Accounts::from_iter([ + Account::sample_mainnet_alice(), + Account::sample_mainnet_bob(), + ]); + // One hidden account + let hidden_accounts = + Accounts::from_iter([Account::sample_mainnet_diana()]); + // Two visible personas + let personas = Personas::from_iter([ + Persona::sample_mainnet_batman(), + Persona::sample_mainnet_satoshi(), + ]); + // One hidden persona + let hidden_personas = + Personas::from_iter([Persona::sample_mainnet_turing()]); + + let all_accounts = accounts + .iter() + .chain(hidden_accounts.iter()) + .collect::(); + let all_personas = personas + .iter() + .chain(hidden_personas.iter()) + .collect::(); + + os.add_accounts(all_accounts.clone()).await.unwrap(); + os.add_personas(all_personas.clone()).await.unwrap(); + + let addresses: IndexSet = all_accounts + .iter() + .map(|account| account.address().into()) + .chain(all_personas.iter().map(|persona| persona.address().into())) + .collect(); + + // ACT + os.apply_security_shield_with_id_to_entities(shield_id, addresses) + .await + .unwrap(); + + let result = os + .entities_linked_to_security_structure( + shield_id, + ProfileToCheck::Current, + ) + .await + .unwrap(); + + // ASSERT + let updated_accounts = os.accounts_on_current_network().unwrap(); + assert_eq!(result.accounts, updated_accounts); + let updated_hidden_accounts = os + .profile() + .unwrap() + .hidden_accounts_on_current_network() + .unwrap(); + assert_eq!(result.hidden_accounts, updated_hidden_accounts); + let updated_personas = os.personas_on_current_network().unwrap(); + assert_eq!(result.personas, updated_personas); + let updated_hidden_personas = os + .profile() + .unwrap() + .hidden_personas_on_current_network() + .unwrap(); + assert_eq!(result.hidden_personas, updated_hidden_personas) + } + + #[actix_rt::test] + async fn get_entities_currently_and_provisionally_securified_to_secure_structure( + ) { + // ARRANGE + let os = SargonOS::fast_boot().await; + let shield = add_unsafe_shield_with_matrix(&os).await.unwrap(); + let shield_id = shield.id(); + + let accounts = Accounts::from_iter([ + Account::sample_mainnet_alice(), + Account::sample_mainnet_bob(), + ]); + let personas = Personas::from_iter([ + Persona::sample_mainnet_satoshi(), + Persona::sample_mainnet_batman(), + ]); + + let all_accounts = accounts.iter().collect::(); + let all_personas = personas.iter().collect::(); + + os.add_accounts(all_accounts.clone()).await.unwrap(); + os.add_personas(all_personas.clone()).await.unwrap(); + + let addresses: IndexSet = all_accounts + .iter() + .map(|account| account.address().into()) + .chain(all_personas.iter().map(|persona| persona.address().into())) + .collect(); + + os.apply_security_shield_with_id_to_entities(shield_id, addresses) + .await + .unwrap(); + + // ACT + let mut account_alice = os + .account_by_address(accounts.first().unwrap().address()) + .unwrap(); + + let mut account_security_structure_of_instances = account_alice + .get_provisional() + .unwrap() + .as_factor_instances_derived() + .unwrap() + .clone(); + account_security_structure_of_instances + .authentication_signing_factor_instance = + HierarchicalDeterministicFactorInstance::sample_other(); + let account_secured_control = SecuredEntityControl::new( + account_alice + .clone() + .security_state() + .as_unsecured() + .unwrap() + .transaction_signing + .clone(), + AccessControllerAddress::sample_mainnet(), + account_security_structure_of_instances, + ) + .unwrap(); + account_alice + .set_security_state(EntitySecurityState::Securified { + value: account_secured_control, + }) + .unwrap(); + os.update_account(account_alice.clone()).await.unwrap(); + + let mut persona_satoshi = os + .persona_by_address(personas.first().unwrap().address()) + .unwrap(); + + let persona_security_structure_of_instances = persona_satoshi + .get_provisional() + .unwrap() + .as_factor_instances_derived() + .unwrap() + .clone(); + let persona_secured_control = SecuredEntityControl::new( + persona_satoshi + .clone() + .security_state() + .as_unsecured() + .unwrap() + .transaction_signing + .clone(), + AccessControllerAddress::sample_mainnet_other(), + persona_security_structure_of_instances, + ) + .unwrap(); + persona_satoshi + .set_security_state(EntitySecurityState::Securified { + value: persona_secured_control, + }) + .unwrap(); + os.update_persona(persona_satoshi.clone()).await.unwrap(); + + let result = os + .entities_linked_to_security_structure( + shield_id, + ProfileToCheck::Current, + ) + .await + .unwrap(); + + // ASSERT + let updated_accounts = os.accounts_on_current_network().unwrap(); + assert_eq!(result.accounts, updated_accounts); + + let is_account_alice_currently_securified = updated_accounts + .first() + .unwrap() + .security_state() + .is_currently_securified_with(shield_id); + assert!(is_account_alice_currently_securified); + let is_account_bob_provisionally_securified = updated_accounts + .get_at_index(1) + .unwrap() + .security_state() + .is_provisionally_securified_with(shield_id); + assert!(is_account_bob_provisionally_securified); + + let updated_personas = os.personas_on_current_network().unwrap(); + assert_eq!(result.personas, updated_personas); + + let is_persona_satoshi_currently_securified = updated_personas + .first() + .unwrap() + .security_state() + .is_currently_securified_with(shield_id); + assert!(is_persona_satoshi_currently_securified); + let is_persona_batman_provisionally_securified = updated_personas + .get_at_index(1) + .unwrap() + .security_state() + .is_provisionally_securified_with(shield_id); + assert!(is_persona_batman_provisionally_securified); + } + + #[actix_rt::test] + async fn test_get_entities_linked_to_secure_structure_for_specific_profile() + { + // ARRANGE + // Verify the entities when checking for a specific Profile + // (which will check on Mainnet, regardless of the current network set on Profile) + let mut profile_to_check = Profile::sample(); + profile_to_check + .app_preferences + .gateways + .change_current(Gateway::stokenet()); + let structure_ids_sample_other = + SecurityStructureOfFactorSourceIDs::sample(); + profile_to_check + .app_preferences + .security + .security_structures_of_factor_source_ids + .append(structure_ids_sample_other.clone()); + + let (os, shield_id, account, persona) = { + let os = SargonOS::fast_boot().await; + let shield_id = add_unsafe_shield(&os).await.unwrap(); + let network = NetworkID::Mainnet; + let account = os + .create_and_save_new_account_with_main_bdfs( + network, + DisplayName::sample(), + ) + .await + .unwrap(); + let persona = os + .create_and_save_new_persona_with_main_bdfs( + network, + DisplayName::sample_other(), + None, + ) + .await + .unwrap(); + (os, shield_id, account, persona) + }; + + // add security shield on mainnet entities + os.apply_security_shield_with_id_to_entities( + shield_id, + [ + AddressOfAccountOrPersona::from(account.address()), + AddressOfAccountOrPersona::from(persona.address()), + ] + .iter() + .cloned() + .collect(), + ) + .await + .unwrap(); + + // ACT + let result = os + .entities_linked_to_security_structure( + shield_id, + ProfileToCheck::Specific(profile_to_check), + ) + .await + .unwrap(); + + // ASSERT + assert!(result.accounts.is_empty()); + assert!(result.hidden_accounts.is_empty()); + assert!(result.personas.is_empty()); + assert!(result.hidden_personas.is_empty()) + } + + #[actix_rt::test] + async fn test_specific_profile_mainnet_missing() { + // Test the failure case when checking entities for a specific Profile that doesn't have Mainnet in its networks + let profile = Profile::sample_other(); + let os = SargonOS::fast_boot().await; + let shield_id = add_unsafe_shield(&os).await.unwrap(); + + let result = os + .entities_linked_to_security_structure( + shield_id, + ProfileToCheck::Specific(profile), + ) + .await + .expect_err("Expected an error"); + assert_eq!(result, CommonError::Unknown); + } + + #[actix_rt::test] + async fn test_get_shields_for_display() { + // ARRANGE + let os = SargonOS::fast_boot().await; + let shield_id_sample = add_unsafe_shield(&os).await.unwrap(); + let shield_id_sample_other = + add_unsafe_shield_with_matrix_with_fixed_metadata( + &os, + SecurityStructureMetadata::sample_other(), + ) + .await + .unwrap() + .id(); + + let main_account = Account::sample_mainnet_carol(); + + // some other accounts and personas + let accounts = Accounts::from_iter([ + Account::sample_mainnet_alice(), + Account::sample_mainnet_bob(), + ]); + let hidden_accounts = + Accounts::from_iter([Account::sample_mainnet_diana()]); + let personas = Personas::from_iter([ + Persona::sample_mainnet_batman(), + Persona::sample_mainnet_satoshi(), + ]); + let hidden_personas = + Personas::from_iter([Persona::sample_mainnet_turing()]); + + let all_accounts = accounts + .iter() + .chain(hidden_accounts.iter()) + .chain(__std_iter::once(main_account.clone())) + .collect::(); + let all_personas = personas + .iter() + .chain(hidden_personas.iter()) + .collect::(); + + os.add_accounts(all_accounts.clone()).await.unwrap(); + os.add_personas(all_personas.clone()).await.unwrap(); + + let address_of_main_account: IndexSet = + [main_account.address().into()].into_iter().collect(); + + let addresses_of_rest_entities: IndexSet = + all_accounts + .iter() + .map(|account| account.address().into()) + .chain( + all_personas.iter().map(|persona| persona.address().into()), + ) + .collect(); + + // ACT + os.apply_security_shield_with_id_to_entities( + shield_id_sample, + addresses_of_rest_entities, + ) + .await + .unwrap(); + + os.apply_security_shield_with_id_to_entities( + shield_id_sample_other, + address_of_main_account, + ) + .await + .unwrap(); + + let result = os.get_shields_for_display().await.unwrap(); + + // ASSERT + assert_eq!(result.iter().count(), 2); + assert_eq!(result.first().unwrap().metadata.id, shield_id_sample); + assert_eq!(result.first().unwrap().number_of_linked_accounts, 2); + assert_eq!(result.first().unwrap().number_of_linked_hidden_accounts, 1); + assert_eq!(result.first().unwrap().number_of_linked_personas, 2); + assert_eq!(result.first().unwrap().number_of_linked_hidden_personas, 1); + assert_eq!( + result.get_at_index(1).unwrap().metadata.id, + shield_id_sample_other + ); + assert_eq!( + result.get_at_index(1).unwrap().number_of_linked_accounts, + 1 + ); + assert_eq!( + result + .get_at_index(1) + .unwrap() + .number_of_linked_hidden_accounts, + 0 + ); + assert_eq!( + result.get_at_index(1).unwrap().number_of_linked_personas, + 0 + ); + assert_eq!( + result + .get_at_index(1) + .unwrap() + .number_of_linked_hidden_personas, + 0 + ) + } } diff --git a/crates/system/os/os/Cargo.toml b/crates/system/os/os/Cargo.toml index ca6b02e17..bdaf06a1e 100644 --- a/crates/system/os/os/Cargo.toml +++ b/crates/system/os/os/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/os/security-center/Cargo.toml b/crates/system/os/security-center/Cargo.toml index 4de930e95..53afc1185 100644 --- a/crates/system/os/security-center/Cargo.toml +++ b/crates/system/os/security-center/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os-security-center" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/os/signing/Cargo.toml b/crates/system/os/signing/Cargo.toml index 3828a2ad9..655854c4e 100644 --- a/crates/system/os/signing/Cargo.toml +++ b/crates/system/os/signing/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os-signing" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/os/transaction/Cargo.toml b/crates/system/os/transaction/Cargo.toml index fbf6a51a6..7b4d8973e 100644 --- a/crates/system/os/transaction/Cargo.toml +++ b/crates/system/os/transaction/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-os-transaction" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/profile-state-holder/Cargo.toml b/crates/system/profile-state-holder/Cargo.toml index bc27cdbb0..b59c699b3 100644 --- a/crates/system/profile-state-holder/Cargo.toml +++ b/crates/system/profile-state-holder/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "profile-state-holder" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/system/sub-systems/Cargo.toml b/crates/system/sub-systems/Cargo.toml index 495db2e49..4dad6b502 100644 --- a/crates/system/sub-systems/Cargo.toml +++ b/crates/system/sub-systems/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sub-systems" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/transaction/foundation/Cargo.toml b/crates/transaction/foundation/Cargo.toml index 6062ee049..de25d2089 100644 --- a/crates/transaction/foundation/Cargo.toml +++ b/crates/transaction/foundation/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "transaction-foundation" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/transaction/manifests/Cargo.toml b/crates/transaction/manifests/Cargo.toml index 54f10fb51..e75f9c30b 100644 --- a/crates/transaction/manifests/Cargo.toml +++ b/crates/transaction/manifests/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "manifests" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/transaction/models/Cargo.toml b/crates/transaction/models/Cargo.toml index d8667527a..373f00477 100644 --- a/crates/transaction/models/Cargo.toml +++ b/crates/transaction/models/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "transaction-models" -version = "1.1.134" +version = "1.1.136" edition = "2021" diff --git a/crates/uniffi/conversion-macros/Cargo.toml b/crates/uniffi/conversion-macros/Cargo.toml index 55fb62b61..212bf1e1b 100644 --- a/crates/uniffi/conversion-macros/Cargo.toml +++ b/crates/uniffi/conversion-macros/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "sargon-uniffi-conversion-macros" -version = "1.1.134" +version = "1.1.136" edition = "2021" [dependencies] diff --git a/crates/uniffi/uniffi_SPLIT_ME/Cargo.toml b/crates/uniffi/uniffi_SPLIT_ME/Cargo.toml index be3dada11..94bf84924 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/Cargo.toml +++ b/crates/uniffi/uniffi_SPLIT_ME/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sargon-uniffi" -version = "1.1.134" +version = "1.1.136" edition = "2021" build = "build.rs" diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/mod.rs b/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/mod.rs index 626bfd562..c58461680 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/mod.rs +++ b/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/mod.rs @@ -7,6 +7,7 @@ mod email_address; mod host_id; mod host_info; mod host_os; +mod shield_for_display; pub use account_for_display::*; pub use account_or_persona::*; @@ -17,3 +18,4 @@ pub use email_address::*; pub use host_id::*; pub use host_info::*; pub use host_os::*; +pub use shield_for_display::*; diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/shield_for_display.rs b/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/shield_for_display.rs new file mode 100644 index 000000000..e06710bee --- /dev/null +++ b/crates/uniffi/uniffi_SPLIT_ME/src/profile/supporting_types/shield_for_display.rs @@ -0,0 +1,66 @@ +use crate::prelude::*; +use sargon::ShieldForDisplay as InternalShieldForDisplay; + +decl_vec_samples_for!(ShieldsForDisplay, ShieldForDisplay); + +/// A minimal version of a Security Structure meant for display purposes within wallet +#[derive(Clone, PartialEq, Hash, Eq, Debug, uniffi::Record)] +pub struct ShieldForDisplay { + pub metadata: SecurityStructureMetadata, + pub number_of_linked_accounts: u32, + pub number_of_linked_hidden_accounts: u32, + pub number_of_linked_personas: u32, + pub number_of_linked_hidden_personas: u32, +} + +impl ShieldForDisplay { + pub fn into_internal(&self) -> InternalShieldForDisplay { + self.clone().into() + } +} + +impl From for ShieldForDisplay { + fn from(internal: InternalShieldForDisplay) -> Self { + Self { + metadata: SecurityStructureMetadata::from(internal.metadata), + number_of_linked_accounts: internal.number_of_linked_accounts + as u32, + number_of_linked_hidden_accounts: internal + .number_of_linked_hidden_accounts + as u32, + number_of_linked_personas: internal.number_of_linked_personas + as u32, + number_of_linked_hidden_personas: internal + .number_of_linked_hidden_personas + as u32, + } + } +} + +impl From for InternalShieldForDisplay { + fn from(internal: ShieldForDisplay) -> Self { + Self { + metadata: internal.metadata.into(), + number_of_linked_accounts: internal.number_of_linked_accounts + as usize, + number_of_linked_hidden_accounts: internal + .number_of_linked_hidden_accounts + as usize, + number_of_linked_personas: internal.number_of_linked_personas + as usize, + number_of_linked_hidden_personas: internal + .number_of_linked_hidden_personas + as usize, + } + } +} + +#[uniffi::export] +pub fn new_shield_for_display_sample() -> ShieldForDisplay { + InternalShieldForDisplay::sample().into() +} + +#[uniffi::export] +pub fn new_shield_for_display_sample_other() -> ShieldForDisplay { + InternalShieldForDisplay::sample_other().into() +} diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/entities_linked_to_security_structure/entities_linked_to_security_structure.rs b/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/entities_linked_to_security_structure/entities_linked_to_security_structure.rs new file mode 100644 index 000000000..fef0fed35 --- /dev/null +++ b/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/entities_linked_to_security_structure/entities_linked_to_security_structure.rs @@ -0,0 +1,21 @@ +use crate::prelude::*; +use sargon::EntitiesLinkedToSecurityStructure as InternalEntitiesLinkedToSecurityStructure; + +/// This is the result of checking what entities are controlled by a given `SecurityStructure`. +#[derive(Clone, PartialEq, InternalConversion, uniffi::Record)] +pub struct EntitiesLinkedToSecurityStructure { + /// The metadata of the linked security structure. + pub metadata: SecurityStructureMetadata, + + /// The visible accounts linked to the security structure. + pub accounts: Vec, + + /// The hidden accounts linked to the security structure. + pub hidden_accounts: Vec, + + /// The visible personas linked to the security structure. + pub personas: Vec, + + /// The hidden personas linked to the security structure. + pub hidden_personas: Vec, +} diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/entities_linked_to_security_structure/mod.rs b/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/entities_linked_to_security_structure/mod.rs new file mode 100644 index 000000000..9eb7cfcb8 --- /dev/null +++ b/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/entities_linked_to_security_structure/mod.rs @@ -0,0 +1,3 @@ +mod entities_linked_to_security_structure; + +pub use entities_linked_to_security_structure::*; diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/mod.rs b/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/mod.rs index 227617c58..db4a59ca8 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/mod.rs +++ b/crates/uniffi/uniffi_SPLIT_ME/src/profile/v100/mod.rs @@ -1,6 +1,7 @@ mod address; mod app_preferences; mod entities_linked_to_factor_source; +mod entities_linked_to_security_structure; mod entity; mod entity_security_state; mod factors; @@ -13,6 +14,7 @@ mod profile_file_contents; pub use address::*; pub use app_preferences::*; pub use entities_linked_to_factor_source::*; +pub use entities_linked_to_security_structure::*; pub use entity::*; pub use entity_security_state::*; pub use factors::*; diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/mod.rs b/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/mod.rs index 24f5596f5..65d8ad6bb 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/mod.rs +++ b/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/mod.rs @@ -5,6 +5,7 @@ mod sargon_os; mod sargon_os_apply_security_shield_interaction; mod sargon_os_derive_public_keys; mod sargon_os_entities_linked_to_factor_source; +mod sargon_os_entities_linked_to_security_structure; mod sargon_os_factors; mod sargon_os_gateway; mod sargon_os_personas; @@ -21,6 +22,7 @@ pub use sargon_os::*; pub use sargon_os_apply_security_shield_interaction::*; pub use sargon_os_derive_public_keys::*; pub use sargon_os_entities_linked_to_factor_source::*; +pub use sargon_os_entities_linked_to_security_structure::*; pub use sargon_os_factors::*; pub use sargon_os_gateway::*; pub use sargon_os_personas::*; diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_entities_linked_to_security_structure.rs b/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_entities_linked_to_security_structure.rs new file mode 100644 index 000000000..d195a9609 --- /dev/null +++ b/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_entities_linked_to_security_structure.rs @@ -0,0 +1,21 @@ +use sargon::OsSecurityStructuresQuerying; + +use crate::prelude::*; + +#[uniffi::export] +impl SargonOS { + /// Returns the entities linked to a given `SecurityStructureID`, either on the current `Profile` or a specific one. + pub async fn entities_linked_to_security_structure( + &self, + shield_id: SecurityStructureID, + profile_to_check: ProfileToCheck, + ) -> Result { + self.wrapped + .entities_linked_to_security_structure( + shield_id.into_internal(), + profile_to_check.into_internal(), + ) + .await + .into_result() + } +} diff --git a/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_security_structures.rs b/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_security_structures.rs index b3e63941d..c0cabd106 100644 --- a/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_security_structures.rs +++ b/crates/uniffi/uniffi_SPLIT_ME/src/system/sargon_os/sargon_os_security_structures.rs @@ -92,4 +92,15 @@ impl SargonOS { .security_shield_prerequisites_status() .into_result() } + + /// Returns all the Security Shields along with the number of entities linked to each Security Shield, + /// either provisionally or currently securified. + pub async fn get_shields_for_display( + &self, + ) -> Result> { + self.wrapped + .get_shields_for_display() + .await + .into_iter_result() + } }