lib

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

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 }