Listen to git commits for a specific repo and run a shell command

Resolve did:plc and did:web to did docs

TODO:
- parse did doc to get relevant info (pds)
- validate that dids match

vielle.dev 1f00a3a0 a7bb68a5

verified
Changed files
+50 -1
src
+50 -1
src/did.rs
··· 61 61 }; 62 62 return Ok(String::from(did)); 63 63 } 64 + 65 + fn parse_doc(did: String, text: String) -> Result<DidDoc, ()> { 66 + return Ok(DidDoc { did: String::new() }); 67 + } 68 + 69 + fn get_plc_doc(plc: &str) -> Result<DidDoc, ()> { 70 + let res = match reqwest::blocking::get("https://plc.directory/did:plc".to_owned() + plc) { 71 + Ok(val) => val, 72 + Err(_) => return Err(()), 73 + }; 74 + 75 + if !res.status().is_success() { 76 + return Err(()); 77 + } 78 + 79 + return parse_doc( 80 + "did:plc:".to_owned() + plc, 81 + match res.text() { 82 + Ok(val) => val, 83 + Err(_) => return Err(()), 84 + }, 85 + ); 86 + } 87 + 88 + fn get_web_doc(web: &str) -> Result<DidDoc, ()> { 89 + let res = match reqwest::blocking::get("https://".to_owned() + web + "/.well-known/did.json") { 90 + Ok(val) => val, 91 + Err(_) => return Err(()), 92 + }; 93 + 94 + if !res.status().is_success() { 95 + return Err(()); 96 + } 97 + 98 + return parse_doc( 99 + "did:web:".to_owned() + web, 100 + match res.text() { 101 + Ok(val) => val, 102 + Err(_) => return Err(()), 103 + }, 104 + ); 64 105 } 65 106 66 107 pub fn get_did(handle: String) -> Result<DidDoc, ()> { ··· 74 115 } 75 116 }; 76 117 77 - return Ok(DidDoc { did }); 118 + let did_doc = if did.starts_with("did:plc:") { 119 + get_plc_doc(&did[8..]) 120 + } else if did.starts_with("did:web:") { 121 + get_web_doc(&did[8..]) 122 + } else { 123 + Err(()) 124 + }; 125 + 126 + return did_doc; 78 127 }