Skip to content

Commit b7dd13f

Browse files
committed
Merge the permissions inspector fix from split/3
Brings upd/split/3-permissions at 88a7482 into split/4-client-resolve. That carries the one commit which makes `tools/permissions-inspector/wasm` pass the request evidence and the signal providers to `assemble_permissions`, and which formats the crate. This branch carries the same inspector and the same `Permissions Inspector` workflow, so it failed the same way. The merge had no conflicts and touches only the four files under `tools/permissions-inspector/wasm`. Tests. `./scripts/build-inspector-wasm.sh` builds clean for wasm32-unknown-unknown on this tree, and `cargo fmt --check` on the crate is clean.
2 parents 2c34be4 + 88a7482 commit b7dd13f

4 files changed

Lines changed: 80 additions & 9 deletions

File tree

tools/permissions-inspector/wasm/Cargo.lock

Lines changed: 35 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/permissions-inspector/wasm/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,12 @@ crate-type = ["cdylib"]
99

1010
[dependencies]
1111
trusted-server-core = { path = "../../../crates/trusted-server-core" }
12+
# The inspector runs the same permission signal providers an adapter ships,
13+
# in the same default order, so the page answers as a deployment would.
14+
trusted-server-permission-signal-gpc = { path = "../../../crates/permission-signal/gpc" }
15+
trusted-server-permission-signal-gpp = { path = "../../../crates/permission-signal/gpp" }
16+
trusted-server-permission-signal-tcf = { path = "../../../crates/permission-signal/tcf" }
17+
trusted-server-permission-signal-us-privacy = { path = "../../../crates/permission-signal/us-privacy" }
1218
serde = { version = "1", features = ["derive"] }
1319
serde_json = "1"
1420

tools/permissions-inspector/wasm/build.rs

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,17 @@ fn workspace_version() -> String {
3030

3131
fn main() {
3232
println!("cargo:rustc-env=TS_CORE_VERSION={}", workspace_version());
33-
println!("cargo:rustc-env=TS_CORE_COMMIT={}", git(&["rev-parse", "--short=9", "HEAD"]));
34-
println!("cargo:rustc-env=TS_CORE_DATE={}", git(&["show", "-s", "--format=%cs", "HEAD"]));
35-
println!("cargo:rustc-env=TS_CORE_BRANCH={}", git(&["rev-parse", "--abbrev-ref", "HEAD"]));
33+
println!(
34+
"cargo:rustc-env=TS_CORE_COMMIT={}",
35+
git(&["rev-parse", "--short=9", "HEAD"])
36+
);
37+
println!(
38+
"cargo:rustc-env=TS_CORE_DATE={}",
39+
git(&["show", "-s", "--format=%cs", "HEAD"])
40+
);
41+
println!(
42+
"cargo:rustc-env=TS_CORE_BRANCH={}",
43+
git(&["rev-parse", "--abbrev-ref", "HEAD"])
44+
);
3645
println!("cargo:rerun-if-changed=../../../Cargo.toml");
3746
}

tools/permissions-inspector/wasm/src/lib.rs

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,29 @@
33
//! functions the server runs: `build_context_from_signals` decodes the raw
44
//! consent signals and `assemble_permissions` resolves the policy.
55
6+
use std::sync::Arc;
7+
68
use serde::Deserialize;
79
use serde_json::json;
810
use trusted_server_core::consent::build_context_from_signals;
911
use trusted_server_core::consent::types::RawConsentSignals;
1012
use trusted_server_core::ec::consent::{GeoStatus, assemble_permissions};
13+
use trusted_server_core::evidence::OwnedRequestInfo;
14+
use trusted_server_core::permission_signal::PermissionSignalProvider;
1115
use trusted_server_core::permissions::{Permission, PermissionMaps};
1216
use trusted_server_core::platform::GeoInfo;
1317

18+
/// The signal providers the inspector asks, in the order every adapter offers
19+
/// them when `[permission_signal] sources` names none.
20+
fn providers() -> Vec<Arc<dyn PermissionSignalProvider>> {
21+
vec![
22+
Arc::new(trusted_server_permission_signal_gpc::GpcProvider::new()),
23+
Arc::new(trusted_server_permission_signal_gpp::GppSaleOptOutProvider::new()),
24+
Arc::new(trusted_server_permission_signal_us_privacy::UsPrivacyProvider::new()),
25+
Arc::new(trusted_server_permission_signal_tcf::TcfProvider::new()),
26+
]
27+
}
28+
1429
/// The inspector's evaluation request.
1530
#[derive(Deserialize)]
1631
struct EvalInput {
@@ -38,14 +53,20 @@ fn eval_json(input: &str) -> String {
3853
gpc: input.gpc,
3954
};
4055
let ctx = build_context_from_signals(&signals);
56+
// The page carries no request, only the consent signals above, and each of
57+
// the four providers answers from the consent record rather than from
58+
// request evidence, so empty evidence changes none of their answers. A
59+
// provider that read a header or a cookie would need real evidence here.
60+
let evidence = OwnedRequestInfo::default();
61+
let providers = providers();
4162
let maps = PermissionMaps::standard();
4263
let (state, jurisdiction) = match input.geo.as_str() {
4364
"failed" => {
44-
let state = assemble_permissions(&ctx, GeoStatus::Failed);
65+
let state = assemble_permissions(&ctx, &evidence, GeoStatus::Failed, &providers);
4566
(state, "unknown".to_string())
4667
}
4768
"none" => {
48-
let state = assemble_permissions(&ctx, GeoStatus::NoLocation);
69+
let state = assemble_permissions(&ctx, &evidence, GeoStatus::NoLocation, &providers);
4970
(state, jurisdiction_name(maps.default_jurisdiction()))
5071
}
5172
_ => {
@@ -59,7 +80,8 @@ fn eval_json(input: &str) -> String {
5980
region: input.region.clone().filter(|r| !r.is_empty()),
6081
asn: None,
6182
};
62-
let state = assemble_permissions(&ctx, GeoStatus::Located(&info));
83+
let state =
84+
assemble_permissions(&ctx, &evidence, GeoStatus::Located(&info), &providers);
6385
let jurisdiction = jurisdiction_name(
6486
maps.jurisdiction_for(input.country.as_deref(), input.region.as_deref()),
6587
);
@@ -83,7 +105,8 @@ fn eval_json(input: &str) -> String {
83105
fn jurisdiction_name(j: trusted_server_core::consent::jurisdiction::Jurisdiction) -> String {
84106
let name = format!("{j:?}").to_lowercase();
85107
let name = name.split('(').next().unwrap_or(&name).to_string();
86-
name.replace("usstate", "us-state").replace("nonregulated", "non-regulated")
108+
name.replace("usstate", "us-state")
109+
.replace("nonregulated", "non-regulated")
87110
}
88111

89112
fn validate_json(yaml: &str) -> String {

0 commit comments

Comments
 (0)