lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

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 }