lib.rs (7059B)
1 #![cfg_attr(coverage_nightly, feature(coverage_attribute))] 2 #![forbid(unsafe_code)] 3 4 #[derive(Clone, Copy, Debug, PartialEq, Eq)] 5 pub struct ApprovedFixtureIdentity { 6 pub label: &'static str, 7 pub username: &'static str, 8 pub email: &'static str, 9 pub secret_key_hex: &'static str, 10 pub public_key_hex: &'static str, 11 pub nsec: &'static str, 12 pub npub: &'static str, 13 } 14 15 pub const APPROVED_FIXTURE_NAMESPACE: &str = "radroots-approved-fixture-v1"; 16 17 pub const FIXTURE_ALICE_LABEL: &str = "fixture_alice"; 18 pub const FIXTURE_ALICE_USERNAME: &str = "fixture_alice"; 19 pub const FIXTURE_ALICE_EMAIL: &str = "fixture_alice@fixtures.test"; 20 pub const FIXTURE_ALICE_SECRET_KEY_HEX: &str = 21 "10c5304d6c9ae3a1a16f7860f1cc8f5e3a76225a2663b3a989a0d775919b7df5"; 22 pub const FIXTURE_ALICE_PUBLIC_KEY_HEX: &str = 23 "585591529da0bab31b3b1b1f986611cf5f435dca84f978c89ee8a40cca7103df"; 24 pub const FIXTURE_ALICE_NSEC: &str = 25 "nsec1zrznqntvnt36rgt00ps0rny0tca8vgj6ye3m82vf5rthtyvm0h6syu7drz"; 26 pub const FIXTURE_ALICE_NPUB: &str = 27 "npub1tp2ez55a5zatxxemrv0eses3ea05xhw2snuh3jy7azjqejn3q00s3vy5a9"; 28 pub const FIXTURE_ALICE: ApprovedFixtureIdentity = ApprovedFixtureIdentity { 29 label: FIXTURE_ALICE_LABEL, 30 username: FIXTURE_ALICE_USERNAME, 31 email: FIXTURE_ALICE_EMAIL, 32 secret_key_hex: FIXTURE_ALICE_SECRET_KEY_HEX, 33 public_key_hex: FIXTURE_ALICE_PUBLIC_KEY_HEX, 34 nsec: FIXTURE_ALICE_NSEC, 35 npub: FIXTURE_ALICE_NPUB, 36 }; 37 38 pub const FIXTURE_BOB_LABEL: &str = "fixture_bob"; 39 pub const FIXTURE_BOB_USERNAME: &str = "fixture_bob"; 40 pub const FIXTURE_BOB_EMAIL: &str = "fixture_bob@fixtures.test"; 41 pub const FIXTURE_BOB_SECRET_KEY_HEX: &str = 42 "59392e9068f66431b12f70218fb61281cb6b433d7f27c55d61f1a63fe1a96ff8"; 43 pub const FIXTURE_BOB_PUBLIC_KEY_HEX: &str = 44 "e0266e3cfb0d2886f91c73f5f868f3b98273713e5fcd97c081663f5518a4b3af"; 45 pub const FIXTURE_BOB_NSEC: &str = 46 "nsec1tyujayrg7ejrrvf0wqscldsjs89kksea0unu2htp7xnrlcdfdluqrjya9h"; 47 pub const FIXTURE_BOB_NPUB: &str = 48 "npub1uqnxu08mp55gd7guw06ls68nhxp8xuf7tlxe0sypvcl42x9ykwhsd55k2g"; 49 pub const FIXTURE_BOB: ApprovedFixtureIdentity = ApprovedFixtureIdentity { 50 label: FIXTURE_BOB_LABEL, 51 username: FIXTURE_BOB_USERNAME, 52 email: FIXTURE_BOB_EMAIL, 53 secret_key_hex: FIXTURE_BOB_SECRET_KEY_HEX, 54 public_key_hex: FIXTURE_BOB_PUBLIC_KEY_HEX, 55 nsec: FIXTURE_BOB_NSEC, 56 npub: FIXTURE_BOB_NPUB, 57 }; 58 59 pub const FIXTURE_CAROL_LABEL: &str = "fixture_carol"; 60 pub const FIXTURE_CAROL_USERNAME: &str = "fixture_carol"; 61 pub const FIXTURE_CAROL_EMAIL: &str = "fixture_carol@fixtures.test"; 62 pub const FIXTURE_CAROL_SECRET_KEY_HEX: &str = 63 "4d6c20fdd86857de77ff5cfa5c545751ba2efd126e0b6642dae9764d782d6509"; 64 pub const FIXTURE_CAROL_PUBLIC_KEY_HEX: &str = 65 "1952b8c6943898bceffcff1b7699c4a775a4d13b4a9ba0096ba26ef04492bb1c"; 66 pub const FIXTURE_CAROL_NSEC: &str = 67 "nsec1f4kzplwcdptaualltna9c4zh2xazalgjdc9kvsk6a9my67pdv5ys2pqkaj"; 68 pub const FIXTURE_CAROL_NPUB: &str = 69 "npub1r9ft33558zvtemluludhdxwy5a66f5fmf2d6qztt5fh0q3yjhvwqgzmkl6"; 70 pub const FIXTURE_CAROL: ApprovedFixtureIdentity = ApprovedFixtureIdentity { 71 label: FIXTURE_CAROL_LABEL, 72 username: FIXTURE_CAROL_USERNAME, 73 email: FIXTURE_CAROL_EMAIL, 74 secret_key_hex: FIXTURE_CAROL_SECRET_KEY_HEX, 75 public_key_hex: FIXTURE_CAROL_PUBLIC_KEY_HEX, 76 nsec: FIXTURE_CAROL_NSEC, 77 npub: FIXTURE_CAROL_NPUB, 78 }; 79 80 pub const FIXTURE_DIEGO_LABEL: &str = "fixture_diego"; 81 pub const FIXTURE_DIEGO_USERNAME: &str = "fixture_diego"; 82 pub const FIXTURE_DIEGO_EMAIL: &str = "fixture_diego@fixtures.test"; 83 pub const FIXTURE_DIEGO_SECRET_KEY_HEX: &str = 84 "9de56c1fdfce9ab00af85b3d7003c1d15cffb84cdf303c3a83c1a3fb1a2d0db0"; 85 pub const FIXTURE_DIEGO_PUBLIC_KEY_HEX: &str = 86 "5d3eab6e78eb7e467a9e196a63456c9fafb93fb88b7052b83229870889923aa4"; 87 pub const FIXTURE_DIEGO_NSEC: &str = 88 "nsec1nhjkc87le6dtqzhctv7hqq7p69w0lwzvmucrcw5rcx3lkx3dpkcqkrmgp5"; 89 pub const FIXTURE_DIEGO_NPUB: &str = 90 "npub1t5l2kmncadlyv757r94xx3tvn7hmj0ac3dc99wpj9xrs3zvj82jqwwcglm"; 91 pub const FIXTURE_DIEGO: ApprovedFixtureIdentity = ApprovedFixtureIdentity { 92 label: FIXTURE_DIEGO_LABEL, 93 username: FIXTURE_DIEGO_USERNAME, 94 email: FIXTURE_DIEGO_EMAIL, 95 secret_key_hex: FIXTURE_DIEGO_SECRET_KEY_HEX, 96 public_key_hex: FIXTURE_DIEGO_PUBLIC_KEY_HEX, 97 nsec: FIXTURE_DIEGO_NSEC, 98 npub: FIXTURE_DIEGO_NPUB, 99 }; 100 101 pub const APPROVED_FIXTURE_IDENTITIES: [ApprovedFixtureIdentity; 4] = 102 [FIXTURE_ALICE, FIXTURE_BOB, FIXTURE_CAROL, FIXTURE_DIEGO]; 103 104 pub fn approved_fixture_identities() -> &'static [ApprovedFixtureIdentity; 4] { 105 &APPROVED_FIXTURE_IDENTITIES 106 } 107 108 pub fn approved_fixture_identity(label: &str) -> Option<ApprovedFixtureIdentity> { 109 match label { 110 FIXTURE_ALICE_LABEL => Some(FIXTURE_ALICE), 111 FIXTURE_BOB_LABEL => Some(FIXTURE_BOB), 112 FIXTURE_CAROL_LABEL => Some(FIXTURE_CAROL), 113 FIXTURE_DIEGO_LABEL => Some(FIXTURE_DIEGO), 114 _ => None, 115 } 116 } 117 118 pub const RELAY_PRIMARY_WSS: &str = "wss://relay.example.com"; 119 pub const RELAY_SECONDARY_WSS: &str = "wss://relay-2.example.com"; 120 pub const RELAY_TERTIARY_WSS: &str = "wss://relay-3.example.com"; 121 122 pub const APP_PRIMARY_HTTPS: &str = "https://app.example.com"; 123 pub const API_PRIMARY_HTTPS: &str = "https://api.example.com"; 124 pub const CDN_PRIMARY_HTTPS: &str = "https://cdn.example.com"; 125 126 #[cfg(test)] 127 #[cfg_attr(coverage_nightly, coverage(off))] 128 mod tests { 129 use super::{ 130 API_PRIMARY_HTTPS, APP_PRIMARY_HTTPS, APPROVED_FIXTURE_NAMESPACE, CDN_PRIMARY_HTTPS, 131 FIXTURE_ALICE, FIXTURE_BOB, FIXTURE_CAROL, FIXTURE_DIEGO, RELAY_PRIMARY_WSS, 132 RELAY_SECONDARY_WSS, RELAY_TERTIARY_WSS, approved_fixture_identities, 133 approved_fixture_identity, 134 }; 135 136 #[test] 137 fn fixture_lookup_covers_known_and_missing_labels() { 138 let fixtures = approved_fixture_identities(); 139 assert_eq!( 140 fixtures, 141 &[FIXTURE_ALICE, FIXTURE_BOB, FIXTURE_CAROL, FIXTURE_DIEGO] 142 ); 143 for fixture in fixtures { 144 assert_eq!(approved_fixture_identity(fixture.label), Some(*fixture)); 145 assert_eq!(fixture.label, fixture.username); 146 assert!(fixture.email.ends_with("@fixtures.test")); 147 assert_eq!(fixture.secret_key_hex.len(), 64); 148 assert_eq!(fixture.public_key_hex.len(), 64); 149 assert!(fixture.nsec.starts_with("nsec1")); 150 assert!(fixture.npub.starts_with("npub1")); 151 } 152 assert_eq!(approved_fixture_identity("fixture_unknown"), None); 153 } 154 155 #[test] 156 fn endpoint_constants_use_expected_schemes() { 157 assert_eq!(APPROVED_FIXTURE_NAMESPACE, "radroots-approved-fixture-v1"); 158 for relay in [RELAY_PRIMARY_WSS, RELAY_SECONDARY_WSS, RELAY_TERTIARY_WSS] { 159 assert!(relay.starts_with("wss://")); 160 assert!(relay.ends_with(".example.com")); 161 } 162 for origin in [APP_PRIMARY_HTTPS, API_PRIMARY_HTTPS, CDN_PRIMARY_HTTPS] { 163 assert!(origin.starts_with("https://")); 164 assert!(origin.ends_with(".example.com")); 165 } 166 } 167 }