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